Protokół UDP [60] jest ostatnim z omawianych. Bazując na protokole niższej warstwy [58], IP, umożliwia on transmisję danych między jednym urządzeniem sieciowym (np. komputerem), a drugim. Protokół UDP jest zorientowany transakcyjnie – udostępnia usługi dostarczające datagramy metodą bezpołączeniową. Nie występuje kontrola poprawności odebrania wysłanych informacji ani zapobieganie duplikacji odbieranych datagramów.
Do wyspecyfikowania odbiorcy za pomocą 32‑bitowej adresacji, wspieranej przez protokół IP, UDP dodaje mechanizm wyróżniający w każdym urządzeniu 65536 tzw. portów. Port jest logiczną jednostką, do której kierowane są informacje. Do każdego portu może być przypisany program odbierający wyłącznie informację skierowaną do danego portu. Istnieje grupa wyróżnionych numerów portów, dla których podano standardowy program obsługujący i rodzaj przesyłanych danych, np. informacji z serwerów nazw czy podających aktualny czas. Pełną listę numerów portów o określonych znaczeniach znaleźć można w [61].
Porty o numerach poniżej 1024 mają przypisane znaczenia. Ich użycie do innych celów jest utrudnione lub wręcz uniemożliwione w zwykłym oprogramowaniu użytkowym działającym pod kontrolą niektórych sieciowych systemów operacyjnych. Korzystanie przez aplikacje z portów o wysokich numerach (czasami dopiero tych przekraczających 16383) jest dozwolone i zalecane dla niestandardowych usług systemowych – a takie właśnie stanowią usługi transmisji głosu w telefonii IP.
W tabeli 10 podano budowę datagramu UDP (w pierwszym wierszu umieszczono numery bitów w 32-bitowych słowach nagłówka):
Tabela 10 Budowa datagramu UDP
|
0 |
7 |
8 |
15 |
16 |
23 |
24 |
31 |
|
numer portu źródłowego |
numer portu przeznaczenia |
||||||
|
długość |
suma kontrolna |
||||||
|
dane ... |
|||||||
Pole „numer portu źródłowego” nagłówka datagramu UDP może przybierać wartość niezerową – specyfikuje wtedy numer portu, pod który ma zostać wysłana ewentualna odpowiedź na datagram. Możliwa jest wartość zerowa tego pola.
Pole „numer portu przeznaczenia” określa opisany wyżej numer portu, do którego kierowany jest datagram. Oprogramowanie każdego urządzenia dba o to, aby informacje skierowane do każdego portu trafiły do właściwej aplikacji. Zauważmy, że nagłówek datagramu UDP nie specyfikuje protokołu wyższej warstwy (jak to jest w datagramie protokołu IP) – odbiorcę danych identyfikuje numer portu przeznaczenia.
Pole „długość” zawiera łączną sumę długości nagłówka datagramu UDP (liczoną w oktetach) i danych. Np. przy wysyłaniu bloku danych o długości 256 bajtów, pole „długość” powinno przyjmować wartość 256 + 8 = 264.
Suma kontrolna jest liczona z nagłówka i danych (przeciwnie niż w protokole IP, który sumą kontrolną zabezpiecza jedynie zawartość nagłówka) w sposób nieco bardziej skomplikowany, niż w protokole IP. Dokładny opis algorytmu obliczania sumy kontrolnej datagramu UDP można znaleźć w [60].
W tabeli poniżej podano formę przykładowego przekazu 512 bajtów danych w datagramie UDP, enkapsulowanym wewnątrz datagramu protokołu IP, który jest przesyłany przez sieć Ethernet w ramce Ethernet II.
Tabela 11 Forma datagramu UDP przesyłanego przez sieć Ethernet
|
długość |
14 bajtów |
20 bajtów |
8 bajtów |
512 bajtów |
4 bajty |
|
znaczenie |
nagłówek Ethernet II |
nagłówek IP |
nagłówek UDP |
dane |
FCS |
W powyższym przykładzie widać wyraźnie, iż w celu transmisji 512 bajtów pomiędzy dwoma urządzeniami, wymieniającymi między sobą dane przy pomocy protokołu UDP, przesłane musi być w rzeczywistości przez sieć aż 46 bajtów więcej. Daje to bardzo duży procentowo przyrost ilości transmitowanych bajtów w przypadku małych porcji danych – nawet powyżej 100% gdy przesyłany jest blok krótszy niż 46 bajtów.
Powstało kilka protokołów mających na celu zmniejszenie tych nadwyżek. Zajmują się one m.in. kompresją nagłówków datagramów IP [20][21][27].