Które pole jest zawarte w nagłówku protokołu UDP?
A. Suma kontrolna.
B. Wskaźnik pilności.
C. Numer potwierdzenia.
D. Numer sekwencyjny.
Pytanie z egzaminu CKE, styczeń 2019 (arkusz E.13-X-19.01).
Suma kontrolna jest jednym z pól nagłówka UDP, więc ta odpowiedź pasuje do budowy tego protokołu. UDP, opisany w RFC 768, ma bardzo prosty nagłówek: port źródłowy, port docelowy, długość oraz suma kontrolna. I właśnie ta prostota jest jego cechą charakterystyczną. Nie ma tam mechanizmów porządkowania segmentów, potwierdzania odbioru ani sterowania połączeniem, bo UDP działa bezpołączeniowo. Suma kontrolna służy do wykrywania błędów w datagramie, czyli pozwala odbiorcy sprawdzić, czy dane nie zostały uszkodzone w trakcie transmisji. W IPv4 pole checksum w UDP może teoretycznie zostać wyłączone, ale w praktyce lepiej tego nie robić. W IPv6 suma kontrolna UDP jest zasadniczo wymagana. Z mojego doświadczenia warto zapamiętać prostą zasadę: UDP jest szybki i lekki, ale nie daje gwarancji dostarczenia. Dlatego używa się go np. w DNS, VoIP, transmisjach wideo, grach sieciowych czy DHCP, gdzie małe opóźnienia są często ważniejsze niż pełna niezawodność na poziomie transportowym.
W tym pytaniu łatwo pomylić UDP z TCP, bo oba protokoły pracują w warstwie transportowej modelu TCP/IP i oba używają portów do rozróżniania usług. Różnica jest jednak zasadnicza. Numer sekwencyjny, numer potwierdzenia oraz wskaźnik pilności należą do nagłówka TCP, a nie UDP. TCP jest protokołem połączeniowym, więc musi śledzić kolejność przesyłanych bajtów, potwierdzać odebrane dane i w razie potrzeby retransmitować utracone segmenty. Do tego właśnie służą pola typu sequence number i acknowledgment number. Wskaźnik pilności także jest związany z TCP i mechanizmem oznaczania danych pilnych, chociaż w praktyce dziś nie jest to coś, co często spotyka się w typowych konfiguracjach sieciowych. UDP nie robi takich rzeczy. Nie zestawia połączenia, nie sprawdza kolejności pakietów i nie czeka na ACK. Typowy błąd myślowy polega na założeniu, że każdy protokół transportowy musi mieć potwierdzenia oraz numerację danych. A to nieprawda. UDP celowo ma mały nagłówek i minimalny narzut, bo ma być szybki. Jeśli aplikacja potrzebuje niezawodności, to sama musi ją zaimplementować albo użyć TCP. W nagłówku UDP znajdziemy za to sumę kontrolną, która pomaga wykryć uszkodzenia datagramu. Moim zdaniem to jedna z tych rzeczy, które najlepiej zapamiętać przez porównanie: TCP ma dużo mechanizmów kontroli transmisji, a UDP ma tylko podstawowe informacje potrzebne do przesłania datagramu między portami.