UDP nic nie wie o MTU. Pakiety UDP mogą mieć dowolny rozmiar od 8 do 65535 bajtów. Warstwy protokołu poniżej UDP albo mogą wysłać pakiet o określonym rozmiarze, albo odrzucą wysyłanie tego pakietu z błędem, jeśli jest zbyt duży.
Warstwa poniżej UDP to zwykle IP, IPv4 lub IPv6. A pakiet IP może mieć dowolny rozmiar od 20 (IPv4) / 40 (IPv6) do 65535 bajtów, czyli tyle samo co UDP. Jednak IP obsługuje mechanizm zwany fragmentacją . Jeśli pakiet IP ma większy rozmiar niż ten, który może transportować poniższa warstwa, IP może podzielić pojedynczy pakiet na wiele pakietów zwanych fragmentami. Każdy fragment jest w rzeczywistości własnym pakietem IP (ma własny nagłówek IP) i jest również wysyłany samodzielnie do miejsca docelowego; zadaniem miejsca docelowego jest zebranie wszystkich fragmentów i odbudowanie z nich pełnego pakietu przed przekazaniem odebranych danych na następnej wyższej warstwie (np. UDP).
Protokół Ethernet może transportować tylko ramki o ładunku między 46 a 1500 bajtów (są wyjątki, ale wykracza to poza zakres tej odpowiedzi). Jeśli dane ładunku są mniejsze niż 46 bajtów, są dopełniane, aby mieć dokładnie 46 bajtów. Jeśli dane ładunku przekraczają 1500 bajtów, interfejs odmówi ich przyjęcia. Jeśli tak się stanie, to od warstwy IP zależy teraz fragmentowanie pakietu, aby żaden fragment nie był większy niż 1500 bajtów, lub zgłoszenie błędu do następnej wyższej warstwy, jeśli fragmentacja została wyłączona lub zabroniona dla tego konkretnego połączenia.
Na ogół należy unikać fragmentacji, jak
- marnuje zasoby po stronie nadawcy.
- marnuje zasoby po stronie odbiornika.
- zwiększa obciążenie protokołu dla tej samej ilości danych ładunku.
- jeśli pojedynczy fragment zostanie utracony, cały pakiet zostanie utracony.
- jeśli pojedynczy fragment jest uszkodzony, cały pakiet jest uszkodzony.
- w przypadku ponownego wysłania wszystkie fragmenty muszą zostać wysłane ponownie.
Właśnie dlatego TCP inteligentnie przyjmuje rozmiar ramki, aby pakiety nigdy nie wymagały IP do ich fragmentacji. Można tego dokonać zakazując fragmentacji pakietów IP, a jeśli IP zgłasza, że pakiet jest zbyt duży, aby go wysłać, TCP zmniejsza rozmiar ramki i próbuje ponownie, dopóki nie zostanie zgłoszony żaden błąd.
Jednak w przypadku UDP byłoby to zadaniem samej aplikacji, ponieważ UDP jest „głupim” protokołem, nie ma własnej logiki zarządzania, co czyni go bardzo elastycznym, szybkim i prostym.
Jedyny rozmiar UDP, na którym można zawsze polegać na transporcie, to 576 minus 8 bajtów nagłówka UDP i minus 20 (v4) / 40 (v6) bajtów nagłówka IP, ponieważ standard IP wymaga, aby każdy host IP mógł odbierać pakiety IP z całkowity rozmiar 576 bajtów. Implementacja protokołu nie będzie zgodna ze standardem, jeśli nie będzie akceptować pakietów co najmniej tego rozmiaru. Zauważ jednak, że standard nie mówi 576 bez fragmentacji, więc nawet pakiet 576 bajtów może zostać podzielony między dwa hosty.
Jedyny rozmiar pakietu, na którym można polegać, że można go przenosić bez fragmentacji, to 24 bajty dla IPv4 i 56 bajtów IPv6, ponieważ najmniejsze nagłówki IP dla fragmentu to 20/48 bajtów (v4 / v6), a fragment musi mieć co najmniej 4/8 dane ładunku bajtów (v4 / v6). Zatem system transportowy poniżej warstwy IP, który nie może transportować co najmniej pakietów o tych rozmiarach, nie może być wykorzystywany do transportu ruchu IP.
I zanim ktokolwiek komentuje, że nagłówek IPv6 ma tylko 40 bajtów: To prawda, ale w przeciwieństwie do nagłówka IPv4, standardowy nagłówek IPv6 nie ma pól nagłówka do fragmentacji. Jeśli pakiet musi zostać pofragmentowany, nagłówek rozszerzenia fragmentacji należy dodać poniżej nagłówka podstawowego IPv6, a ten nagłówek rozszerzenia ma 8 bajtów. Również w przeciwieństwie do IPv4, przesunięcia fragmentacji w IPv6 są liczone w 8 bajtach, a nie w 4 bajtach, dlatego fragment może przenosić tylko ładunek będący wielokrotnością 8 bajtów w przypadku IPv6.