UDP(User Datagram Protocol)란?
UDP(User Datagram Protocol)는 연결을 설정하지 않고 데이터를 빠르게 전송하는 프로토콜로, TCP와 함께 인터넷에서 가장 많이 사용되는 전송 계층(Transport Layer) 프로토콜 중 하나이다.
UDP의 주요 특징
- 비연결형(Connectionless) 프로토콜
- 송신 측과 수신 측이 사전에 연결을 설정하지 않음.
- 데이터를 보내고 끝나는 방식으로, 별도의 연결 관리 과정이 없음.
- 신뢰성이 낮음
- 패킷이 손실될 가능성이 있으며, 재전송 기능이 없음.
- 패킷의 순서를 보장하지 않음.
- 오류 검출 기능(CRC)은 있지만, 오류 발생 시 단순히 폐기됨.
- 빠른 전송 속도
- 연결을 설정하는 과정(TCP의 3-way handshake)이 없어 지연 시간이 적음.
- 데이터 전송 시 오버헤드(추가적인 제어 정보)가 적어 성능이 향상됨.
- 단순한 헤더 구조
- TCP보다 작은 8바이트 크기의 헤더를 사용하여 전송 속도를 높임.
UDP 헤더 구조
UDP 헤더는 4개의 필드(각 2바이트, 총 8바이트)로 이루어져 있다.
| 필드 이름 | 크기 | 설명 |
|---|
| Source Port | 2 bytes | 송신 측 포트 번호 |
| Destination Port | 2 bytes | 수신 측 포트 번호 |
| Length | 2 bytes | UDP 헤더 + 데이터의 총 길이 |
| Checksum | 2 bytes | 오류 검출을 위한 체크섬 |
TCP 헤더(최소 20바이트)와 비교하면 매우 간결하며, 빠른 처리를 가능하게 한다.
UDP와 TCP 비교
| 특성 | UDP | TCP |
|---|
| 연결 방식 | 비연결형 | 연결형 (3-way handshake) |
| 신뢰성 | 없음 (패킷 손실 가능) | 신뢰성 높음 (재전송, 순서 보장) |
| 데이터 전송 방식 | 순서 보장 없음, 개별 패킷 전송 | 순서 보장, 스트림 전송 |
| 오버헤드 | 낮음 (헤더 8바이트) | 높음 (헤더 최소 20바이트) |
| 속도 | 빠름 | 상대적으로 느림 |
| 사용 사례 | 실시간 스트리밍, VolP, 온라인 게임, DNS | 웹 브라우징, 이메일, 파일 전송 |
UDP가 사용되는 대표적인 사례
- **실시간 스트리밍(비디오, 오디오)
- 예: YouTube 라이브, Netflix 스트리밍, 인터넷 라디오
- 속도가 중요하며, 약간의 패킷 손실이 발생해도 서비스에 큰 영향을 주지 않음.
- VolP(인터넷 전화) & 온라인 게임
- 예: Skype, Discord, Zoom, FPS 게임, MOBA 게임(LOL, DOTA 등)
- 짧은 지연 시간(낮은 레이턴시)이 중요하며, 패킷 손실이 발생해도 계속 데이터를 전송하는 것이 중요함.
- DNS(Domain Name System)
- 웹사이트에 접속할 때 IP 주소를 조회하는 서비스.
- 빠른 응답이 중요하며, 손실 시 클라이언트가 재요청하면 되므로 UDP 사용.
- DHCP(Dynamic Host Configuration Protocol)
- 네트워크에서 IP 주소를 자동으로 할당하는 프로토콜.
- 단순한 요청/응답 구조이므로 UDP가 적합함.
UDP의 단점과 보완 방법
UDP는 빠른 속도를 제공하지만 신뢰성이 낮다는 단점이 있다. 이를 보완하기 위해 다음과 같은 기법이 사용된다.
- 애플리케이션 계층에서 신뢰성 구현
- 일부 애플리케이션(TFTP, QUIC 등)은 자체적으로 패킷 재전송 및 오류 검출 기능을 추가함.
- FEC(Forward Error Correction, 전방 오류 수정)
- 송신 측에서 오류를 복구할 수 있는 추가 데이터(중복 정보)를 함께 전송하여, 수신 측에서 손실된 데이터를 복구할 수 있도록 함.
- 혼합 방식 (UDP + TCP 개념 차용)
- 예: QUIC(Quick UDP Internet Connections)
- 구글에서 개발한 UDP 기반의 새로운 전송 프로토콜.
- TCP처럼 신뢰성을 보장하면서도 속도는 UDP만큼 빠르게 동작함.
- HTTP/3에서 기본적으로 사용됨.
정리
UDP는 빠른 데이터 전송이 필요한 환경에서 널리 사용되는 프로토콜로, 신뢰성보다는 속도가 중요한 응용에서 강점을 가진다. 하지만 신뢰성이 필요한 경우 애플리케이션 계층에서 별도로 보완해야 한다.