UDP (ang. User Datagram Protocol – protokół pakietów użytkownika) – jeden z podstawowych protokołów internetowych. Umieszcza się go w warstwie czwartej (transportu) modelu OSI.
Jest to protokół bezpołączeniowy, więc nie ma narzutu na nawiązywanie połączenia oraz śledzenie sesji (w przeciwieństwie do TCP). Nie ma też mechanizmów kontroli przepływu oraz retransmisji. Korzyścią płynącą z takiego uproszczenia budowy jest większa szybkość transmisji danych oraz niedobór dodatkowych zadań, którymi musi zajmować się host posługujący się tym protokołem. Z tych względów UDP jest wielokrotnie używany w takich zastosowaniach jak wideokonferencje, strumienie dźwięku w Internecie oraz gry sieciowe, gdzie dane muszą być przesyłane możliwie szybko, a poprawianiem błędów zajmują się inne warstwy modelu OSI. Przykładem bywa VoIP albo protokół DNS.
UDP udostępnia mechanizm identyfikacji wielorakich punktów końcowych (np. pracujących aplikacji, usług czy serwisów) na jednym hoście dzięki portom (porównaj: gniazdo). UDP zajmuje się dostarczaniem pojedynczych pakietów, udostępnionych przez IP, na którym się opiera. Kolejną cechą odróżniającą UDP od TCP jest możliwość transmisji do kilku adresów docelowych na raz (tzw. multicast).
Pakiety UDP, zwane też datagramami, zawierają oprócz nagłówków niższego poziomu nagłówek UDP. Składa się on z pól zawierających sumę kontrolną, długość pakietu oraz porty: źródłowy oraz docelowy.
Podobnie jak w TCP, porty UDP zapisywane są na dwóch bajtach (szesnastu bitach), więc każdy adres IP może posiadać przypisanych 65536 wielorakich zakończeń. Z przyczyn historycznych, porty 0-1023 zarezerwowane są dla dobrze znanych usług sieciowych – dla aplikacji użytkownika przydziela się porty od 1024.
Struktura nagłówka UDP
| + |
Bity 0 - 15 |
16 - 31 |
| 0 |
Port nadawcy |
Port odbiorcy |
| 32 |
Długość |
Suma kontrolna |
| 64 |
Dane
|
- Port nadawcy
- identyfikuje port, z którego była wysłana wiadomość, kiedy znaczący to wskazuje port wysyłającego procesu oraz może zostać przyjęty jako port, do którego powinna zostać zwrócona wiadomość zwrotna w przypadku braku innej informacji. Port nadawcy jest polem opcjonalnym. Gdy pole to nie jest używane przyjmuje wartość zero.
- Port odbiorcy
- identyfikuje port odbiorcy oraz jest polem wymaganym.
- Długość
- 16-bitowe pola specyfikują długość w bajtach całego datagramu: nagłówek oraz dane. Minimalna długość to 8 bajtów oraz jest to długość nagłówka. Wielkość pola ustala teoretyczny limit 65,527 bajtów, dla danych przenoszonych przez pojedynczy datagram UDP.
- Suma kontrolna
- 16 bitowe pole, które jest użyte do sprawdzania poprawności nagłówka oraz danych. Pole jest opcjonalne. Gdyż IP nie wylicza sumy kontrolnej dla danych, suma kontrolna UDP jest jedyną gwarancją, że dane nie zostały uszkodzone.
Transfer UDP po IPv4
- Gdy UDP działa na IPv4 metoda używana do obliczania sumy kontrolnej określana jest w RFC 768
- Całe 16-bitowe słowa są sumowane razem używając kodu uzupełnień do jedności (pole suma kontrolna ustawiane jest na zero). Końcowa wartość jest wstawiana do pola sumy kontrolnej.
- Różnica jest w danych używanych do tworzenia sumy kontrolnej.
| + |
Bity 0 - 7 |
8 - 15 |
16 - 23 |
24 - 31 |
| 0 |
Adres źródłowy |
| 32 |
Adres docelowy |
| 64 |
Zera |
Protokół |
Długość UDP |
| 96 |
Port źródłowy |
Port docelowy |
| 128 |
Długość |
Suma kontrolna |
| 160 |
Dane
|
Źródłowe oraz docelowe adresy leżą w nagłówku IPv4. Na długość pola UDP składa się jego nagłówek oraz dane. Jeśli suma kontrolna zostanie wyliczona oraz wyniesie 0, to powinna zostać wysłana jako alternatywna reprezentacja zera w kodzie uzupełnień do jedności (same 1). Jeśli suma kontrolna nie jest użyta, to powinna zostać wysłana jako "zwykłe" zero (same 0), co wskazuje odbiorcy, że nie jest wykorzystywana.
Transfer UDP po IPv6
Gdy UDP działa na IPv6, suma kontrolna nie jest już opcjonalna. Metoda obliczania sumy kontrolnej była opisana w RFC 2460.
Wszelki transport albo inna wyższa warstwa protokołu, która zawiera adresy z nagłówka IP w swojej sumie kontrolnej musi zostać zmodyfikowana by da się jej było użyć. IPv6 musi zawierać 128-bitowe adresy zamiast 32-bitowych używanych w IPv4.
| + |
Bity 0 - 7 |
8 - 15 |
16 - 23 |
24 - 31 |
| 0 |
Adres źródłowy |
| 32 |
| 64 |
| 96 |
| 128 |
Adres docelowy |
| 160 |
| 192 |
| 224 |
| 256 |
Długość UDP |
| 288 |
Zera |
Następny nagłówek |
| 320 |
Port źródłowy |
Port docelowy |
| 352 |
Długość |
Suma kontrolna |
| 384 |
Dane
|
W nagłówku IPv6 istnieje jeden adres źródła danych. Adres docelowy jest końcowym adresem; jeśli pakiet IPv6 nie zawiera nagłówka trasowania, to adresem docelowy będzie adres zawarty w nagłówku IPv6, inaczej, w powstającym punkcie węzłowym, będzie to adres ostatniego elementu nagłówka trasowania, a w odbierającym punkcie węzłowym, będzie to adres docelowy z nagłówka IPv6. Następna wartość nagłówka jest wartością dla protokołu UDP.Na długość pola UDP składa się jego nagłówek oraz dane. Patrz art. źródłowy Datagram Protocol.
Interfejs użytkownika
Interfejs użytkownika powinien pozwolić:
- tworzyć nowe porty przyjmujące dane
- przyjmować operacje na tych portach, zwracać obiekty danych oraz wskazywać port źródła oraz adres źródła danych
- na operacje, które pozwalają datagramowi wysłać, dane, porty źródłowe oraz docelowe albo ich adresy. RFC 768
Interfejs IP
Moduł UDP musi być w stanie określić źródłowe oraz docelowe adresy internetowe, oraz rozróżniać pole protokołu od nagłówka. Jeden możliwy interfejs UDP/IP zwracałby cały datagram włącznie z nagłówkiem internetu jako odpowiedz na odebraną operacje. Interfejs UDP pozwoliłby także przesłać kompletny datagram wraz z nagłówkiem poprzez protokół IP. IP sprawdzałby dla zgodności pewne pola oraz obliczał sumę kontrolną nagłówka. RFC 768
Enkapsulacja UDP
Miejsce UDP w podziale na warstwy TCP/IP pokazuje rysunek.
| Program użytkowy |
| Datagram użytkownika (UDP) |
| Intersieć (IP) |
| Interfejs sieci |
Enkapsulacja(kapsułkowanie) opiera się na umieszczeniu warstwy wyższej wewnątrz wiadomości warstwy niższej. Zanim wiadomość po stronie nadawczej zostanie wysłana, przekazywana jest w dół stosu warstwy; każda kolejna warstwa po otrzymaniu tej wiadomości od warstwy wyżej, dodaje do niej własny nagłówek oraz stopkę. Datagram UDP przed wysłaniem w sieć jest w taki sposób kapsułkowany w datagram IP. Nagłówek IP identyfikuje maszynę źródłową oraz docelową, UDP – identyfikuje porty nadawcy oraz odbiorcy. U odbiorcy zachodzi proces odwrotny. Wiadomość przekazywana jest w górę stosu warstw oraz każda kolejna warstwa interpretuje, a następnie usuwa nagłówek dodany poprzednio przez te sama warstwę u nadawcy.
Więc u odbiorcy pakiet dociera do najniższej warstwy oprogramowania sieciowego oraz wędruje ku coraz wyższym warstwom. Każda z nich usuwa jeden nagłówek, oczekujący proces otrzymuje komunikat bez nagłówków. Datagram UDP otrzymany od IP na maszynie docelowej jest identyczny z tym, który UDP przekazało do IP na maszynie źródłowej. Patrz art. źródłowy nullwww.staff.amu.edu.pl/~psi/informatyka/tcpip/udp.htm
Sprawdź też
Linki zewnętrzne