Jaki jest maksymalny rozmiar pojedynczego datagramu IPv4, którego wielkość liczona jest wraz z jego nagłówkiem?
A. 32 kB
B. 64 kB
C. 256 kB
D. 128 kB
Pytanie z egzaminu CKE, czerwiec 2013 (arkusz E.13-X-13.05).
Odpowiedź 64 kB jest właściwa, bo w nagłówku IPv4 pole Total Length ma długość 16 bitów. To pole określa rozmiar całego datagramu IPv4, czyli nagłówek razem z danymi użytkownika. Maksymalna wartość zapisana na 16 bitach to $2^{16}-1=65535$, czyli 65 535 bajtów. W testach i dokumentacji często zaokrągla się to do 64 kB, choć technicznie najdokładniej byłoby powiedzieć: prawie 64 KiB. Moim zdaniem to ważny szczegół, bo pokazuje różnicę między teorią protokołu a praktyką sieciową. Standard IPv4, opisany m.in. w RFC 791, zakłada taki limit niezależnie od tego, czy nagłówek ma minimalne 20 bajtów, czy jest większy przez opcje. W realnych sieciach rzadko wysyła się tak duże datagramy, bo ogranicza nas MTU, np. w typowym Ethernecie jest to 1500 bajtów. Większy datagram musiałby zostać pofragmentowany, a fragmentacja IPv4 bywa problematyczna dla wydajności, diagnostyki i bezpieczeństwa. Dobra praktyka to korzystanie z Path MTU Discovery i projektowanie aplikacji tak, żeby nie wymuszały dużych pakietów IP bez potrzeby.
Wartości 32 kB, 128 kB i 256 kB wynikają zwykle z pomylenia limitu protokołu IPv4 z innymi ograniczeniami spotykanymi w informatyce, na przykład z rozmiarem buforów, pamięci, segmentów albo ustawieniami konkretnych systemów operacyjnych. Maksymalny rozmiar datagramu IPv4 nie jest ustalany dowolnie przez kartę sieciową ani przez administratora, tylko wynika bezpośrednio z budowy nagłówka IP. Kluczowe jest pole Total Length, które ma dokładnie 16 bitów i opisuje długość całego datagramu: nagłówka oraz danych. Skoro 16 bitów pozwala zapisać maksymalnie 65 535, to nie da się w pojedynczym datagramie IPv4 wskazać 128 kB czy 256 kB, bo taka liczba po prostu nie mieści się w tym polu. Z kolei 32 kB jest za małe i może się kojarzyć z połową zakresu albo z limitem jakiejś starszej implementacji, ale nie ze standardem IPv4. Typowy błąd myślowy polega też na mieszaniu pojęcia datagramu IP z ramką Ethernet. Ethernet ma zwykle MTU 1500 bajtów, więc w praktyce duży datagram może zostać podzielony na fragmenty, ale to nie zmienia maksymalnej długości zapisanej w nagłówku IPv4. Z mojego doświadczenia najlepiej zapamiętać to przez skojarzenie: IPv4 ma 16-bitowe pole długości, więc limit to około 64 kB, a dokładniej 65 535 bajtów.