Fragmentacja i ponowny montaż zostały wyjaśnione wyłącznie w specyfikacji RFC 791. Należy przejrzeć Internet Protocol Specification RFC. RFC zawiera różne sekcje wyjaśniające fragmentację i ponowny montaż próbki. Wszystkie twoje wątpliwości i pytania są w nim dobrze zaspokojone.
Ans 1: Odnośnie długości pakietu: oryginalny pakiet zawiera 4000 bajtów. Ten pakiet jest w pełni pakietem IP, a więc zawiera również nagłówek IP. W ten sposób długość ładunku wynosi faktycznie 4000 - (długość nagłówka IP, np. 20).
Ładunek rzeczywista długość = 4000 - 20 = 3980
teraz pakiet jest podzielona ze względu na fakt, że długość jest większa niż MTU (1500B).
Tym samym pierwszy pakiet zawiera 1500 bajtów, które zawierają nagłówek IP + ułamek ładunku.
1500 = 20 (nagłówka IP) + 1480 (Ładunek danych)
Podobnie dla drugiego pakietu.
Trzeci pakiet powinien zawierać pozostałość pozostały DATA (3980 - 1480 -1480) = 1020
zatem długość pakietu 20 (nagłówka IP) + 1020 (payload) = 1040
Ans 2 : Przesunięcie to adres lub lokalizator, od którego dane zaczynają się w odniesieniu do oryginalnego ładunku danych. Dla IP, ładunek danych zawiera wszystkie dane, które są po nagłówku IP i nagłówku Options. W ten sposób system/router przejmuje ładunek i dzieli go na mniejsze części i utrzymuje ścieżkę przesunięcia w odniesieniu do oryginalnego pakietu, aby można było ponownie zmontować.
Jak podano na stronie 12. RFC
"Fragment przesunięcia pole pokazuje odbiornik położenia fragmentu w pierwotnym datagram. Fragment przesunięcie i długość określa część oryginalnego datagram objętym ten fragment Znacznik "więcej fragmentów" wskazuje (przez zresetowanie) ostatni fragment, które dostarczają informacji wystarczających do ponownego złożenia datagramów: "
Przesunięcie fragmentu jest mierzone w jednostkach po 8 bajtów. Ma 13 bitowe pole w nagłówku IP. Jak powiedziano na stronie RFC 17
„To pole wskazuje, gdzie pojawia się na datagram Fragment belongs.The fragmentu przesunięcia jest mierzony w jednostkach 8 oktetów (64 bity). Pierwszy fragment ma przesunięcie zerowe.”
Tak więc, w pytaniu, skąd się wzięło to 8, zdefiniowano standard dla specyfikacji protokołu IP, w którym 8 oktetów przyjmuje się jako jedną wartość. Pomaga nam to również w przesyłaniu dużych pakietów.
Strona 28 z RFC pisze: * Fragmenty są liczone w jednostkach po 8 oktetów. Strategia fragmentacji jest zaprojektowana tak, aby niefragmentowany datagram miał wszystkie informacje o fragmentacji zera (MF = 0, przesunięcie fragmentu = 0). Jeśli datagram internetowy jest pofragmentowany, jego część danych musi być zerwana na granicach 8 oktetów. Format ten pozwala na 2 ** 13 = 8192 fragmentów po 8 oktetów każdy dla łącznej liczby 65 536 oktetów. Należy zauważyć, że to jest zgodne z całkowitą długość pola Datagram (oczywiście nagłówek jest liczone w całkowitej długości nie fragmentów). *
Dzięki! Odpowiedziało to wyraźnie na pierwszą część mojego pytania, ale co do drugiej części, dlaczego dzielimy 1480 przez 8, aby uzyskać przesunięcie? – JimmyK
Zaktualizuję odpowiedź. –
Wielkie dzięki, bardzo, że wszystko odpowiada! Zastanawiam się jednak, czy ZAWSZE dzielimy się przez 8? Czy są jakieś okoliczności, które mogą spowodować, że podzielimy się przez inny numer? – JimmyK