17

W tej chwili przeglądam slajdy sieciowe i zastanawiałam się, czy ktoś może mi pomóc z koncepcją fragmentacji i ponownego złożenia.Fragmentacja i ponowny montaż IP

enter image description here

mogę zrozumieć, jak to działa, a mianowicie jak datagramy są podzielone na mniejsze kawałki, ponieważ łącza sieciowe mają MTU. Jednak przykład na obrazie jest mylący.

Tak więc pierwsze dwie sekcje mają długość 1500, ponieważ jest to MSU, ale czy nie powinno to oznaczać, że ostatnia powinna mieć 1000 (w sumie 4000 bajtów), a nie 1040? Skąd pochodzą te dodatkowe 40 bajtów? Domyślam się, że ponieważ dwa poprzednie fragmenty miały nagłówek 20 bajtów, to dodatkowe 40 bajtów danych musiało gdzieś trafić, więc dotrze do ostatniego fragmentu?

Fragflag w zasadzie oznacza, że ​​istnieje inny fragment, więc wszystkie będą miały Fragflag o wartości 1 oprócz ostatniego fragmentu, który będzie na zero. Jednak nie rozumiem, czym jest offset ani jak jest on obliczany. Dlaczego pierwszy offset wynosi zero? Dlaczego podzieliliśmy bajty w polu danych (1480) na 8, aby uzyskać drugie przesunięcie? Skąd się wzięło to 8? Poza tym, zakładam, że każde przesunięcie fragmentów wzrośnie tylko o tę wartość?

Na przykład pierwszy fragment będzie miał przesunięcie 0, drugie 185, trzecie 370 i czwarte 555? (370 + 185)

Dzięki za pomoc!

Odpowiedz

14

W każdym pakiecie znajduje się 20-bajtowy nagłówek. Zatem oryginalny pakiet zawiera 3 980 bajtów danych. Fragmenty zawierają 1480, 1480 i 1020 bajtów danych. 1480 + 1480 + 1020 = 3980

Każdy bit w nagłówku jest cenny. Dzielenie przesunięcia o 8 pozwala mu zmieścić 13 bitów zamiast 16. Oznacza to, że każdy pakiet, ale ostatni, musi zawierać liczbę bajtów danych, która jest wielokrotnością 8, co nie stanowi problemu.

+1

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

+0

Zaktualizuję odpowiedź. –

+0

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

0

rozmiar przesunięcia wynosi 13 bitów w nagłówku IP, ale potrzebujemy 16 bitów, jak w najgorszym przypadku. Więc używamy współczynnika skalowania wynoszącego 8 tj. (2^16/2^13).

14

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). *

0

te nie są dodatkowe bity ale całkowita długość ostatniego fragmentu . jak 1500 to MTU, oznacza to, że może być 1500 bajtów danych w jednym fragmencie z nagłówkiem. Nagłówek jest dołączany do każdego fragmentu. to znaczy, że w części jesteśmy w stanie wysłać 1500-20 = 1480 bajtów danych. jest podany tam jest datagram 4000B .datagram to nic innego jak pakiet enkapsulacji danych w warstwie sieci. Tak więc łączne dane, które musimy wysłać to 4000-20 = 3980. następnie jest dzielony na 3 części (ceil (3980/1480)), każda o długości odpowiednio 1480, 1480, 1020. dlatego gdy nagłówek 20B jest dołączany do ostatniego fragmentu, jego długość zmienia się na 1020 + 20 = 1040.

Powiązane problemy