[Network] TCP/UDP

GonnabeAlright·2021년 11월 21일
0
post-thumbnail

TCP와 UDP

  • 네트워크 계층 중 전송 계층에서 사용하는 프로토콜

TCP(Transmission Control Protocol)

  • 인터넷 상에서 데이터를 메세지의 형태(세그먼트 라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
  • TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.
  • 연결형 서비스로 가상 회선 방식을 제공한다.

    3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.

  • 흐름제어 및 혼잡제어를 제공한다.

흐름제어

  • 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것
  • 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.

혼잡제어

  • 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
  • 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.
  • 높은 신뢰성을 보장한다.
  • UDP보다 속도가 느리다.
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식이다.

전이중

  • 전송이 양방향으로 동시에 일어날 수 있다.

점대점

  • 각 연결이 정확히 2개의 종단점을 가지고 있다.
  • 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.
  • 연속성보다는 신뢰성 있는 전송이 중요할 때에 사용된다.

UDP(User Datagram Protocol)

  • 데이터를 데이터그램 단위로 처리하는 프로토콜이다.

  • 비연결형 서비스로 데이터그램 방식을 제공한다.

    • 연결을 위해 할당되는 논리적인 경로가 없다.
    • 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 된다.
    • 이렇게 데이터를 서로 다른 경로로 독립적으로 처리한다.
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.

  • UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.

  • 신뢰성이 낮다.

  • TCP보다 속도가 빠르다.

  • 신뢰성보다는 연속성이 중요한 서비스, 예를 들면 실시간 서비스(streaming)에 사용된다.

  • UDP와 TCP는 각각 별도의 포트 주소 공간을 관리하므로 같은 포트 번호를 사용해도 무방하다. 즉, 두 프로토콜에서 동일한 포트 번호를 할당해도 서로 다른 포트로 간주한다.
  • 또한 같은 모듈(UDP or TCP)내에서도 클라이언트 프로그램에서 동시에 여러 커넥션을 확립할 경우에는 서로 다른 포트 번호를 동적으로 할당한다.(동적할당에 사용되는 포트번호는 49,152 ~ 65,535이다.)

TCP와 UDP 차이점

TCP와 UDP의 가장 큰 차이는 세그먼트(Segment) 전달의 신뢰성에 있다.

TCP(Transmission Control Protocol)

TCP는 수신한 세그먼트에 에러가 발생하면 재전송을 요구하여 에러를 복구한다. 이처럼 에러복구 기능이 있는 프로토콜을 '신뢰성 있는 프로토콜'이라고 한다.

"신뢰성 있는 통신을 하려면 에러확인 및 복구를 위한 정보를 확인해야 하므로 처리속도가 느리다"

UDP(User Datagram Protocol)

UDP는 에러가 발생한 세그먼트는 폐기시킨다. 이것으로 끝이다. 이처럼 에러복구 기능이 없는 프로토콜을 '신뢰성 없는 프로토콜'이라고 한다.

"신뢰성 없는 통신은 에러 복구 기능이 불필요하므로, 처리속도가 빠르다."

TCP

  • 연결형
  • 신뢰성 ⭕️
  • 1:1 통신
  • Byte Stream
  • 에러복구 ⭕️
  • 재전송 요구 ⭕️
  • 경로 확인 ⭕️
  • 트래픽 확인 ⭕️
  • 수신 확인 ⭕️
  • 준비 확인 ⭕️
  • 속도 👎

UDP

  • 비 연결형
  • 신뢰성 ❌
  • 1:N 통신
  • Datagram
  • 에러복구 ❌
  • 재전송 요구 ❌
  • 경로 확인 ❌
  • 트래픽 확인 ❌
  • 수신 확인 ❌
  • 준비 확인 ❌
  • 속도 👍

  • Source Port (16bit)
    출발지 포트번호를 표시한다. 응용 서비스에 따라 포트번호가 정해져 있는 것도 있지만, 대부분의 경우 처음 세그먼트를 전송하는 측에서 임의의 번호를 사용한다.

  • Destination Port (16bit)
    목적지 포트번호를 표시한다. 응용 서비스에 따라 포트번호가 정해져있다. (EX, Telnet 23)

  • Sequence Number (32bit)
    TCP 순서번호를 표시한다. 통신을 시작하는 양단의 장비들이 별개로 임의의 번호부터 시작한다.

  • Acknowledgement Number (32bit)
    상대방이 보낸 세그먼트를 잘 받았다는 것을 알려주기 위한 번호이다.

  • Offset (4bit)
    TCP 헤더길이를 4바이트 단위로 표시한다. TCP 헤더는 최소20, 최대60 byte이다.

  • Reserved (4bit)
    사용하지 않는 필드이며 모두 0으로 표시한다.

  • Flags (8bit)
    제어비트(Control bits)라고도 하며, 세그먼트의 종류를 표시하는 필드이다.

  • Window size (16bit)
    상대방의 확인 없이 전송할 수 있는 최대 바이트 수를 표시한다.

  • Checksum (16bit)
    헤더와 데이터의 에러를 확인하기 위한 필드이다.

  • Urgent Pointer (16bit)
    현재의 순서 번호부터 긴급포인트에 표시된 바이트까지가 긴급한 데이터임을 표시한다.

  • Option (0~40 byte)
    최대 세그먼트 사이즈 지정 등 추가적인 옵션이 있을 경우 표시한다.

  • Source Port (16bit)
    출발지 포트번호를 표시한다. 응용 서비스에 따라 포트번호가 정해져 있는 것도 있지만, 대부분의 경우 처음 세그먼트를 전송하는 측에서 임의의 번호를 사용한다.

  • Destination Port (16bit)
    목적지 포트번호를 표시한다. 응용 서비스에 따라 포트번호가 정해져 있다. (EX, DNS 53)

  • Length (16bit)
    헤더와 데이터를 포함한 전체 길이를 바이트 단위로 표시한다.

  • Checksum (16bit)
    헤더와 데이터의 에러를 확인하기 위한 필드이다. UDP 헤더는 에러복구를 위한 필드가 불필요하기 때문에 TCP 헤더에 비해 간단하다.

0개의 댓글