UDP (User Datagram Protocol) to bezpołączeniowy protokół warstwy transportowej, który wysyła dane w postaci niezależnych pakietów zwanych datagramami, nie troszcząc się o to, czy dotrą, w jakiej kolejności i czy w ogóle ktoś je odebrał. W przeciwieństwie do TCP nie ma tu uścisku dłoni (handshake), numerów sekwencyjnych ani retransmisji. Jest za to lekki i szybki — wrzucasz pakiet w sieć i lecisz dalej, bez czekania na potwierdzenie.
Jak to działa i do czego służy
UDP dokłada do danych minimalny nagłówek: port źródłowy, port docelowy, długość i sumę kontrolną (checksum). Tyle. Nie ma kontroli przepływu, nie ma kontroli przeciążenia, nie ma gwarancji dostarczenia. Jeśli pakiet zginie po drodze, UDP nawet o tym nie wie — to aplikacja decyduje, czy jej to przeszkadza, czy nie. Taka filozofia „fire and forget” sprawia, że narzut jest mały, a opóźnienia (latency) niskie.
Dlatego UDP rządzi tam, gdzie świeżość danych liczy się bardziej niż ich kompletność: streaming wideo i audio, gry online (pozycja gracza sprzed sekundy jest bezużyteczna, więc po co ją retransmitować), VoIP, DNS oraz DHCP. Na UDP zbudowano też QUIC — protokół, na którym opiera się HTTP/3, gdzie niezawodność i szyfrowanie zrealizuje się w warstwie aplikacji zamiast polegać na TCP.
Przykład z praktyki
Najprostszy sposób, żeby zobaczyć UDP na żywo, to netcat. Na jednej maszynie odpalasz nasłuch na porcie 9999 w trybie UDP, na drugiej wysyłasz dane:
- odbiorca:
nc -u -l 9999 - nadawca:
echo "elo" | nc -u 192.168.0.10 9999
Zauważysz różnicę względem TCP: połączenie „nawiązuje się” natychmiast, bo żadnego prawdziwego połączenia tu nie ma. Do diagnostyki przyda się też tcpdump -n udp port 53, żeby podejrzeć ruch DNS, albo iperf3 -u do testów przepustowości po UDP.
Częste błędy i mity
„UDP jest zawodny, więc gorszy” — nie. Jest po prostu prostszy. Niezawodność można dobudować w aplikacji (robi tak QUIC), płacąc tylko za to, czego naprawdę potrzebujesz.
Na co uważać: duże datagramy bywają fragmentowane na poziomie IP i jeśli jeden fragment zginie, tracisz cały pakiet — dlatego trzymaj payload poniżej MTU (zwykle ~1472 bajty na Ethernecie). Pamiętaj też, że firewalle i NAT lubią po cichu blokować UDP, więc gdy „działa na localhoście, a nie działa w sieci”, zacznij od reguł zapory. I nie zapominaj o checksumie — w IPv6 jest obowiązkowa.
Pojęcia powiązane: TCP, QUIC, HTTP/3, model OSI (warstwa transportowa), port, datagram, DNS, MTU.