Mam datagram 3600 bajtów, MTU 800 bajtów, więc moja liczba fragmentów wynosi 5.
Odkryłem, że pierwsze 4 fragmenty będą miały 800 bajtów (w tym 20B dla nagłówka IP), a ostatnie 480 (łącznie z nagłówkiem IP).
Przesunięcie pierwszego wynosi oczywiście 0, ale kiedy obliczam przesunięcie drugiego fragmentu, otrzymuję to:
fragment 2 offset = 780 Bytes / 8 = 97.5
Jak poradzić sobie z uzyskiwaniem liczby niecałkowitej? Czy mogę to zrobić?
networking
ip
mighty_squash
źródło
źródło
Odpowiedzi:
Okej, wymyśliłem, że powinieneś wybrać rozmiar ładunku, który można podzielić przez 8 i pozostawić pozostałe miejsce na nagłówek.
Na moje pytanie otrzymywałem 97,5, ponieważ 780 nie można podzielić przez 8, więc zmniejszyłem swój ładunek do 776, co podzielone przez 8 daje mi 97.
Następnie używam tej wartości do obliczenia przesunięcia fragmentu.
Jeśli masz jednostkę MTU, która wynosi 800 bajtów, przesunięcie dla drugiego fragmentu wynosi oczywiście 97, a sposób, w jaki działa to na rzeczywisty pakiet, jest następujący:
źródło