두 transport 철학
Transport 계층의 두 주연 — TCP 랑 UDP. 같은 문제(A 에서 B 로 바이트 옮기기)를 정반대 철학으로 풀어. 어느 쪽이 깔려 있는지 알면 네트워크 동작이 미스터리에서 풀려.
TCP — 신뢰성, 순서, 장부
TCP 는 전화 통화야. 연결을 먼저 세우고 (그 유명한 three-way handshake: SYN → SYN-ACK → ACK), 구조화된 대화를 시작. 모든 바이트에 번호 매기고, 받았다고 응답하고, 잃어버리면 재전송해. 패킷이 순서 어긋나면 TCP 가 다시 조립. 끊을 땐 우아하게 4-way shutdown (FIN/ACK).
이 장부 작업이 latency 비용이지만 — 모든 바이트가 순서대로, 정확히 한 번 도착한다는 보장을 얻어. SSH, HTTP/1, HTTP/2, Git, 이메일 — 다 TCP.
UDP — 던지고 잊어
UDP 는 방 건너편으로 소리치는 거야. Handshake 없고, ack 없고, 재전송 없고, 순서 보장 없어. 그냥 패킷 던지고 끝. 왜 이걸 원해? 속도랑 단순함. 왕복 없으니 latency 가 낮고. 재전송 없으니 비디오 스트림이 빠진 프레임 기다리며 멈추지 않아.
나란히 놓기
| 특성 | TCP | UDP |
|---|---|---|
| 연결 | 3-way handshake 먼저 | 없음 — connectionless |
| 신뢰성 | 전달 보장 + 재전송 | 없음 — 패킷이 사라져도 모름 |
| 순서 | 순서대로 재조립 | 아무 순서로 도착 |
| Latency | 높음 (handshake + ack 비용) | 낮음 (그냥 보냄) |
| 헤더 크기 | 20–60 바이트 | 8 바이트 |
| 실제 용도 | SSH, HTTP, 이메일, 파일 전송, DB | DNS, 비디오/음성, 게임, WireGuard, QUIC |
HTTP/3 가 재밌는 반전이야 — UDP (위에서 도는 QUIC 프로토콜) 위에서 굴러가는데, 신뢰성을 더 높은 layer 에서 여러 독립 stream 으로 다시 쌓아. Stream A 에서 패킷 잃어도 stream B 는 계속 흘러 — TCP 는 한 줄 바이트 stream 이라 근본적으로 못 하는 일.