🧐TIL

[다시하는 백엔드 기초 공부] TCP / UDP

TCP와 UDP

TCP와 UDP는 모두 OSI 7계층의 전송 계층(4계층)에서 동작하는 프로토콜로 네트워크를 통해 데이터를 주고받을 때 어떤 방식으로 데이터를 전송할지를 결정하는 프로토콜들이다.

둘 다 전송 계층(Transport Layer) 에서 동작한다는 것 외의 공통점은 포트 번호를 사용해 애플리케이션을 식별한다는 점과 (예: HTTP는 80번, HTTPS는 443번, DNS는 53번) 상위 계층(HTTP, DNS 등)에서 내려온 데이터를 네트워크 계층(IP)에 전달한다는 것으로, “어떤 장치로 보낼지” 를 결정하는 것이 IP라면 “어떤 응용 어플리케이션으로 보낼지” 를 결정하는 건 TCP/UDP 이다.

TCP — 신뢰성 있는 연결 지향 프로토콜

TCP는 Transmission Control Protocol(전송 제어 프로토콜)의 약자로 연결 지향적(Connection-Oriented) 프로토콜이다.

TCP는 데이터를 보내기 전에 통신이 이루어질 두 노드 간의 연결을 설정하는데, 이는 데이터의 순서 보장, 데이터 무결성, 신뢰성 있는 데이터 전송을 가능하게 한다.

3-Way Handshake

TCP가 연결을 시작하는 과정으로 클라이언트와 서버 간 세번의 패킷 교환이 이루어진다.

  1. 클라이언트 → 서버: SYN (연결 요청)
  2. 서버 → 클라이언트: SYN + ACK (연결 승인)
  3. 클라이언트 → 서버: ACK (확인) SYN은 Synchronize Sequence Numbers의 약자로 동기화를 위한 시퀀스 번호가 담긴 패킷이며, ACK은 Acknowledgement의 약자로 요청에 대한 확인을 의미한다. ACK 패킷에는 SYN의 시퀀스 번호에 1을 더한 값을 전달하는데 이 과정을 통해 연결이 확립되면 데이터 전송이 시작된다.

4-Way Handshake

TCP에서 연결을 종료하는 과정으로 클라이언트와 서버 간 네번의 패킷 교환이 이루어진다.

  1. 클라이언트 → 서버: FIN (연결 해제 요청)
  2. 서버 → 클라이언트: ACK (요청 확인)
  3. 서버 → 클라이언트: FIN (해제 승인)
  4. 클라이언트 → 서버: ACK (확인) FIN은 Finish의 약자로 접속을 끊기 위한 준비가 되었음을 나타낸다. 클라이언트 쪽에서 먼저 해제 준비를 하고 서버에 요청을 보내면 서버에서는 이에 대한 확인과 함께 클라이언트로 보낼 남은 데이터가 있을 경우 나머지를 모두 전송시킨다. 이후 서버에서도 더 이상 보낼 데이터가 없으면 해제 준비가 되었음을 알리고 클라이언트에서 최종 확인이 이루어지면 연결이 종료된다.

장점

  • 신뢰성 보장 — 데이터가 목적지에 순서대로 도착하는지 확인하고, 손실 시 재전송
  • 연결 관리 — 세션 개념이 있어 양 끝이 상태를 인지하고 데이터가 온전히 목적지에 전달되도록 보장
  • **혼잡 제어 — **네트워크 용량에 따라 데이터 전송 속도를 줄임
  • 흐름 제어 — 수신자의 버퍼 상태에 따라 속도를 조절

단점

  • 오버헤드 큼 — 연결 수립/종료 과정이 필요
  • 지연 시간 발생 — 재전송·혼잡제어 때문에 느려질 수 있음

UDP — 빠르고 단순한 비연결형 프로토콜

UDP는 User Datagram Protocol(사용자 데이터그램 프로토콜)의 약자로 비연결형(Connectionless) 프로토콜이다.

비연결형이기 때문에 노드 간 사전 연결을 설정하지 않으며 데이터 전송 후 수신 여부에 대해서도 확인하지 않는다. 그 대신 속도가 빠른 것이 장점이다.

동작 방식

  • 데이터를 그대로 캡슐화해 IP에 전달
  • 송신 측은 받았는지 확인하지 않음
  • 순서 보장도 없고, 재전송도 없음

장점

  • 연결 수립·재전송 과정이 없고 더 작은 패킷을 더 적은 오버헤드로 전송하기 때문에 속도가 빠름
  • 일부 패킷이 손실되더라도 전체 전송이 중단되지 않음
  • 브로드캐스트 및 멀티캐스트 기능을 통해 하나의 UDP 전송을 여러 수신자에게 전송할 수 있음

단점

  • 패킷의 도착 순서가 정해지지 않음
  • 데이터 패킷이 목적지에 성공적으로 도달했는지, 손실 없이 온전히 전달되었는지 보장되지 않아 신뢰성이 없음
  • 위 이유로 재전송이 필요할 경우 어플리케이션에서 직접 재전송 로직을 구현해야함
  • 라우터가 데이터 패킷의 우선순위를 정할 경우 UDP 보다 TCP를 우선시할 가능성이 높음

사용 케이스

  • TCP
  • UDP