사전 UDP
프로토콜

UDP

gabury1

UDP 는 보낼 데이터 한 덩이를 상대 컴퓨터에서 도는 프로세스에 그대로 건네주는 규칙입니다. 건네기 전에 상대와 인사를 나누지 않습니다. 건넨 뒤에 잘 닿았는지도 확인하지 않습니다. 보내는 쪽이 한 번에 건넨 만큼이 받는 쪽에 한 덩이로 도착합니다.

쉽고 빠른 이해

UDP 는 보낼 데이터 한 덩이를 상대 컴퓨터의 프로그램에 그대로 건네주는 규칙입니다. 아래 계층은 데이터를 목적지 컴퓨터까지만 나릅니다. 그 컴퓨터 안에서 도는 여러 프로그램 중 누구에게 넣을지를 UDP 가 정합니다.

이게 없으면 데이터가 컴퓨터 문 앞까지만 가고 안으로는 못 들어갑니다. 받았다는 답을 기다리고 사라진 것을 다시 보내는 뒷수습까지 하려면 값이 비쌉니다. UDP 는 그 뒷수습을 아예 맡지 않는 쪽을 골랐습니다.

어떻게 도는가:

  1. 보내는 쪽이 데이터 한 덩이에 출발 포트와 도착 포트를 적어 내보냅니다
  2. 받는 쪽은 오는 길에 망가지지 않았는지 검사하고, 걸린 것은 말없이 버립니다
  3. 성한 것은 도착 포트가 가리키는 프로그램에 한 덩이 그대로 들어갑니다

대가가 있습니다. 도착했는지 아무도 알려 주지 않습니다. 보낸 순서가 뒤바뀌거나 같은 것이 두 번 오기도 합니다. 그게 곤란한 응용은 뒷수습을 직접 만들어 넣어야 합니다.

상세

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 · 사용자 데이터그램 프로토콜