UDP (User Datagram Protocol)
UDP는 비연결(connectionless) 전송 계층 프로토콜이다. 연결 수립 없이 데이터그램을 전송하며, 신뢰성 보장 없이 속도를 우선시한다.
TCP vs UDP 비교
| 항목 |
TCP |
UDP |
| 연결 |
연결 지향 (3-way handshake) |
비연결 |
| 신뢰성 |
보장 (재전송, 순서 보장) |
미보장 |
| 속도 |
느림 |
빠름 |
| 헤더 크기 |
20~60 bytes |
8 bytes |
| 흐름/혼잡 제어 |
있음 |
없음 |
| 사용 사례 |
HTTP, FTP, SSH, DB |
DNS, 스트리밍, 게임, WebRTC |
UDP 헤더 구조
0 7 8 15 16 23 24 31
┌────────┬────────┬────────┬────────┐
│ Source Port │ Destination Port │
├────────────────┼──────────────────┤
│ Length │ Checksum │
└────────────────┴──────────────────┘
│ Data │
└──────────────────────────────────┘
| 필드 |
크기 |
설명 |
| Source Port |
16 bit |
출발지 포트 (선택적) |
| Destination Port |
16 bit |
목적지 포트 |
| Length |
16 bit |
UDP 헤더 + 데이터 전체 길이 |
| Checksum |
16 bit |
오류 감지 (선택적) |
주요 사용 사례
DNS (포트 53)
- 빠른 단일 요청-응답 구조에 적합
- 재전송이 필요하면 클라이언트가 직접 재시도
스트리밍 / VoIP
- 일부 패킷 손실보다 지연 최소화가 더 중요한 경우
- 누락된 프레임은 건너뛰는 방식으로 처리
온라인 게임
- 실시간성이 최우선 — 오래된 위치 정보는 무의미
- 게임 자체 로직에서 신뢰성 처리
WebRTC
- 브라우저 간 P2P 실시간 통신
- UDP 위에서 자체적으로 SRTP(암호화), RTCP(통계) 구현
QUIC / HTTP/3
- UDP 위에서 동작하는 구글이 개발한 전송 프로토콜
- TCP의 HOL(Head-of-Line) Blocking 문제 해결
- 연결 수립 시간 단축 (0-RTT / 1-RTT)
UDP 주요 포트
| 포트 |
프로토콜 |
| 53 |
DNS |
| 67/68 |
DHCP |
| 123 |
NTP |
| 161 |
SNMP |
| 443 |
QUIC (HTTP/3) |
| 51820 |
WireGuard |
UDP의 신뢰성을 보완하는 방법
UDP 자체는 신뢰성이 없지만, 애플리케이션 레이어에서 필요한 만큼만 구현하는 방식으로 보완한다.
- 시퀀스 번호: 패킷 순서 보장
- ACK + 재전송: 손실 감지 후 재요청
- FEC (Forward Error Correction): 수신 측에서 손실 복원
- ARQ (Automatic Repeat reQuest): 손실 시 자동 재전송
메모