Zkratka proUser Datagram ProtocolPokročilý

Definice

UDP je transportní síťový protokol pro posílání samostatných datagramů bez navázání spojení a bez záruky doručení. Nabízí nízkou režii a rychlý start komunikace, ale pořadí, opakování ztracených zpráv, řízení zahlcení a případné šifrování musí řešit aplikace nebo vyšší protokol.

Kategorie: Sítě a protokolyAktualizováno

Co UDP slibuje a co záměrně neřeší

UDP patří do transportní vrstvy nad IP. Aplikace předá operačnímu systému zprávu, cílovou IP adresu a port; systém z toho vytvoří datagram a odešle ho do sítě. Protokol nepředchází posílání navázáním relace, nečeká na potvrzení a nevede si historii předchozích datagramů.

Nízká režie je hlavní důvod existence UDP. Hlavička obsahuje jen zdrojový port, cílový port, délku a kontrolní součet. Chybí číslování proudu, opakované odesílání a řízení zahlcení, které znáte z TCP. Výsledek je rychlý začátek komunikace, ale aplikace musí počítat se ztrátou, duplicitou a změnou pořadí.

Datagram místo proudu bajtů

UDP zachází s každou zprávou jako se samostatným celkem. Když aplikace odešle jeden datagram, příjemce dostane buď celý datagram, nebo nic. UDP nevytváří souvislý proud bajtů, takže hranice zpráv nezmizí jako u TCP. Tato vlastnost se hodí tam, kde jedna zpráva přirozeně znamená jeden dotaz, jednu pozici hráče nebo jeden vzorek telemetrie.

Velikost datagramu je praktický limit. Příliš velká zpráva může vést k fragmentaci na IP vrstvě, což zvyšuje šanci, že ztráta jediného fragmentu zahodí celý datagram. Robustní návrh proto posílá malé zprávy, případně si dělení a skládání řeší sám.

Co musí doplnit aplikace

Aplikace nad UDP rozhoduje, co je důležitější: latence, úplnost nebo jednoduchost. Hlasový hovor raději přeskočí ztracený vzorek, než aby čekal na jeho opakování. Platební nebo databázový protokol by naopak potřeboval potvrzení, pořadí, deduplikaci a časové limity. UDP samo tyto vlastnosti neposkytuje.

Řízení zahlcení je zásadní odpovědnost. Program, který bez omezení zaplaví síť UDP datagramy, může poškodit výkon jiných spojení. Moderní protokoly stavěné nad UDP, například QUIC, proto přidávají vlastní potvrzování, šifrování, řízení toku a reakci na ztráty.

Kde UDP dává smysl

DNS často používá UDP pro běžné dotazy, protože klient pošle krátkou otázku a očekává krátkou odpověď. Online hry posílají stav světa mnohokrát za sekundu a starší informace rychle ztrácí cenu. Streaming, VoIP, měření a některé discovery protokoly využívají stejnou myšlenku: nejnovější zpráva bývá cennější než bezchybné doručení staré.

Bezpečnostní filtraci nelze z UDP vynechat. UDP nemá handshake, takže se snadno zneužívá pro spoofing nebo amplifikační útoky, pokud server odpovídá velkou odpovědí na malý podvržený požadavek. Provozní prostředí proto často omezuje konkrétní porty, objem provozu a veřejně dostupné služby.

Příklady z praxe

  1. Diagnostický ping přes UDP

    Vývojář testuje lokální UDP službu, která odpovídá na krátké diagnostické zprávy. Klient pošle datagram "ping" a čeká nejvýše jednu sekundu. Když odpověď nedorazí, aplikace musí sama rozhodnout, zda dotaz zopakuje, zaloguje chybu nebo pokračuje bez výsledku.

    import socket
    
    server = ("127.0.0.1", 9999)
    
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        s.settimeout(1.0)
        s.sendto(b"ping", server)
        data, addr = s.recvfrom(1024)
        print(data.decode(), "from", addr)
  2. Stav světa v online hře

    Server online hry posílá klientům několikrát za sekundu pozice hráčů a projektilů. Když jeden UDP datagram zmizí, klient použije další přijatý stav a krátce dopočítá pohyb lokálně. Opakované doručování staré pozice by zhoršilo plynulost víc než samotná ztráta.

Časté omyly

MýtusUDP je nespolehlivé TCP, takže se hodí jen na nedůležitá data.
Ve skutečnostiUDP je jiný stavební blok, ne pokažená verze TCP. Pro živý zvuk, hry, discovery nebo jednoduché dotazy může být lepší ztratit starý datagram než čekat na jeho opakování.
MýtusUDP nezaručuje vůbec nic, takže příjemce může dostat jen půl zprávy.
Ve skutečnostiUDP zachovává hranici datagramu: příjemce dostane celý datagram, nebo ho nedostane. Částečné doručení jedné UDP zprávy aplikaci není běžný model rozhraní.

Časté dotazy

Proč DNS často používá UDP?
UDP je vhodné pro DNS hlavně proto, že typický dotaz i odpověď jsou krátké a klient nechce platit cenu navázání spojení u každé otázky. DNS klient pošle dotaz na port 53 a při ztrátě může dotaz zopakovat nebo zkusit jiný resolver. DNS ale není omezené jen na UDP: pro některé situace se používá také TCP, například když odpověď přesáhne praktický limit nebo když to vyžaduje konkrétní typ provozu.
Co znamená ztracený UDP paket pro aplikaci?
Ztracený UDP paket znamená, že aplikace nedostane konkrétní datagram a protokol sám ztrátu neopraví. Důsledek závisí na návrhu aplikace. Hlasový hovor může ztracený vzorek maskovat, hra může počkat na novější stav a telemetrie může přijít o jeden měřený bod. Aplikace, která potřebuje spolehlivost, musí přidat potvrzení, opakování, časové limity a ochranu proti duplicitám.
Je UDP bezpečné pro citlivá data?
UDP samo o sobě nezajišťuje důvěrnost, ověření protistrany ani ochranu proti změně obsahu. Citlivá data přes UDP potřebují samostatnou bezpečnostní vrstvu nebo protokol, který tyto vlastnosti doplní. Důležitá je také ochrana služby před zneužitím: veřejný UDP server může odpovídat na podvržené adresy, a proto musí omezovat provoz, validovat požadavky a neposílat neúměrně velké odpovědi.
Projde UDP přes NAT a firewall?
UDP může procházet NATem a firewallem, ale chování bývá méně předvídatelné než u dlouho žijícího TCP spojení. NAT zařízení si obvykle vytvoří dočasné mapování poté, co interní klient odešle první datagram ven. Příchozí datagramy bez takového mapování bývají zahozené. Aplikace proto často používají keepalive zprávy, veřejné rendezvous servery nebo specializované techniky pro navázání přímé komunikace.

Zdroje

  1. User Datagram Protocol(otevře se v novém okně)RFC Editor, 1980
  2. Requirements for Internet Hosts - Communication Layers(otevře se v novém okně)RFC Editor, 1989
  3. UDP Usage Guidelines(otevře se v novém okně)RFC Editor, 2017
  4. Service Name and Transport Protocol Port Number Registry(otevře se v novém okně)Internet Assigned Numbers Authority

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.