Nagłówek UDP
Pola: port źródłowy/docelowy, długość, suma kontrolna i pseudo-nagłówek.
Wprowadzenie: Prosta Etykieta Pocztówki
Jeśli segment TCP jest jak paczka rejestrowana ze szczegółowym, wielostronicowym listem przewozowym, to datagram UDP jest odpowiednikiem prostej pocztówki. Nagłówek TCP to ten długi list przewozowy, pełen numerów śledzenia, potwierdzeń i informacji o kontroli przepływu. W ostrym kontraście, nagłówek UDP to mała, minimalistyczna etykieta, którą naklejasz na pocztówkę.
Nagłówek UDP jest doskonałym odzwierciedleniem filozofii projektowej tego protokołu: rób absolutne minimum wymagane do dostarczenia wiadomości z aplikacji na jednym komputerze do aplikacji na innym. Nie zawiera on pól do sekwencjonowania, potwierdzeń czy zarządzania oknem. Jego cel jest sprowadzony do absolutnych podstaw komunikacji na warstwie transportowej.
Ta prostota nie jest wadą; to cecha. Mały, stały rozmiar nagłówka oznacza bardzo mały narzut. Mniej danych musi być przetwarzanych zarówno przez nadawcę, jak i odbiorcę, a mniej przepustowości jest zużywane na informacje kontrolne, co przekłada się bezpośrednio na większą szybkość i mniejsze opóźnienia. Każde pojedyncze pole w nagłówku UDP ma jasny, niezbędny cel związany z adresowaniem i podstawowym sprawdzaniem błędów. Zbadajmy elegancką prostotę jego czterech komponentów.
Ogólna Struktura Nagłówka UDP
Nagłówek UDP jest niezwykle mały i spójny. Zawsze ma długość 8 bajtów (64 bity). Ten stały rozmiar upraszcza przetwarzanie, ponieważ urządzenia nie muszą analizować nagłówka o zmiennej długości, jak w przypadku TCP. Nagłówek składa się z czterech pól, z których każde zajmuje 2 bajty (16 bitów).
Cały pakiet wysyłany przez UDP nazywany jest datagramem UDP. Składa się z dwóch części: zwięzłego 8-bajtowego nagłówka UDP, po którym następują dane aplikacji, czyli .
Szczegółowy Opis Pól Nagłówka UDP
Przeanalizujmy każde z czterech pól i jego kluczową rolę w protokole UDP.
1. Port Źródłowy (16 bitów)
Cel: Pole portu źródłowego identyfikuje numer portu aplikacji wysyłającej na hoście źródłowym. Jego główną funkcją jest informowanie maszyny odbierającej, gdzie wysłać ewentualne odpowiedzi.
Użycie: W interakcji klient-serwer, jak w przypadku zapytania DNS, to pole jest niezbędne. Klient DNS wysyła zapytanie z efemerycznego portu źródłowego. Kiedy serwer DNS otrzyma zapytanie, patrzy na pole portu źródłowego, aby poznać prawidłowy numer portu, którego należy użyć jako portu docelowego w datagramie odpowiedzi. Bez tego odpowiedź nie miałaby dokąd pójść.
Opcjonalność: W specyfikacji UDP to pole jest technicznie opcjonalne. Aplikacja, która nie oczekuje odpowiedzi, może ustawić to pole na zero. Jednak we współczesnej praktyce jest to bardzo rzadkie. Większość zapór sieciowych i urządzeń translacji adresów sieciowych (NAT) polega na porcie źródłowym do śledzenia sesji komunikacyjnych, a datagram z zerowym portem źródłowym prawdopodobnie zostałby odrzucony.
2. Port Docelowy (16 bitów)
Cel: Jest to pole obowiązkowe, które określa numer portu aplikacji na hoście docelowym, dla której przeznaczone są dane. Jest to numer mieszkania w naszej analogii z pocztówką.
Użycie: To pole jest kluczem do procesu demultipleksacji. Kiedy datagram UDP dociera do hosta, warstwa transportowa systemu operacyjnego sprawdza ten 16-bitowy numer. Używa go do znalezienia odpowiedniego gniazda aplikacji, które nasłuchuje na tym porcie i dostarcza mu ładunek. Na przykład, zapytanie DNS byłoby wysłane na port docelowy serwera DNS.
3. Długość (16 bitów)
Cel: To pole określa całkowitą długość całego datagramu UDP w bajtach. Długość ta obejmuje 8-bajtowy nagłówek i ładunek danych o zmiennej długości.
Wartości: Minimalna wartość tego pola to 8, co odpowiada datagramowi UDP, który ma nagłówek, ale nie ma ładunku danych. Chociaż datagram bez danych wydaje się bezużyteczny, może być czasami używany przez aplikację jako prosta forma pakietu podtrzymującego aktywność (keep-alive) lub pulsu (heartbeat). Ponieważ pole ma 16 bitów, teoretyczny maksymalny rozmiar datagramu UDP to bajtów. Jest to jednak dodatkowo ograniczone przez maksymalny rozmiar bazowego pakietu IP. W rzeczywistości unika się dużych datagramów, ponieważ są bardziej podatne na fragmentację na warstwie IP, co zwiększa prawdopodobieństwo utraty.
Dogłębnie: Suma Kontrolna UDP i Pseudo-Nagłówek
Pole Sumy Kontrolnej (16 bitów) to jedyna forma ochrony integralności oferowana przez UDP. Chociaż prosta, jej implementacja zawiera sprytny mechanizm chroniący przed czymś więcej niż tylko przypadkowymi odwróceniami bitów.
Cel Sumy Kontrolnej
Suma kontrolna UDP to kod wykrywający błędy, a nie je korygujący. Jej celem jest umożliwienie odbiorcy ustalenia, czy datagram został uszkodzony podczas transportu. Jeśli odbiorca obliczy sumę kontrolną, która nie pasuje do wartości w nagłówku, cicho odrzuca datagram. Żadna wiadomość o błędzie nie jest odsyłana do nadawcy; dane są po prostu porzucane.
Obliczenia wykorzystują tę samą , co suma kontrolna TCP/IP.
Kluczowa Rola Pseudo-Nagłówka
Obliczenia sumy kontrolnej nie obejmują tylko nagłówka UDP i jego ładunku. Aby dodać dodatkową warstwę ochrony, obliczenia obejmują również koncepcyjną strukturę danych znaną jako Pseudo-Nagłówek UDP. Ten pseudo-nagłówek nie jest częścią rzeczywistego datagramu UDP i nie jest przesyłany przez sieć; jest on tymczasowo tworzony zarówno przez nadawcę (do obliczeń), jak i przez odbiorcę (do weryfikacji).
Pseudo-nagłówek dla IPv4 składa się z:
- Źródłowego Adresu IP (32 bity)
- Docelowego Adresu IP (32 bity)
- Pola składającego się z samych zer (8 bitów)
- Numeru Protokołu (8 bitów - jego wartość to 17 dla UDP)
- Długości UDP (16 bitów - skopiowane z nagłówka UDP)
Dlaczego jest to ważne? Włączając źródłowe i docelowe adresy IP do obliczeń sumy kontrolnej, UDP chroni przed błędnym dostarczeniem. Wyobraź sobie, że awaria routera powoduje dostarczenie pakietu IP do niewłaściwego komputera. Gdyby suma kontrolna była obliczana tylko na nagłówku UDP i danych, niewłaściwy odbiorca mógłby uznać sumę kontrolną za prawidłową i omyłkowo przekazać uszkodzone dane do jednej ze swoich aplikacji. Ponieważ niewłaściwy host będzie miał inny adres IP, jego obliczenie sumy kontrolnej (które uwzględnia adresy IP z pseudo-nagłówka) nie powiedzie się, a on poprawnie odrzuci błędnie dostarczony datagram. W przypadku IPv6 pseudo-nagłówek jest podobny, ale używa 128-bitowych adresów IPv6.
Użycie Opcjonalne a Obowiązkowe
Istnieje istotna różnica w sposobie użycia sumy kontrolnej między IPv4 a IPv6:
- W IPv4, suma kontrolna UDP jest opcjonalna. Nadawca może zdecydować o nieobliczaniu sumy kontrolnej, ustawiając to pole na same zera. Historycznie robiono to w celu zaoszczędzenia kilku cykli procesora na wolnych urządzeniach, zakładając, że warstwa łącza danych (np. Ethernet ze swoim CRC) i tak wyłapie większość błędów.
- W IPv6, suma kontrolna UDP jest obowiązkowa. Ta zasada została zmieniona, ponieważ doświadczenie pokazało, że uszkodzenie danych może wystąpić na każdej warstwie, w tym wewnątrz routerów, gdzie kontrole warstwy łącza nie mają zastosowania. Wymuszenie jej użycia zapewnia niezbędną integralność danych od końca do końca.
Nagłówek UDP vs TCP: Ostateczne Porównanie
Kontrast między nagłówkami UDP i TCP zawiera w sobie podstawowe filozofie tych dwóch protokołów.
| Cecha | Nagłówek UDP (8 bajtów) | Nagłówek TCP (20-60 bajtów) |
|---|---|---|
| Adresowanie | Port Źródłowy i Docelowy | Port Źródłowy i Docelowy |
| Kolejność Danych | Brak mechanizmu (Brak pola Numeru Sekwencyjnego) | Tak (32-bitowe pole Numeru Sekwencyjnego) |
| Niezawodność | Brak mechanizmu (Brak Numeru Potwierdzenia) | Tak (32-bitowe pole Numeru Potwierdzenia, flaga ACK) |
| Stan Połączenia | Brak (Brak flag SYN, FIN, RST) | Pełne zarządzanie stanem (flagi SYN, FIN, RST) |
| Kontrola Przepływu | Brak (Brak pola Rozmiar Okna) | Tak (16-bitowe pole Rozmiar Okna) |
| Wykrywanie Błędów | Opcjonalna (w IPv4) 16-bitowa Suma Kontrolna | Obowiązkowa 16-bitowa Suma Kontrolna |
| Rozszerzalność | Brak (stały nagłówek) | Tak (pole Opcje o zmiennej długości) |
Ostatecznie nagłówek UDP dostarcza tylko tyle informacji, ile potrzeba, aby dostarczyć samowystarczalny datagram do właściwej aplikacji i przeprowadzić podstawowe sprawdzenie uszkodzeń. Wszystkie inne złożoności są celowo pozostawione aplikacji, co czyni UDP prostym, szybkim i wysoce elastycznym fundamentem dla określonych typów komunikacji sieciowej.