2 분 소요

이번 스터디 발표 주제인 TCP/UDP에 대해 학습한 내용을 정리해봤습니다.

전송 계층

TCP와 UDP는 OSI Layer의 4계층, TCP/IP Layer의 3계층인 전송 계층에 속합니다.

TCP와 UDP는 전송 계층에서 사용되는 프로토콜로 각각 전송 제어 프로토콜, 사용자 데이터그램 프로토콜을 뜻합니다.

전송 계층은 네트워크 구성요소와 프로토콜 내부에서 송신자 - 수신자를 연결하는 통신 서비스를 제공합니다.

애플리케이션의 메시지를 좀 더 작은 패킷으로 나누고 또 재조립하는 일을 수행합니다.

TCP는 재전송, 오류제어를 통해 메시지 전달을 보장하고, 흐름제어 및 혼잡제어를 제공합니다.

UDP는 비연결형 프로토콜로 빠른 전송 속도가 장점이지만 재전송과 흐름제어, 순서제어를 하지 못합니다.

TCP

TCP는 신뢰성있는 데이터 통신을 가능하게 하는 프로토콜입니다.

데이터는 세그먼트 단위로 쪼개져서 전송되는데 각각의 세그먼트는 TCP Header와 데이터로 구성됩니다.

출처: wikipedia

데이터의 순서 보장

헤더를 살펴보면 Sequence NumberAcknowledgement Number 가 있는데 데이터의 순서를 보장하기 위해 존재하는 영역입니다.

Sequence Number

  • 32 bits를 할당받으며 전송하는 데이터의 순서를 의미
  • 수신자는 쪼개진 세그먼트의 순서를 파악하여 올바른 순서로 데이터를 재조립
  • 데이터 1byte 당 시퀀스 번호를 1씩 증가시키며 순서를 표현

Acknowledgement Number

  • 마찬가지로 32 bits를 할당받으며 수신자가 받는 다음 시퀀스 번호를 의미
  • 발신자가 다음에 보내줘야하는 데이터의 시작점
  • 발신자가 보낸 시퀀스 번호 + 자신이 받은 데이터의 bytes로 승인 번호를 생성

TCP는 Sequence NumberAcknowledgement Number를 이용하여 세그먼트의 순서를 보장합니다.

3 Way Handshake

TCP는 3 Way Handshake 를 이용하여 연결 제어를 합니다.
TCP 헤더에는 9 비트 플래그가 존재하는데, 이 중 ACK, SYN, FIN 플래그가 해당 역할을 지원합니다.

  1. 발신자가 SYN 플래그에 1을 설정하고 초기 Sequence Number를 설정하여 세그먼트를 전송합니다.
    이 때 초기 시퀀스 번호는 무작위 난수이며 SYN을 전송하면 SYN-SENT 상태가 됩니다.
  2. 수신자는 SYN 을 전송받으면 SYN-RECEIVED 상태가 됩니다.
    SYN, ACK 플래그를 1로 설정하고 Acknowledge Number 를 1 증가시킨 세그먼트를 전송합니다.
  3. 발신자는 SYN, ACK 플래그를 받은 후 연결이 되었다는 ESTABLISHED 상태가 됩니다.
    ACK 플래그를 설정하여 전송 후 수신자가 받게되면 비로소 데이터를 주고 받을 수 있는 상태가 됩니다.
  4. 이후 발신자의 패킷 전달 → 수신자의 ACK 전달을 반복하여 데이터를 주고 받습니다.
    만약 ACK을 수신하지 못했다면 패킷을 다시 보내는 방식으로 신뢰성을 보장합니다.

4 Way Handshake

반대로 연결을 종료할 땐 4 Way Handshake 를 사용합니다.

  1. 발신자가 연결을 종료하겠다는 FIN 플래그를 전송하고 FIN-WAIT 상태가 됩니다.
  2. 수신자는 ACK 플래그를 보내고 통신 종료를 기다리는 CLOSE-WAIT 상태가 됩니다.
  3. 수신자가 연결을 종료할 준비가 되면 FIN 플래그를 보내고 LAST-ACK 상태가 됩니다.
  4. 발신자 또한 연결 종료 준비가 되었다는 ACK 플래그를 보내고 TIME-WAIT 상태가 됩니다.
  5. 수신자는 발신자로부터 ACK 플래그를 수신하면 CLOSED 상태가 되어 연결을 마칩니다.
  6. 발신자는 일정시간 동안 잉여 패킷을 기다리다가 연결을 종료시키고 CLOSED 상태가 됩니다.

TCP의 단점

  • 매번 Connection을 맺고 통신하기 때문에 시간 손실이 발생합니다.

UDP

UDP는 TCP보다 빠른 데이터 전송을 위한 프로토콜입니다.
비연결성이기 때문에 신뢰성이 낮아도 빠른 전송이 필요한 비디오 스트리밍같은 서비스에서 사용됩니다.

출처: wikipedia

UDP 헤더를 살펴보면 수신, 발신 PORT와 데이터의 길이, Checksum이 전부인 것을 확인할 수 있습니다.

Connection을 연결하지 않기 때문에 데이터의 전달을 보장하지 않고, 순서도 보장하지 않기 때문에 신뢰성이 낮은 대신 단순하고 빠르다는 특징이 있습니다.

IP 프로토콜과 비슷하지만 Checksum 이 존재하기 때문에 오류 확인을 할 수 있습니다.

댓글남기기