전송 계층(OSI 4계층)에는 두 개의 대표 프로토콜이 있다. TCP와 UDP다. 둘 다 애플리케이션이 주고받는 데이터를 목적지의 올바른 프로세스(포트)로 전달하는 일을 하지만, “얼마나 확실하게 전달하느냐”에서 정반대 선택을 한다.
TCP — 연결형·신뢰성 우선
TCP(Transmission Control Protocol)는 연결 지향(connection-oriented) 프로토콜이다. 데이터를 보내기 전에 먼저 상대와 논리적 연결을 맺고, 그 위에서 통신한다.
- 연결 수립(3-way handshake):
SYN → SYN+ACK → ACK세 단계로 서로의 통신 준비 상태를 확인한 뒤 연결을 연다. 끊을 때는 4-way handshake를 쓴다. - 신뢰성 보장: 보낸 데이터마다 상대가 잘 받았다는 확인 응답(ACK)을 돌려준다. 응답이 안 오면 재전송하고, 순서가 뒤바뀐 패킷은 순서번호(sequence number)로 다시 맞춰 준다.
- 흐름 제어(flow control): 수신 측이 감당할 수 있는 만큼만 보내도록 윈도우 크기를 조절한다.
- 혼잡 제어(congestion control): 네트워크가 붐비면 전송량을 줄여 혼잡을 완화한다.
이 모든 장치 덕분에 데이터가 손실 없이, 순서대로 도착하지만, 그만큼 오버헤드가 크고 느리다.
UDP — 비연결형·속도 우선
UDP(User Datagram Protocol)는 비연결형(connectionless) 프로토콜이다. 연결을 맺지 않고 그냥 데이터그램을 목적지로 던진다.
- 확인 응답도, 재전송도, 순서 보장도 없다. 도착 여부는 보장하지 않는다(“best effort”).
- 흐름·혼잡 제어가 없어 보내는 쪽 속도대로 밀어 넣는다.
- 그 대신 헤더가 작고(8바이트) 처리 과정이 단순해 빠르고 지연이 적다.
헤더로 보는 차이
| 항목 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결형(handshake) | 비연결형 |
| 신뢰성 | 보장(ACK·재전송) | 보장 안 함 |
| 순서 보장 | O | X |
| 헤더 크기 | 20바이트~ | 8바이트 |
| 전송 단위 | 세그먼트(segment) | 데이터그램(datagram) |
언제 무엇을 쓰나
- TCP: 한 바이트라도 틀리면 안 되는 통신 — 웹(HTTP/HTTPS), 이메일(SMTP), 파일 전송(FTP).
- UDP: 조금 잃어도 되지만 실시간성이 중요한 통신 — 스트리밍, 인터넷 전화(VoIP), 온라인 게임, DNS 조회.
시험에 자주 나오는 포인트
- TCP는 연결형·신뢰성·순서 보장, UDP는 비연결형·비신뢰성·빠름 — 이 대비를 묻는 문제가 가장 많다.
- 3-way handshake의 순서(SYN → SYN+ACK → ACK)는 단골이다.
- 흐름 제어와 혼잡 제어를 헷갈리지 말 것. 흐름 제어는 수신 측을 위한 것, 혼잡 제어는 네트워크 전체를 위한 것이다.
- DNS는 기본적으로 UDP를 쓴다는 점, 헤더 크기(TCP 20B / UDP 8B) 비교도 자주 등장한다.
이 글에 대한 의견은 아래 댓글로 남겨주세요 (GitHub 계정 필요). 로그인 없이 남기고 싶다면