🍪 Można ciasteczko?

Ta strona chce wykorzystywać pliki cookie do analizowania ruchu oraz mierzenia skuteczności i personalizacji reklam zgodnie z polityką prywatności. Zgadzasz się?

PORADNIKI

8 min. czytania

UDP: User Datagram Protocol. Co to? Jak działa?

Internet

Fot. MM / Storyset

Czym jest User Datagram Protocol (UDP)? Jak działa? Wyjaśnienie procesu, połączenia, zastosowania i różnice względem TCP.

Spis treści
Serwer

Czym jest protokół UDP i na czym polega jego działanie? Często zestawiany jest z protokołem TCP, czym jednak oba rozwiązania się od siebie różnią? Poznaj specyfikę UDP i dowiedz się, co go charakteryzuje.

Protokół UDP jest odpowiedzią na globalną potrzebę zwiększenia prędkości przesyłu informacji przez internet. Jest doceniany i wykorzystywany w wielu rozwiązaniach online, których na co dzień używają miliony internautów. Jednocześnie natomiast pozostaje na tyle zaawansowanym zagadnieniem technicznym, że większość nawet nie wie o jego istnieniu. Warto jednak poznać zasady jego działania czy zastosowanie. Pozwoli Ci to bowiem lepiej zrozumieć technologię, z której na co dzień korzystasz.

W tym artykule przybliżymy wszystkie zagadnienia związane z protokołem UDP. Wyjaśniliśmy jego charakterystykę, zasady działania i przyjrzeliśmy się samemu transferowi. Wzięliśmy pod uwagę zarówno standard IPv4, jak i IPv6. Następnie przeanalizowaliśmy też interfejs użytkownika i IP. Na koniec sprawdziliśmy, czym UDP różni się od swojej głównej alternatywy, czyli protokołu TCP.

Co to jest protokół UDP (User Datagram Protocol)?

UDP (ang. User Datagram Protocol) to protokół stosowany w warstwie transportowej modelu OSI. Charakteryzuje się tym, że jest bezpołączeniowy, w związku z czym nie odpowiada za nawiązywanie połączeń i śledzenie realizowanych sesji.

UDP nie gwarantuje dostarczenia datagramu. Nie został wyposażony ponadto w żadne mechanizmy kontroli retransmisji i przepływu. Można zatem powiedzieć, że jego budowa i funkcjonalności zostały znacznie uproszczone. W porównaniu do TCP przybierają minimalistyczne formy. Wiąże się to jednak z jego główną cechą, jaką jest poprawa prędkości transmisji danych.

Brak dodatkowych zadań sprawia, że protokół UDP charakteryzuje się możliwością bardzo szybkiego przesyłania danych. W jego przypadku poprawianiem wszelkich zaistniałych błędów zajmują się inne warstwy modelu OSI, takie jak np. VoIP czy protokół DNS. Dzięki temu znalazł zastosowanie w rozwiązaniach będących w stanie poświęcić spójność przesyłu kosztem jego prędkości.

Charakterystyka UDP

Protokół UDP wykorzystuje porty do udostępniania mechanizmu identyfikacji różnych punktów końcowych w obrębie jednego hosta. Dotyczyć to może np. rozmaitych serwów, realizowanych usług czy pracujących aplikacji. Pozwala ponadto na realizację transmisji danych w jednym momencie do kilku adresów docelowych. Realizuje w ten sposób tzw. multicast.

Ta technologia dostarcza pojedyncze pakiety danych, udostępniane przez IP. Zwane są one data gramami i zawierają dwa rodzaje nagłówków: niższego poziomu oraz UDP. Ten ostatni składa się z pól zawierających:

  • długość pakietu,
  • sumę kontrolną,
  • port źródłowy,
  • port docelowy.

Porty protokołu UDP są zapisywane w 16 bitach, czyli 2 bajtach. Sprawia to, że do każdego adresu IP może zostać przypisanych dokładnie 65535 zakończeń. Pierwszych 1023 jest umownie zarezerwowanych przez powszechnie znane usługi sieciowe. Pozostałe natomiast mogą zostać przydzielone dla aplikacji użytkownika.

HTTP 1.1, HTTP/2 i HTTP/3 a protokół UDP

Zarówno TCP, jak i UDP, to protokoły transportowe. Mimo wykonywania pozornie podobnych zadań nie korzystają jednak z tych samych standardów HTTP. Zarówno HTTP/2, jak i jego poprzednik, czyli HTTP 1.1, wykorzystują wyłącznie TCP oraz jego wariację SPDY. Zupełnie inaczej jest natomiast w przypadku najnowszej odsłony HTTP, czyli HTTP/3.

HTTP/3 oparty jest na protokole opracowanym przez Google – QUIC (ang. Quick UDP Internet Connections). Odchodzi on od technologii wykorzystywanych w przypadku poprzednich wersji HTTP oraz protokołu TCP. Zamiast nich korzysta natomiast z UDP, całkowicie eliminując zjawisko blokowania nagłówków. Dzięki temu przyśpiesza realizację transmisji danych. Pozwala przy tym też na jeszcze lepsze multipleksowanie. Zgubienie jednego pakietu w jego przypadku nie sprawia, że konieczne jest odświeżanie połączenia.

Zastosowanie UDP

Protokół UDP skupia się na prędkości transferu informacji. Wykorzystywany jest głównie w rozwiązaniach wymagających szybkiego przesyłania danych w czasie rzeczywistym. Przy tym mowa tu przede wszystkim o aplikacjach, które przykładają mniejszą wagę do gwarancji dotarcia pakietów do odbiorcy czy zachowania ich odpowiedniej kolejności.

To sprawia, że UDP odnalazł swoje zastosowanie przy realizacji m.in.:

  • transmisji strumieniowych,
  • komunikacji w czasie rzeczywistym (np. wideokonferencje),
  • gier sieciowych,
  • strumieni dźwięku,
  • transmisjach multimediów,
  • protokołach DNS.

Ponadto jest wykorzystywany przez programistów do optymalizacji aplikacji pod kątem wydajności i szybkości. Ze względu na zagrożenie potencjalnymi kłopotami w transferze, raczej nie jest wykorzystywany do rozwiązań zarządzających danymi poufnymi.

Struktura nagłówka UDP

Struktura nagłówka UDP wygląda następująco:

Opis poszczególnych elementów:

  • port źródłowy – wskazuje port aplikacji, z której dane są wysyłane. To pole opcjonalne, a gdy nie zostanie wykorzystane, automatycznie przyjmuje wartość 0;
  • port docelowy – wskazuje port aplikacji, do której dane są wysyłane. Jest to pole wymagane;
  • długość – 16-bitowe pole, które wskazuje długość konkretnego datagramu UDP (zarówno nagłówek, jak i dane). Nie może mniej niż 8 bajtów, co stanowi długość nagłówka;
  • suma kontrolna – 16-bitowe pole, które służy do sprawdzania poprawności przesłanych danych (zarówno nagłówka, jak i danych). Stanowi jedyną gwarancję tego, że dane nie zostały uszkodzone, bo IP nie wylicza sumy kontrolnej dla przesyłanych danych. To pole opcjonalne.

Transfer UDP (IPv4)

Protokół UDP może działać na podstawie czwartej wersji protokołu komunikacyjnego IPv4. W takim przypadku obliczanie sumy kontrolnej realizowane jest przy pomocy metody określonej w RFC 768. W takim przypadku 16-bitowe słowa sumowane są razem. Jest to realizowane przy pomocy kodu uzupełnień do jedności, gdy suma kontrolna ustawiana jest na 0. Różnica jest w danych używanych do tworzenia sumy kontrolnej, w której pole wstawiana jest końcowa wartość. Wyobrażenie sobie tego może ułatwić poniższa tabela:

W nagłówków IPv4 umieszczane są źródłowe i docelowe adresy. Długość pola UDP składa się natomiast z nagłówka oraz danych.

Co się stanie, jeśli suma kontrolna po wyliczeniu wyniesie 0? W takim przypadku powinna zostać wysłana jako alternatywna prezentacja 0 w kodzie uzupełnień do jedności (same 1). Alternatywnie może ona nie zostać użyta w ogóle. W takim przypadku wysyłana jest jako 0 (same 0). Będzie to stanowić znak dla odbiorcy, że nie została wykorzystana.

Transfer UDP (IPv6)

Protokół UDP został dostosowany do działania na szóstej wersji protokołu komunikacyjnego IPv6. Główną zmianą, w porównaniu do IPv4, jest to, że suma kontrolna przestaje w tym przypadku być już opcjonalna. Jej metoda obliczania została szczegółowo opisana w RFC 2460.

Aby można było skorzystać z transportu i innej, wyższej warstwy protokołu, zawierającej adresy z nagłówka IP w sumie kontrolnej, niezbędne jest przeprowadzenie jej modyfikacji. Wynika to z faktu, że IPv6 nie obsługuje adresów 32-bitowych, które były wykorzystywane w poprzednim rozwiązaniu. Tutaj mamy do czynienia z adresami 128-bitowymi. Obrazowo prezentuje tę sytuację poniższa tabela:

Nagłówek w przypadku IPv6 zawiera wyłącznie jeden adres źródła danych. Jednocześnie określony adres docelowy jest adresem końcowym. Co się natomiast stanie, gdy pakiet nie będzie zawierał nagłówka trasowania? W takim przypadku za adres docelowy uznawany jest ten z nagłówka. Ponownie długość pola UDP zawiera zarówno nagłówek, jak i dane.

Bezpołączeniowość UDP

Przy okazji omawiania transferów UDP warto przyjrzeć się nieco dokładniej pojęciu bezpołączeniowości tego protokołu. Na czym ona dokładnie polega? Otóż jeszcze przed rozpoczęciem komunikacji nie dochodzi do wysłania żadnych informacji inicjujących połączenie między hostem nadawczym i hostem docelowym. To jedna z głównych różnic między protokołem UDP a TCP. W praktyce więc, gdy urządzenie źródłowe chce wysłać informacje, to po prostu to robi. Nie jest do tego wymagana inicjacja czy wyrażenie zgody przez „odbiorcę”.

Interfejs użytkownika i interfejs IP

Zarówno charakterystyka interfejsu użytkownika, jak i interfejsu IP, nie jest przesadnie skomplikowana. W przypadku tego pierwszego konieczne jest zachowanie jego trzech głównych funkcjonalności. Musi on bowiem pozwalać na:

  • przyjmowanie operacji na portach, zwracanie obiektów danych oraz wskazywanie portów źródła, wraz z adresem źródła danych,
  • tworzenie nowych portów, które będą odpowiedzialne za przyjmowanie danych,
  • realizację operacji pozwalających datagramowi na wysyłkę danych, portów źródłowych, portów docelowych oraz ich adresów.

W przypadku interfejsu IP moduł UDP przede wszystkim musi:

  • rozróżniać pola protokołu oraz nagłówka,
  • określać źródłowe i docelowe adresy internetowe.

Odpowiedzią na odebraną operację przy interfejsie UDP/IP jest zwracanie całego datagramu, wraz z nagłówkiem internetu. Taki interfejs umożliwiłby ponadto przesyłanie kompletnych datagramów, wraz z nagłówkiem. Realizowane by to było poprzez protokół IP. Warto zaznaczyć, że w tym przypadku to właśnie IP odpowiadałby za badanie zgodności niektórych pół i obliczanie sumy kontrolnej.

Czym jest kapsułkowanie UDP?

Wraz z charakterystyką protokołu UDP warto poznać pojęcie tzw. kapsułkowania. Jest to proces polegający na umieszczaniu informacji z warstwy wyższej w środku wiadomości warstwy niższej. W praktyce więc informacja – jeszcze przed wysłaniem – jest po stronie nadawcy przekazywana „w dół” stosu warstwy. Podział UDP na warstwy TCP/IP wygląda tak:

Program użytkowy
Datagram użytkownika (UDP)
Intersieć (IP)
Interfejs sieci

Wiadomość jest „przekazywana” do coraz „głębszych” warstw. Każda kolejna, przez którą przechodzi, dodaje do niej własny nagłówek oraz stopkę. Właśnie w ten sposób datagram UDP jest przed transferem w sieć kapsułkowany w datagram IP.

W tym przypadku:

  • nagłówek IP odpowiada za identyfikację maszyny źródłowej oraz docelowej,
  • nagłówek UDP odpowiada za identyfikację portów nadawcy oraz odbiorcy.

W przypadku hosta odbiorczego proces ten wygląda dokładnie odwrotnie. Wiadomość jest wtedy przekazywana w górę stosu warstw. Każda kolejna natomiast interpretuje i usuwa nagłówek dodany wcześniej przez adekwatną warstwę u nadawcy.

Podsumowując, u odbiorcy pakiet trafia do najniższej warstwy oprogramowania i wędruje coraz wyżej. Każda warstwa usuwa jeden nagłówek, by oczekujący proces otrzymał komunikat bez nagłówków. Datagram UDP, otrzymany od IP, na maszynie docelowej wygląda ostatecznie dokładnie tak, jak ten, przekazany przez UDP do IP na maszynie nadawczej.

Czym protokół UDP różni się od TCP?

Na koniec porównajmy protokół UDP z rozwiązaniem dla niego alternatywnym, czyli protokołem TCP. Jak już wiesz, User Datagram Protocol skupia się na szybkości przesyłu informacji. Nie odpowiada za porządkowanie transferowanych danych czy upewnianie się, że poprawnie dotarły one do odbiorcy. Dzięki temu świetnie sprawdza się w rozwiązaniach, w których na pierwszym miejscu stawiana jest prędkość transferu.

Ze względu na swoją specyfikę jednak jest uważany za nieco mniej bezpieczny i „stabilny” od protokołu TCP. Ten drugi bowiem przesyła informacje w usystematyzowanych i pojedynczych pakietach. Co więcej, żąda nawet od odbiorcy potwierdzenia zwrotnego. Dzięki temu postrzegany jest za niezawodny i rzetelny. Ta „dokładność działania” przekłada się jednak na zdecydowanie niższą prędkość transferu.

W praktyce oba te transfery są funkcjonalne i przydatne, ale w różnych rozwiązaniach. UDP sprawdza się tam, gdzie priorytetem jest szybkość przesyłania plików. Jest niezastąpiony w sytuacji, gdy potencjalna utrata części danych jest akceptowalna. TCP z kolei świetnie sprawdza się w sytuacji przesyłu istotnych danych, które nie mogą zostać naruszone podczas transferu.