UDP(User Datagram Protocol)는 Internet Protocol Suite Transport 계층에서 IP 위에 얹혀 동작하는 비연결형(connectionless) 프로토콜로, 데이터를 주고받기 전에 연결을 수립하지 않고 각 데이터그램을 독립적으로 전달하며, 이 때문에 송신한 순서와 다르게 도착하거나 도중에 유실돼도 송신 측에 통지되지 않는다[1].

헤더 구조

UDP 헤더는 Source Port·Destination Port·Length·Checksum 네 필드가 각각 16비트씩을 차지해 총 8바이트로 고정된다 — 데이터그램의 최소 길이는 헤더만 있는 8바이트다[1].

0 16 31 Source Port Destination Port Length Checksum Data(가변 길이)

Length 필드는 헤더를 포함한 데이터그램 전체의 바이트 수를 담고, Checksum은 IP 헤더 일부·UDP 헤더·데이터로 구성한 pseudo header를 계산해 전송 도중의 손상이나 잘못된 라우팅을 검출한다[1]. 계산한 체크섬이 수신 측에서 일치하지 않으면 그 데이터그램은 조용히 폐기되며, 유실을 통지하거나 재전송을 요청하지 않는다[2] — 신뢰성 회복이 필요하다면 그 몫은 상위 애플리케이션에 남는다.

데이터그램 경계와 포트

UDP는 스트림이 아니라 datagram 단위로 데이터를 주고받아 송신 측이 한 번 전송을 요청한 데이터가 수신 측에서도 하나의 단위로 수신되며, Source Port·Destination Port로 호스트 내 특정 프로세스까지 데이터를 전달하는 프로세스 간(process-to-process) 통신을 담당한다[1]. 흔히 쓰이는 포트 번호는 IANA가 0~1023번을 System Port로 등록·관리하며(예: 7번 Echo, 13번 Daytime), 서버는 이런 잘 알려진 포트를 열어두고 클라이언트는 임시로 할당된 포트에서 접속한다[3].

Tip

확인응답·재전송 절차가 없다는 특징은 손실된 데이터그램 하나 때문에 전체 흐름이 지연되는 일이 없다는 뜻이기도 하다 — 오래된 데이터가 뒤늦게 재전송되느니 다음 데이터를 곧장 받는 편이 나은 실시간 미디어 스트리밍 같은 응용에 UDP가 적합한 이유다.

멀티캐스트

연결을 미리 맺지 않는 UDP는 하나의 데이터그램을 여러 수신자에게 동시에 보내는 용도에도 쓸 수 있다 — 특정 호스트 그룹에 속한 모든 구성원에게 데이터그램을 전달하는 IP 멀티캐스트가 대표적이다[4]. 두 프로세스 사이의 연결을 전제하는 TCP는 이런 일대다 전달에 쓸 수 없다.

순서·신뢰성 보장이 필요한 응용은 UDP 대신 TCP를 쓴다.

참고문헌

[1]
J. Postel, “RFC 768 — User Datagram Protocol”. 1980. [Online]. Available at: https://www.rfc-editor.org/rfc/rfc768
[2]
R. (ed. ) Braden, “RFC 1122 — Requirements for Internet Hosts – Communication Layers”. 1989. [Online]. Available at: https://www.rfc-editor.org/rfc/rfc1122
[3]
IANA, “Service Name and Transport Protocol Port Number Registry”. [Online]. Available at: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
[4]
S. E. Deering, “RFC 1112 — Host Extensions for IP Multicasting”. 1989. [Online]. Available at: https://www.rfc-editor.org/rfc/rfc1112