본문 바로가기

네트워크

[HTTP] TCP와 UDP의 특징 (TCP 3-way, 4-way handshake)

TCP(Transmission Control Protocol)

TCP(Transmission Control Protocol)는 직역하면 전송 제어 프로토콜이라는 뜻으로 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜입니다. 

 

데이터는 IP(Internet Protocol)을 통해 데이터를 여러 개의 조각들로 나눈 패킷(Packet)이라는 통신 단위로 나뉘어 전송되는데 IP(Internet Protocol)만으로는 다음과 같은 한계가 있습니다. 

 

비연결성

  • 대상 서버가 패킷을 받을 수 있는 상태인지 아닌지 모르기 때문에 패킷을 받을 대상이 없거나 서비스가 불능 상태여도 패킷이 전송됩니다. 

비신뢰성

  • 데이터는 인터넷 망에 존재하는 여러 서버(노드)들을 거쳐 대상 서버로 전달 되는데 중간 서버(중간 노드)에 문제가 생겨 패킷이 소실될 위험이 있습니다.

  • 패킷이 패킷 단위로 쪼개진 데이터가 순서대로 도착한다는 것을 보장하지 않습니다.

프로그램 구분

  • 같은 IP 주소를 사용하는 애플리케이션이 둘 이상인 경우 어떤 애플리케이션으로 데이터를 전송해야 하는지 헷갈릴 수 있습니다.
  • 포트(PORT)로 해결 가능 ex) http://127.0.0.1:8000

그래서 TCP를 IP와 함께 사용함으로써 위와 같은 문제들을 해결 할 수 있습니다.

예를 들어 데이터는 위와 같은 과정을 거쳐 포장된 뒤 대상 서버로 전송되는데 TCP 정보가 생성될 때 출발지 PORT와 도착지(대상 서버) PORT, 전송 제어, 전송 순서, 검증 정보 등등 이 담겨 패킷의 순서를 보장하거나 분실 여부를 확인할 수 있습니다.

TCP 특징

  • 연결지향 - TCP 3 way handshake 로 연결 TCP 4 way handshake 로 연결 해제
  • 데이터 전달 보증
  • 패킷 순서 보장
  • UDP 보다 속도 느림 - UDP는 신뢰성을 보장하기 위한 3 way handshake 같은 과정이 없기 때문에 상대적으로 빠르다.
  • 파일전송과 같은 신뢰성이 중요한 서비스에 사용됨

TCP 3 way handshake

TCP 3 way handshake란 클라이언트와 서버간에 신뢰성을 확보하기 위해 가상의 연결을 수립하는 단계입니다.

  1. 먼저 클라이언트에서 서버로 연결을 시도하겠다는 의미로 첫 번째 패킷에 할당된 임의의 시퀀스 번호인 ISN을 담아 SYN(Synchronization) 신호를 보냅니다.
  2. 그 다음 서버에서 클라이언트로 SYN 신호를 확인했다는 의미로 SYN 신호와 ACK(Acknowledgement, ISN + 1) 신호를 함께 보냅니다. 이때 만약 서버에서 응답 신호를 보내지 않는다면 지금 서버가 패킷을 받을 수 있는 상황이 아니라는 것을 의미하기 때문에 신뢰성을 보장할 수 있습니다.
  3. 마지막으로 다시 클라이언트에서 서버로 신호를 확인했다는 의미의 ACK 신호를 보내면 클라이언트와 서버의 연결이 완료됩니다. 참고로 이 단계에서 데이터를 포함시켜서 신호를 보낼 수 있습니다.

TCP 4 way handshake

4 way handshake는 3 way handshake에서 수립한 클라이언트와 서버간의 연결을 해제하는 과정으로 아래와 같은 과정을 거쳐 해제됩니다.

  1. 클라이언트에서 서버로 연결을 해제하겠다는 의미로 FIN 플래그를 보냅니다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다립니다.
  2. 서버에서는 클라이언트에서 보낸 FIN 플래그를 받으면 신호를 확인했다는 의미로 ACK 신호를 보내는데 응답 신호를 보내고 나서 CLOSE_WAIT 상태에 들어가고 아직 남은 데이터를 전송하고 나서 CLOSE()를 호출합니다. 이때 클라이언트는 서버에서 남은 데이터를 모두 보내고 FIN 패킷을 보낼때까지 기다립니다. 그리고 클라이언트가 ACK 신호를 받으면 FIN_WAIT_2 상태에 들어갑니다.
  3. 서버가 남은 데이터를 모두 처리하고 나서 FIN 패킷을 보냅니다.
  4. 이때 클라이언트에서는 FIN 패킷을 확인했다는 의미로 ACK 신호를 보내고 Server에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN패킷보다 늦게 도착하는 상황을 대비하여 잉여 패킷을 기다리는 TIME_WAIT 상태에 들어갔다가 일정 시간이 지난 후에 연결을 완전히 해제합니다.

UDP(User Datagram Protocol)

UDP(User Datagram Protocol)는 직역하면 사용자 데이터그램 프로토콜이라는 뜻으로 데이터를 데이터그램 단위로 처리하는 프로토콜입니다.

 

UDP는 가지고 있는 기능이 거의 없습니다. IP(Internet Protocol)과 기능이 거의 유사하며 한 가지 다른 점은 IP는 가지고 있지 않은 PORT 정보를 가지고 있습니다.

UDP 특징

  • 연결지향 X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 신뢰성을 보장하기 위한 3 way handshake 과정을 거치지 않기 때문에 TCP 보다 빠름
  • 스트리밍, RTP와 같이 연속성이 더 중요한 서비스에 사용됩니다.

최근에는 UDP를 기반으로 하는 QUIC을 탑재한 HTTP 3.0이 나오면서 TCP보다 더 각광받고 있습니다.

'네트워크' 카테고리의 다른 글

OSI 7계층, TCP/IP 4계층  (0) 2023.05.24
[HTTP] HTTP, HTTPS, SSL Handshake  (0) 2022.11.28
[HTTP] 쿠키와 세션  (0) 2022.09.30
[HTTP] 웹 통신 흐름  (0) 2022.05.14
[HTTP] 세션과 토큰  (0) 2022.03.14