UDP
UDP 는 보낼 데이터 한 덩이를 상대 컴퓨터에서 도는 프로세스에 그대로 건네주는 규칙입니다. 건네기 전에 상대와 인사를 나누지 않습니다. 건넨 뒤에 잘 닿았는지도 확인하지 않습니다. 보내는 쪽이 한 번에 건넨 만큼이 받는 쪽에 한 덩이로 도착합니다.
쉽고 빠른 이해
UDP 는 보낼 데이터 한 덩이를 상대 컴퓨터의 프로그램에 그대로 건네주는 규칙입니다. 아래 계층은 데이터를 목적지 컴퓨터까지만 나릅니다. 그 컴퓨터 안에서 도는 여러 프로그램 중 누구에게 넣을지를 UDP 가 정합니다.
이게 없으면 데이터가 컴퓨터 문 앞까지만 가고 안으로는 못 들어갑니다. 받았다는 답을 기다리고 사라진 것을 다시 보내는 뒷수습까지 하려면 값이 비쌉니다. UDP 는 그 뒷수습을 아예 맡지 않는 쪽을 골랐습니다.
어떻게 도는가:
- 보내는 쪽이 데이터 한 덩이에 출발 포트와 도착 포트를 적어 내보냅니다
- 받는 쪽은 오는 길에 망가지지 않았는지 검사하고, 걸린 것은 말없이 버립니다
- 성한 것은 도착 포트가 가리키는 프로그램에 한 덩이 그대로 들어갑니다
대가가 있습니다. 도착했는지 아무도 알려 주지 않습니다. 보낸 순서가 뒤바뀌거나 같은 것이 두 번 오기도 합니다. 그게 곤란한 응용은 뒷수습을 직접 만들어 넣어야 합니다.
상세
UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)는 한쪽 프로세스가 만든 데이터 한 덩이를 다른 쪽 프로세스에 건네는 전송 계층 프로토콜입니다. RFC(Request for Comments) 768 이 이 프로토콜을 정의합니다. 그 문서는 패킷 교환 컴퓨터 통신 환경에서 데이터그램 방식을 쓸 수 있게 하려고 정의했다고 적습니다. 이때 오가는 데이터 한 덩이를 데이터그램이라고 부릅니다.
우편으로 치면 엽서 한 장입니다. 주소를 적어 우체통에 넣으면 보내는 사람 일은 거기서 끝납니다. 받는 사람이 손에 쥐었는지, 두 장을 넣었을 때 어느 것이 먼저 닿았는지, 아예 사라졌는지는 보낸 사람에게 아무도 알려 주지 않습니다.
IP 위에 얹어 주는 것
UDP 는 혼자 도는 프로토콜이 아닙니다. 아래에 IP(Internet Protocol, 인터넷 프로토콜)가 있고, IP 가 데이터를 목적지 컴퓨터까지 나릅니다. 거기서 IP 가 못 하는 일이 둘 남습니다. UDP 가 그 둘을 맡습니다.
첫째는 어느 프로세스에 넣을지 가르는 일입니다. 한 컴퓨터 안에서는 프로그램이 여럿 돕니다. IP 는 컴퓨터까지만 알지 그 안의 누구인지는 모릅니다. UDP 헤더의 출발 포트와 도착 포트가 그 자리를 채웁니다. 도착 포트가 이 데이터그램을 받을 프로세스를 가리킵니다. 출발 포트는 RFC 768 이 선택 필드로 두었고, 달리 알 길이 없을 때 답장을 보낼 자리로 삼아도 된다고 적습니다.
둘째는 오는 길에 데이터가 망가졌는지 보는 일입니다. 체크섬 필드가 그 자리입니다. 검사에 걸린 데이터그램은 버려집니다. 버렸다고 보낸 쪽에 알려 주지는 않습니다. RFC 768 은 전송된 체크섬 값이 모두 0이면 보내는 쪽이 체크섬을 만들지 않았다는 뜻이라고 적습니다.
flowchart TD
IP["IP · 목적지 컴퓨터까지 배달"] --> U["UDP · 체크섬 검사"]
U -->|검사에 걸림| X["버림 · 아무에게도 안 알림"]
U -->|도착 포트 가| A["프로세스 가"]
U -->|도착 포트 나| B["프로세스 나"]
RFC 768 이 정하는 헤더 필드는 넷입니다. 출발 포트·도착 포트·길이·체크섬입니다. 길이는 헤더와 데이터를 합친 이 데이터그램 자체의 길이입니다. 길이가 데이터그램 안에 들어 있으니 한 덩이의 끝이 어디인지를 데이터그램 스스로 정합니다. 받는 쪽이 어디까지가 한 메시지인지 따로 세지 않아도 되는 이유가 이것입니다.
하지 않는 일
RFC 768 은 UDP 가 거래 단위로 도는 프로토콜이고 전달과 중복 방지를 보장하지 않는다고 적습니다. 한 문장이지만 여기에 UDP 의 성격이 거의 다 들어 있습니다.
| 안 하는 것 | 그래서 생기는 일 |
|---|---|
| 연결 수립 | 데이터를 보내기 전에 주고받는 인사가 없습니다 |
| 도착 확인 | 받는 쪽이 잘 받았다는 답을 보내지 않습니다 |
| 재전송 | 사라진 데이터그램은 사라진 채로 끝납니다 |
| 순서 맞추기 | 나중에 보낸 것이 먼저 도착할 수 있습니다 |
| 중복 제거 | 같은 데이터그램이 두 번 도착할 수 있습니다 |
| 흐름 제어 | 받는 쪽이 처리하지 못해도 보내는 속도가 줄지 않습니다 |
| 혼잡 제어 | 망이 막혀도 보내는 속도가 줄지 않습니다 |
보내는 쪽에서 보면 이렇게 됩니다. 세 덩이를 차례로 보냈는데 가운데 하나가 없어져도 그 사실이 보내는 쪽으로 돌아오지 않습니다.
sequenceDiagram
participant 보내는쪽
participant 망
participant 받는쪽
보내는쪽->>망: 데이터그램 1
망->>받는쪽: 데이터그램 1
보내는쪽->>망: 데이터그램 2
망-x받는쪽: 데이터그램 2 없어짐
보내는쪽->>망: 데이터그램 3
망->>받는쪽: 데이터그램 3
Note over 보내는쪽: 2 가 없어진 것을 모릅니다
RFC 768 은 순서가 지켜지는 신뢰성 있는 데이터 흐름이 필요한 응용에는 TCP(Transmission Control Protocol, 전송 제어 프로토콜)를 쓰라고 권합니다.
하지 않아서 얻는 것
인사가 없으니 첫 데이터가 곧바로 나갑니다. 오간 것을 기억해 둘 상태도 없습니다. 그래서 서버 한 대가 아주 많은 상대와 주고받아도 상대마다 들고 있어야 할 것이 없습니다. 한 덩이가 한 덩이로 도착하니 응용이 메시지 경계를 다시 찾을 일도 없습니다. 한 번에 여럿에게 보내는 브로드캐스트와 멀티캐스트도 이 위에서 됩니다.
이 성질이 값을 하는 자리가 있습니다. 늦게 도착한 데이터가 이미 쓸모없어지는 일이 그렇습니다. 실시간 음성과 영상은 지나간 소리를 다시 받아도 쓸 데가 없습니다. 짧은 질의 하나에 짧은 답 하나로 끝나는 이름 조회도 그렇습니다. 연결을 맺고 끊는 왕복이 답을 받는 왕복보다 많아집니다.
응용이 떠안는 대가
UDP 가 하지 않는 일이 필요하면 그 위에 올라앉는 응용이 직접 해야 합니다. RFC 8085 는 UDP 를 최소한의, 신뢰성 없는, 최선 노력의 메시지 전달 전송이라고 부르고, UDP 자체에는 혼잡 제어 장치가 없다고 적습니다. 같은 문서는 인터넷에서 UDP 로 통신하는 응용이 혼잡 붕괴를 막고 어느 정도 공평함을 세우는 장치를 갖춰야 한다고 적습니다. 보내는 데이터그램이 경로의 MTU(Maximum Transmission Unit, 최대 전송 단위)를 넘는 IP 패킷이 되지 않게 하라고도 권합니다. 이 문서는 BCP(Best Current Practice, 현행 모범 사례) 145 이기도 합니다.
그래서 UDP 를 고른다는 것은 할 일을 줄이는 선택이 아닙니다. TCP 가 대신 해 주던 일 가운데 필요한 것만 응용이 골라 떠안는 선택입니다.
관련 항목
UDP 데이터그램을 이루는 구성 요소
헤더 · 포트 번호 · 체크섬 · 페이로드 · 데이터그램 · 옥텟
UDP 를 밑에서 실어 나르는 계층의 프로토콜
IP · IPv4 · IPv6 · 인터넷 계층 · 패킷 · 라우팅 · MTU · 단편화
UDP 와 같은 전송 계층에서 자리를 겨루는 프로토콜
TCP · 전송 계층 · SCTP(Stream Control Transmission Protocol, 스트림 제어 전송 프로토콜) · DCCP(Datagram Congestion Control Protocol, 데이터그램 혼잡 제어 프로토콜)
UDP 가 데이터를 끊어 담는 단위와 맞세워지는 단위
메시지 경계 · 바이트 스트림 · 세그먼트 · 메시지 · 스트림
UDP 위에 얹혀 도는 프로토콜
DNS(Domain Name System, 도메인 이름 체계) · DHCP(Dynamic Host Configuration Protocol, 동적 호스트 설정 프로토콜) · NTP(Network Time Protocol, 네트워크 시각 프로토콜) · SNMP(Simple Network Management Protocol, 간이 네트워크 관리 프로토콜) · TFTP(Trivial File Transfer Protocol, 간이 파일 전송 프로토콜) · RTP(Real-time Transport Protocol, 실시간 전송 프로토콜) · QUIC · HTTP/3 · syslog
UDP 가 대신해 주지 않아 응용이 직접 갖춰야 하는 장치
재전송 · 확인 응답 · 타임아웃 · 순서 번호 · 흐름 제어 · 혼잡 제어 · 혼잡 붕괴 · 신뢰성
UDP 로 보낸 데이터그램이 겪는 실패
패킷 손실 · 순서 뒤바뀜 · 중복 도착 · ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜) · 포트 도달 불가
UDP 가 한 번에 여럿에게 보낼 때 쓰는 전달 방식
유니캐스트 · 브로드캐스트 · 멀티캐스트 · 애니캐스트
UDP 트래픽이 지나가며 걸리는 중간 장비
NAT(Network Address Translation, 네트워크 주소 변환) · 방화벽 · 라우터 · 포트 포워딩 · 프록시
UDP 를 골랐을 때 재게 되는 지표
UDP 를 악용하는 공격
증폭 공격 · 반사 공격 · 서비스 거부 · IP 스푸핑
UDP 소켓을 열고 주고받는 프로그래밍 수단
소켓 · 버클리 소켓 · sendto · recvfrom · 포트 바인딩
UDP 를 정의하고 그 쓰임을 권고하는 문서
RFC 768 · RFC 8085 · RFC · IETF · BCP
UDP 를 골라 쓰는 실시간 응용
VoIP · 실시간 스트리밍 · 화상 회의 · 온라인 게임
UDP 가 속하는 상위 분류
네트워크 · 인터넷 프로토콜 스위트 · OSI 모형(Open Systems Interconnection, 개방형 시스템 상호 연결) · 프로토콜
다른 이름: User Datagram Protocol · 사용자 데이터그램 프로토콜