[Network] 5. ARP, TCP, UDP


ARP (Address Resolution Protocol)

  • ARP는 IP 주소를 MAC 주소와 매칭시키기 위한 프로토콜이다. 즉, 물리적인 주소인 MAC 주소와 논리적인 주소인 IP 주소를 대응 시키는 역할을 한다.
  • MAC 주소란?
    • 네트워크 상에서 서로를 구분하기 위하여 Device 마다 할당된 물리적인 주소를 뜻하며, 정확한 정의로 컴퓨터에 장착된 랜 카드를 구별하기 위해 만들어진 식별 번호이다.
    • 또한 데이터링크 계층(제 2계층)에서 통신을 위해 사용되는 48bit 로 된 식별자이다. MAC 주소는 8비트 마다 하이픈(-) 이나 콜론 (:) 으로 구분하여 16진수로 표기한다.
  • 네트워크 통신을 하기 위해서는 제 3계층(네트워크)으로부터 받은 PacketFrame(데이터링크 계층에서의 데이터 단위)으로 만들어 케이블로 흘려보내야 하는데, 이때 출발지 MAC 주소는 자기 자신의 NIC 에 쓰여 있는 MAC 주소라서 알 수 있지만 목적지 MAC 주소는 알 수가 없다.
  • 이 때 ARP를 이용하여 IP 주소로부터 MAC 주소를 구할 수 있다.
  • NIC(Network Interface Card)는 컴퓨터, 네트워크 안에서 컴퓨터끼리 통신하는 데 쓰이는 하드웨어의 하나이다. 랜 카드라고 흔히 말하며, OSI 계층 1(물리 계층)과 계층 2(데이터 링크 계층) 장치를 가지는데, MAC 주소를 사용하여 낮은 수준의 주소 할당 시스템을 제공하고 네트워크 매개체로 물리적인 접근을 가능하게 한다.
  • ARP 의 과정은 ARP request $\rightarrow$ ARP reply $\rightarrow$ ARP 테이블 등록 순이다.
  • 동일 네트워크 상에서는 수집된 ARP 테이블을 참고하여 Frame 을 만든다. 다른 네트워크 간 통신은 기본 게이트웨이의 MAC 주소를 ARP 에서 조회하여 목적지 MAC 주소로 등록한다.
  • 기본 게이트웨이는 자신 이외의 네트워크로 갈 때 사용하는 출구가 되는 IP 주소이다. 보통 방화벽이나 라우터의 IP 주소가 기본 게이트웨이가 되는 경우가 많다.
  • IP 주소는 목적지까지 바뀌지 않지만 MAC 주소는 NIC 를 경유할 때 마다 바뀐다.

TCP (Transmission Control Protocol)

  • TCP 는 Transmission Control Protocol 의 약자이고, UDP 는 User Datagram Protocol 의 약자이다. 두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜 을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있다.

    Untitled

  • TCP 는 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP 와 함께 사용하는 프로토콜이다. 전송 제어 프로토콜로 IP 와 함께 TCP/IP로 불리며 제 4계층(전송 계층)에서 사용되는 프로토콜이다. IP 는 배달을, TCP 는 패킷의 추적 및 관리를 하게 된다.
  • TCP 는 데이터를 송신할 때 마다 확인 응답을 주고 받는 절차가 있어서 통신의 신뢰성을 높인다. 웹이나 메일, 파일 공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스에 주로 사용된다.
  • 또한 TCP 는 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(데이터, 메세지, 세그먼트라는 블록 단위)을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.

TCP 의 특징

  • 1) 연결형 서비스: 연결형 서비스로 가상 회선 방식을 제공한다.

    Untitled

    • 이 때 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking 으로 연결을 해제한다.
    • TCP 3-hand-shake
      • 3-hand-shake 는 네트워크 연결을 설정하는 과정이다.
      • TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
      • 실제 과정
        1. 먼저 open()을 실행한 클라이언트가 SYN을 보내고 SYN_SENT 상태로 대기한다.
        2. 서버는 SYN_RCVD 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
        3. SYN과 응답 ACK을 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK를 보낸다.
        4. 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.
    • TCP 4-hand-shake
      • 4-hand-shake 는 연결을 해제하는 과정이다.
      • Termination(해제)의 종류
        • Graceful connection release(정상적인 연결 해제): 정상적인 연결해제에서는 양쪽 커넥션이 서로 모두 닫을 때까지 연결되어 있다.
        • Abrupt connection release(갑작스런 연결 해제): 갑자기 한 TCP 엔티티가 연결을 강제로 닫는 경우 혹은 한 사용자가 두 데이터 전송 방향을 모두 닫는 경우에 발생한다.
      • 실제 과정
        1. 먼저 close()를 실행한 클라이언트가 FIN을 보내고 FIN_WAIT1 상태로 대기한다.
        2. 서버는 CLOSE_WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다.
        3. ACK를 받은 클라이언트는 상태를 FIN_WAIT2로 변경한다.
        4. close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트에 보내 LAST_ACK 상태로 바꾼다.
        5. FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME_WAIT에서 일정 시간이 지나면 CLOSED된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
          • 반드시 서버만 CLOSE_WAIT 상태를 갖는 것은 아니다.
          • 서버가 먼저 종료하겠다고 FIN을 보낼 수 있고, 이런 경우 서버가 FIN_WAIT1 상태가 된다.
          • 누가 먼저 close() 를 요청하느냐에 따라 상태가 달라질 수 있다.
  • 2) 흐름제어(Flow Control)
    • 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다.
    • 즉 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.
    • 수신자가 윈도우크기(Window Size) 값을 통해 수신량을 정할 수 있다.
  • 3) 혼잡제어(Congestion Control)
    • 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지한다.
    • 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.
  • 4) 신뢰성이 높은 전송(Reliable transmission)
    • Dupack-based retransmission
      • 정상적인 상황에서는 ACK 값이 연속적으로 전송되어야 한다.
      • 그러나 ACK 값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
    • Timeout-based retransmission
      • 일정시간 동안 ACK 값이 수신을 못할 경우 재전송을 요청한다.
    • ACK
      • 기본적으로 ACK는 TCP Header에 포함되어있는 4 Byte(32bit)크기의 정수 데이터이다.
      • TCP 통신에서 ACK패킷 도착여부를 확인 하기위해 사용된다.
      • 수신한 패킷의 Sequence Number 와 Data 의 크기에 따라 ACK 번호가 결정되는데, 결정할 때 사용하는 공식은 “SEQ + (Data Size)” 이다.
      • Data Size 가 0이라면 같은 ACK을 반복하게 된다. 이것을 방지하기 위해 받은 패킷의 Data Size 가 0이라면 Sequnce 번호에 1을 더한 값을 ACK으로 설정한 후 패킷을 전달하게 된다.
      • A 는 데이터를 보낸 후 B 한테 까지 정상적으로 데이터가 도착했으면 받아야 할 ACK 값을 받지 못하면 TCP의 에러제어에 의해서 패킷을 재전송 하게된다.
      • 이 때 재전송 하기 위해 A는 보낸 패킷을 ACK을 받을 때 까지 보관한다.
      • 그리고 마지막으로 A 는 다음 SEQ 번호에 가장 최근에 받은 ACK 번호를 사용해서 다음 패킷을 전송한다.
  • 5) 전이중, 점대점 방식
    • 전이중 (Full-Duplex): 전송이 양방향으로 동시에 일어날 수 있다.
    • 점대점 (Point to Point): 각 연결이 정확히 2개의 종단점을 가지고 있다.
    • 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.

TCP Header

Untitled

  • 응용 계층(L4 In TCP/IP 4계층)으로부터 데이터를 받은 TCP 는 헤더를 추가한 후에 이를 IP 로 보낸다. 헤더에는 아래 표와 같은 정보가 포함된다.

    UntitledTCP 헤더

    제어비트(Flag Bit) 정보제어비트(Flag Bit) 정보

  • ACK 제어비트

    Untitled

    • ACK 는 송신측에 대하여 수신측에서 긍정 응답으로 보내지는 전송 제어용 캐릭터
    • ACK 번호를 사용하여 패킷이 도착했는지 확인한다.
    • 송신한 패킷이 제대로 도착하지 않았으면 재송신을 요구한다.

UDP (User Datagram Protocol)

  • UDP 는 TCP 와 함께 데이터그램(데이터그램은 사용자의 순수한 message를 다르게 부르는 말)으로 알려진 단문 메시지를 교환하기 위해 사용하는 프로토콜이다.

    Untitled

  • 데이터만 보내고 확인 응답과 같은 절차를 생략할 수 있으므로 통신의 신속성을 높인다. 주로 DNS, VoIP 등에 사용 된다.
  • 비연결형 프로토콜이다.
  • 할당되는 논리적인 경로가 없고 각각의 패킷이 다른 경로로 전송되고 이 각각의 패킷은 독립적인 관계를 지니게 되는데, 이렇게 데이터를 서로 다른 경로로 독립 처리하는 프로토콜을 UDP 라고 한다.
  • 신뢰성이 낮으나, TCP보다 속도가 빠르다.

UDP Header

  • 응용 계층으로부터 데이터를 받은 UDP 도 UDP 헤더를 추가한 후에 이를 IP 로 보낸다.

    Untitled

  • UDP 는 수신자가 데이터를 받는지 아닌지 관심이 없기 때문에 헤더에 포함된 정보가 부실하다. 즉, 신뢰성을 보장해주지 않지만 간단하고 속도가 빠른 것이 특징이다.
  • TCP 와 UDP 모두 포트 번호로 서비스를 식별한다. 즉 포트 번호를 이용하여 주소를 지정한다. 또한 데이터 오류검사에 사용하는 체크섬이 존재한다.
  • 두 프로토콜을 구분하는 주요한 차이는 통신의 신뢰성이냐 신속성이냐 이다.

TCP, UDP 정리 및 주요 차이점

TCP UDP
Connection-oriented protocol (연결지향형 프로토콜) - 연결이 성공해야 통신 가능 Connection-less protocol (비연결지향형 프로토콜) - 연결 없이 통신 가능
Connection by byte stream (바이트 스트림을 통한 연결) - 데이터의 경계를 구분하지 않음 Connection by message stream (메세지 스트림을 통한 연결) - 데이터의 경계를 구분함
Congestion / Flow control (혼잡제어, 흐름제어) NO Congestion / Flow control (혼잡제어와 흐름제어 지원 X)
Ordered, Lower speed (순서 보장, 상대적으로 느림) Not ordered, Higer speed (순서 보장되지 않음, 상대적으로 빠름)
Reliable data transmission (신뢰성 있는 데이터 전송 - 안정적, 데이터의 재전송 존재) Unreliable data transmission (데이터 전송 보장 X, 데이터 재전송 없음)
TCP packet : Segment (세그먼트 TCP 패킷) UDP packet : Datagram (데이터그램 UDP 패킷)
HTTP, Email, File transfer 에서 사용 DNS, Broadcasting (도메인, 실시간 동영상 서비스에서 사용)
일 대 일(Unicast) 통신 일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast) 통신
맨 위로 이동 ↑

댓글 남기기