Protok贸艂 Datagram贸w U偶ytkownika (UDP)

Bezpo艂膮czeniowy, 'najlepszy wysi艂ek' transport dla aplikacji czasu rzeczywistego i jego prosty nag艂贸wek.

Wprowadzenie: Poczt贸wka Internetu

W 艣wiecie protoko艂贸w internetowych, je艣li TCP jest odpowiednikiem formalnej, 艣ledzonej i wymagaj膮cej podpisu us艂ugi kurierskiej, to User Datagram Protocol (UDP) jest prost膮, pozbawion膮 fanaberii poczt贸wk膮. Piszesz swoj膮 wiadomo艣膰, podajesz adres i wrzucasz j膮 do skrzynki. Zak艂adasz, 偶e dotrze, ale nie masz potwierdzenia odbioru, gwarancji, 偶e si臋 nie zgubi, ani pewno艣ci, czy dotrze przed inn膮 poczt贸wk膮, kt贸r膮 wys艂a艂e艣 w tym samym czasie.

Mo偶e to brzmie膰 wadliwie, ale ta prostota jest najwi臋ksz膮 si艂膮 UDP. UDP jest podstawowym cz艂onkiem Stosu Protoko艂贸w Internetowych i dzia艂a w Warstwie Transportowej, tak samo jak TCP. S艂u偶y jednak zupe艂nie innemu celowi. Podczas gdy TCP dok艂ada wszelkich stara艅, aby ka偶dy bajt zosta艂 dostarczony niezawodnie i w odpowiedniej kolejno艣ci, UDP rezygnuje z ca艂ego tego narzutu. Zapewnia minimalistyczny mechanizm wysy艂ania wiadomo艣ci, zwanych , z jednej aplikacji do drugiej.

UDP dokonuje 艣wiadomego kompromisu: po艣wi臋ca niezawodno艣膰, uporz膮dkowanie i kontrol臋 przep艂ywu TCP w zamian za szybko艣膰, niskie op贸藕nienia i minimalny narzut. Dla wielu nowoczesnych aplikacji internetowych jest to dok艂adnie w艂a艣ciwy wyb贸r. Aplikacje wra偶liwe na op贸藕nienia, takie jak streaming wideo czy gry online, cz臋sto preferuj膮 szybko艣膰 UDP nad gwarancjami TCP, decyduj膮c si臋 na samodzielne obs艂ugiwanie ewentualnych strat danych na warstwie aplikacji. UDP to protok贸艂 na sytuacje, w kt贸rych szybkie dostarczenie danych jest wa偶niejsze ni偶 zagwarantowanie, 偶e ka偶dy pojedynczy fragment danych dotrze idealnie.

Podstawowe Cechy Protoko艂u UDP

UDP jest zdefiniowany przez to, czego nie robi. Jego minimalistyczny projekt odzwierciedla si臋 w jego podstawowych cechach, kt贸re stoj膮 w ostrym kontra艣cie do cech TCP.

  • Bezpo艂膮czeniowy

    UDP jest protoko艂em bezpo艂膮czeniowym. W przeciwie艅stwie do TCP, nie ma formalnego procesu ustanawiania po艂膮czenia przed wys艂aniem danych. Nie ma tr贸jetapowego uzgadniania. Aplikacja u偶ywaj膮ca UDP mo偶e po prostu stworzy膰 datagram, doda膰 adres docelowy i port, i wys艂a膰 go w sie膰. Pierwszy pakiet wys艂any do serwera to same dane.

    Analogia z poczt贸wk膮 dzia艂a tu idealnie. Nie musisz dzwoni膰 do odbiorcy, aby potwierdzi膰, 偶e jest got贸w odebra膰 poczt贸wk臋; po prostu j膮 wysy艂asz. Brak fazy nawi膮zywania po艂膮czenia znacznie zmniejsza pocz膮tkowe op贸藕nienie komunikacji.

  • Niezawodne Dostarczanie na Zasadzie Najlepszego Wysi艂ku

    To najwa偶niejsza cecha UDP. Dzia艂a on w modelu najlepszego wysi艂ku (ang. best-effort). Oznacza to, 偶e UDP i bazowa sie膰 IP do艂o偶膮 wszelkich stara艅, aby dostarczy膰 Tw贸j datagram, ale nie oferuj膮 absolutnie 偶adnych gwarancji. UDP nie implementuje:

    • Potwierdze艅: Odbiorca nie odsy艂a 偶adnego potwierdzenia do nadawcy, 偶e datagram zosta艂 odebrany.
    • Retransmisji: Je艣li datagram zaginie w tranzycie, UDP go automatycznie nie retransmituje. Dane po prostu przepadaj膮.
    • Porz膮dkowania Danych: Datagramy UDP s膮 wysy艂ane jako niezale偶ne jednostki. Je艣li wy艣lesz datagram A, a potem datagram B, sie膰 mo偶e dostarczy膰 B przed A, dostarczy膰 oba, lub 偶aden. UDP nie robi nic, aby je uporz膮dkowa膰 w miejscu docelowym.
  • Niski Narzut i Wysoka Szybko艣膰

    G艂贸wn膮 korzy艣ci膮 z po艣wi臋cenia niezawodno艣ci jest minimalny narzut. Nag艂贸wek TCP jest skomplikowany i ma co najmniej 20 bajt贸w. Nag艂贸wek UDP jest niezwykle prosty i ma sta艂y rozmiar zaledwie 8 bajt贸w. Oznacza to, 偶e z ka偶dym fragmentem danych aplikacji wysy艂anych jest mniej danych kontrolnych, co skutkuje wy偶sz膮 wydajno艣ci膮.

    Ponadto, brak stanu po艂膮czenia, licznik贸w retransmisji, 艣ledzenia potwierdze艅 i bufor贸w okienkowych oznacza, 偶e system mo偶e wysy艂a膰 i przetwarza膰 datagramy UDP przy znacznie mniejszym wysi艂ku obliczeniowym i zu偶yciu pami臋ci, co prowadzi do wy偶szych pr臋dko艣ci i ni偶szych op贸藕nie艅.

  • Brak Kontroli Przep艂ywu i Przeci膮偶enia

    UDP nie ma wbudowanych mechanizm贸w kontroli przep艂ywu ani kontroli przeci膮偶enia. Aplikacja u偶ywaj膮ca UDP mo偶e wysy艂a膰 dane tak szybko, jak chce, niezale偶nie od zdolno艣ci odbiorcy do ich przetwarzania czy og贸lnego przeci膮偶enia w sieci. Mo偶e to by膰 zar贸wno korzy艣ci膮 (dla aplikacji, kt贸re musz膮 utrzymywa膰 sta艂膮 szybko艣膰 wysy艂ania), jak i zagro偶eniem (poniewa偶 藕le zachowuj膮ca si臋 aplikacja UDP mog艂aby zala膰 sie膰 i sprawi膰 problemy innym u偶ytkownikom). Z tego powodu aplikacje zbudowane na UDP cz臋sto musz膮 implementowa膰 w艂asne mechanizmy kontroli.

Nag艂贸wek UDP: Wz贸r Prostoty

Minimalistyczna filozofia UDP jest doskonale uchwycona w formacie jego nag艂贸wka. Zawiera on tylko cztery pola, ka偶de o d艂ugo艣ci 16 bit贸w (2 bajty), co daje 艂膮czny sta艂y rozmiar nag艂贸wka 8 bajt贸w.

Szczeg贸艂owy Opis P贸l

1. Port 殴r贸d艂owy (16 bit贸w)

To pole identyfikuje numer portu aplikacji wysy艂aj膮cej. Cho膰 kluczowe w TCP do utrzymywania po艂膮czenia stanowego, w UDP to pole jest, co ciekawe, opcjonalne. Nadawca mo偶e ustawi膰 to pole na same zera. Jednak prawie zawsze jest ono wype艂nione. Dlaczego? Informuje ono odbiorc臋, dok膮d wys艂a膰 odpowied藕. Je艣li klient DNS wysy艂a zapytanie do serwera, serwer u偶ywa portu 藕r贸d艂owego z przychodz膮cego datagramu jako portu docelowego dla swojej odpowiedzi. Gdyby port 藕r贸d艂owy by艂 zerowy, serwer nie wiedzia艂by, dok膮d wys艂a膰 odpowied藕.

2. Port Docelowy (16 bit贸w)

Jest to pole obowi膮zkowe, kt贸re identyfikuje numer portu aplikacji odbiorczej. Jest to klucz do zdolno艣ci UDP do przeprowadzania . System operacyjny odbiorcy sprawdza to pole, aby dostarczy膰 datagram do w艂a艣ciwej aplikacji spo艣r贸d wielu, kt贸re mog膮 by膰 uruchomione.

3. D艂ugo艣膰 (16 bit贸w)

To pole okre艣la ca艂kowit膮 d艂ugo艣膰 datagramu UDP w bajtach. D艂ugo艣膰 ta obejmuje 8-bajtowy nag艂贸wek UDP oraz d艂ugo艣膰 danych aplikacji (艂adunku). Minimalna mo偶liwa warto艣膰 to 8, co odpowiada datagramowi UDP z pustym 艂adunkiem. Maksymalna d艂ugo艣膰 jest determinowana przez bazowy protok贸艂 IP, ale teoretycznie jest ograniczona przez 16-bitowe pole do 65 535 bajt贸w.

4. Suma Kontrolna (16 bit贸w)

To pole zapewnia podstawowy mechanizm wykrywania b艂臋d贸w. Jego celem jest sprawdzanie uszkodze艅 danych zar贸wno w nag艂贸wku UDP, jak i w 艂adunku danych. Podobnie jak w TCP, jest obliczana przy u偶yciu dodawania w kodzie dope艂nie艅 do jedno艣ci na nag艂贸wku UDP, 艂adunku oraz specjalnym, koncepcyjnym pseudo-nag艂贸wku.

Pseudo-nag艂贸wek zawiera 藕r贸d艂owe i docelowe adresy IP. W艂膮czenie tej informacji jest kluczowe, poniewa偶 chroni przed b艂臋dnym dostarczeniem datagramu przez sie膰 i przypadkowym zaakceptowaniem go przez niew艂a艣ciwego hosta.

Kluczowa kwestia dotycz膮ca sumy kontrolnej to zasady jej stosowania:

  • W IPv4, u偶ycie sumy kontrolnej UDP jest opcjonalne. Je艣li nie jest obliczana, pole jest ustawiane na same zera. Zezwolono na to, aby zaoszcz臋dzi膰 cykle procesora na starszych, wolniejszych routerach.
  • W IPv6, suma kontrolna UDP jest obowi膮zkowa. IPv6 zosta艂o zaprojektowane z filozofi膮 upraszczania przetwarzania w routerach, a uczynienie sumy kontrolnej obowi膮zkow膮 oznacza, 偶e routery nie musz膮 obs艂ugiwa膰 specjalnego przypadku jej braku.

Kiedy UDP Jest W艂a艣ciwym Wyborem? Aplikacje i Przypadki U偶ycia

Konstrukcja UDP sprawia, 偶e jest on idealny dla aplikacji, w kt贸rych terminowo艣膰 jest wa偶niejsza ni偶 doskona艂a niezawodno艣膰, lub gdzie aplikacja sama woli zarz膮dza膰 niezawodno艣ci膮.

Aplikacje Czasu Rzeczywistego i Streamingowe

Dla us艂ug takich jak Voice over IP (VoIP), wideokonferencje i streaming wideo na 偶ywo, otrzymanie danych z niewielkim op贸藕nieniem jest cz臋sto gorsze ni偶 nieotrzymanie ich wcale. Retransmisja utraconego pakietu g艂osowego przez TCP dotar艂aby zbyt p贸藕no, by mo偶na j膮 by艂o odtworzy膰 w rozmowie i spowodowa艂aby tylko uci膮偶liw膮 przerw臋. Lepiej, 偶eby aplikacja po prostu pomin臋艂a utracony pakiet i odtworzy艂a nast臋pny, co skutkuje drobnym, cz臋sto niezauwa偶alnym zak艂贸ceniem audio. UDP zapewnia niskie op贸藕nienia potrzebne, aby te aplikacje sprawia艂y wra偶enie "na 偶ywo".

Gry Online

W szybkich grach online najwa偶niejsza jest najnowsza informacja o pozycji lub dzia艂aniach gracza. Stary, retransmitowany pakiet zawieraj膮cy pozycj臋 gracza sprzed p贸艂 sekundy jest ca艂kowicie bezu偶yteczny i spowodowa艂by "lagowanie" gry. Tw贸rcy gier prawie zawsze u偶ywaj膮 UDP i buduj膮 na nim w艂asn膮, wysoce zoptymalizowan膮 logik臋 do obs艂ugi aktualizacji i synchronizacji.

Proste Protoko艂y Zapytanie-Odpowied藕

Protoko艂y obejmuj膮ce ma艂e, proste zapytanie i ma艂膮, prost膮 odpowied藕 s膮 idealne dla UDP. Klasycznym przyk艂adem jest System Nazw Domenowych (DNS). Klient wysy艂a pojedynczy datagram UDP z nazw膮 domeny, a serwer odpowiada pojedynczym datagramem zawieraj膮cym adres IP. Je艣li kt贸ry艣 z nich zaginie, klient po prostu mo偶e poczeka膰 na timeout i wys艂a膰 zapytanie ponownie. Narzut zwi膮zany z nawi膮zywaniem i zrywaniem po艂膮czenia TCP dla tak trywialnej wymiany by艂by ogromnym marnotrawstwem. Innym przyk艂adem jest DHCP.

Us艂ugi Multicast i Broadcast

UDP jest podstaw膮 us艂ug multicast i broadcast, gdzie pojedynczy datagram jest wysy艂any z jednego 藕r贸d艂a do wielu miejsc docelowych. TCP jest protoko艂em fundamentalnie typu jeden-do-jednego; ustanowienie indywidualnych, niezawodnych po艂膮cze艅 z tysi膮cami odbiorc贸w dla transmisji wideo na 偶ywo by艂oby niemo偶liwe. Bezpo艂膮czeniowa natura UDP pozwala nadawcy na wysy艂anie jednego strumienia datagram贸w, kt贸ry mo偶e by膰 efektywnie replikowany przez sie膰, aby dotrze膰 do du偶ej widowni.

Kwestia Niezawodno艣ci: Czy UDP Mo偶e By膰 Niezawodny?

Niezawodno艣膰 UDP to nie wyrok, to wyb贸r. UDP przekazuje odpowiedzialno艣膰 za niezawodno艣膰 warstwie aplikacji. Oznacza to, 偶e deweloperzy mog膮, i cz臋sto to robi膮, budowa膰 w艂asne mechanizmy niezawodno艣ci na szybkiej us艂udze datagramowej UDP.

Aplikacja mo偶e zaimplementowa膰 w艂asny, niestandardowy system numer贸w sekwencyjnych, potwierdze艅 i licznik贸w retransmisji. Daje to ogromn膮 elastyczno艣膰. Na przyk艂ad gra mo偶e potrzebowa膰 niezawodnego przesy艂ania wiadomo艣ci na czacie, jednocze艣nie zawodnie przesy艂aj膮c pozycje graczy. Buduj膮c na UDP, deweloper mo偶e stworzy膰 system hybrydowy, zapewniaj膮c retransmisj臋 utraconych wiadomo艣ci czatu, podczas gdy aktualizacje pozycji nie b臋d膮 retransmitowane. Ta selektywna niezawodno艣膰, dostosowana do specyficznych potrzeb aplikacji, jest niemo偶liwa do osi膮gni臋cia przy uniwersalnym podej艣ciu TCP.

Ta filozofia u偶ywania UDP jako bazy i budowania na nim inteligentniejszych protoko艂贸w to przysz艂o艣膰 transportu internetowego. Najwybitniejszym przyk艂adem jest QUIC (Quick UDP Internet Connections), protok贸艂 stanowi膮cy podstaw臋 HTTP/3. QUIC dzia艂a na UDP i reimplementuje wiele funkcji TCP, takich jak niezawodno艣膰 i kontrola przeci膮偶enia, ale w spos贸b bardziej wydajny i elastyczny, kt贸ry unika wielu historycznych problem贸w TCP.

    Protok贸艂 Datagram贸w U偶ytkownika (UDP) | Teleinf Edu