17

Ich gehe gerade durch meine Networking-Folien und fragte mich, ob mir jemand mit dem Konzept der Fragmentierung und Remontage helfen könnte.IP Fragmentierung und Reassembly

enter image description here

Ich verstehe, wie es funktioniert, und zwar, wie Datagramme in kleinere Stücke geteilt werden, da Netzwerk-Links eine MTU haben. Aber das Beispiel auf dem Bild verwirrte mich.

Also die ersten beiden Abschnitte zeigen eine Länge von 1500, weil dies die MSU ist, aber sollte dies nicht bedeuten, dass der letzte 1000 (für insgesamt 4000 Bytes) und nicht 1040 hätte? Woher kamen diese zusätzlichen 40 Bytes? Meine Vermutung ist, dass, weil die vorherigen zwei Fragmente beide einen Header von 20 Bytes hatten, diese zusätzlichen 40 Bytes an Daten benötigt wurden, um irgendwohin zu gehen, so dass es im letzten Fragment ankommen wird?

Fragflag bedeutet im Wesentlichen, dass es ein anderes Fragment gibt, so dass alle von ihnen ein Fragflag von 1 haben, mit Ausnahme des letzten Fragments, das bei Null ist. Allerdings verstehe ich nicht, was Offset ist oder wie es berechnet wird. Warum ist der erste Offset bei Null? Warum haben wir die Bytes im Datenfeld (1480) durch 8 geteilt, um den zweiten Offset zu erhalten? Woher kam diese 8? Abgesehen davon nehme ich an, dass jeder Fragment-Offset nur um diesen Wert zunimmt.

Zum Beispiel hat das erste Fragment einen Offset von 0, der zweite 185, der dritte 370 und der vierte 555? (370 + 185)

Danke für jede Hilfe!

Antwort

14

In jedem Paket befindet sich ein 20-Byte-Header. Das ursprüngliche Paket enthält also 3980 Datenbytes. Die Fragmente enthalten 1480, 1480 und 1020 Datenbytes. 1480 + 1480 + 1020 = 3980

Jedes Bit im Header ist wertvoll. Teilen des Offset durch 8 ermöglicht es in 13 Bits anstelle von 16 zu passen. Dies bedeutet, dass jedes Paket außer dem letzten eine Anzahl von Datenbytes enthalten muss, die ein Vielfaches von 8 ist, was kein Problem darstellt.

+1

Danke! Das hat den ersten Teil meiner Frage klar beantwortet, aber was den zweiten Teil betrifft, warum teilen wir 1480 durch 8, um den Offset zu bekommen? – JimmyK

+0

Ich werde die Antwort aktualisieren. –

+0

Vielen Dank, das beantwortet alles! Ich frage mich nur, teilen wir IMMER immer durch 8? Gibt es Umstände, die dazu führen würden, dass wir uns durch eine andere Nummer teilen? – JimmyK

0

Die Offset-Größe beträgt 13 Bit im IP-Header, aber wir benötigen 16 Bit wie im schlimmsten Fall. Wir verwenden also einen Skalierungsfaktor von 8, d. H. (2^16/2^13).

14

Die Fragmentierung und Reassembly wurde ausschließlich in der RFC 791 erklärt. Gehen Sie durch die Internet Protocol Specification RFC. Der RFC enthält verschiedene Abschnitte, die die Fragmentierung und das Zusammensetzen der Beispiele erläutern. Alle deine Zweifel und Fragen sind gut darin enthalten.

Ans 1: In Bezug auf die Länge des Pakets: Das ursprüngliche Paket enthält 4000 Bytes. Dieses Paket ist ein vollständiges IP-Paket und enthält daher auch den IP-Header. Somit ist die Nutzdatenlänge tatsächlich 4000 - (IP Header Length i. E. 20).

Actual Payload Length = 4000 - 20 = 3980

nun das Paket fragmentiert ist, aufgrund der Tatsache, dass die Länge größer als die MTU (1500 Bytes).

Also das erste Paket enthält 1500 Bytes, die IP-Header + Payload Fraction enthält.

1500 = 20 (IP-Header) + 1480 (Data Payload)

ähnlich für das andere Paket.

das dritte Paket wird über Daten enthält Zustand Links (3980 - 1480 -1480) = 1020

Somit Länge des Pakets 20 (IP Header) + 1020 (Payload) = 1040

Am 2 : Der Offset ist die Adresse oder der Locator, von wo aus die Daten mit Bezug auf die ursprüngliche Datennutzlast beginnen. Für IP umfasst die Datennutzlast alle Daten, die hinter dem IP-Header und dem Options-Header stehen. Somit nimmt das System/Router die Nutzlast und teilt sie in kleinere Teile auf und behält die Spur des Versatzes mit Bezug auf das ursprüngliche Paket bei, so dass eine Wiederzusammenfügung erfolgen kann.

Wie in der RFC Seite gegeben 12.

"Das Fragment-Offset-Feld sagt dem Empfänger die Position eines Fragments in dem ursprünglichen Datagramm. Der Fragment-Offset und Länge durch den Teil des ursprünglichen Datagramms abgedeckt bestimmen Dieses Fragment stellt das letzte Fragment (durch Zurücksetzen) dar. Diese Felder stellen ausreichende Informationen zum erneuten Zusammensetzen von Datagrammen bereit.

Der Fragment-Offset wird in Einheiten von je 8 Byte gemessen. Es hat 13 Bit Feld im IP-Header. Wie gesagt in der RFC Seite 17

"zeigt dieses Feld in dem Datagramm in dem dieses Fragmente Offset gehört.Verfahren Fragment in Einheiten von 8 Bytes gemessen wird (64 Bits). Das erste Fragment Null-Offset hat."

So, wie Sie in der Frage gefragt haben, woher diese 8 kam, ist es der Standard, der für die IP-Protokollspezifikation definiert wurde, wo 8 Oktette als ein Wert genommen werden. Dies hilft uns auch dabei, große Pakete zu übertragen.

Seite 28 des RFC schreibt: * Fragmente sind in Einheiten von 8 Bytes gezählt. Die Fragmentierungsstrategie ist so ausgelegt, dass ein unfragmentiertes Datagramm alle Zertrümmerungsinformationen aufweist (MF = 0, Fragment-Offset = 0). Wenn ein Internet-Datagramm fragmentiert ist, muss sein Datenteil an 8 Oktettgrenzen unterbrochen sein. Dieses Format ermöglicht 2 ** 13 = 8192 Fragmente von 8 Oktetts für jeweils insgesamt 65.536 Oktette. Beachten Sie, dass dies mit der dem Datagramm Gesamtlängenfeld (natürlich der Header in der Gesamtlänge gezählt wird und nicht in den Fragmenten). *

0

das sind keine zusätzliche Bits, aber die Gesamtlänge des letzten Fragments . als 1500 ist MTU das bedeutet, dass 1500 Byte Daten in einem Fragment einschließlich Kopfzeile sein können. Header wird mit jedem Fragment angehängt. Das bedeutet, dass wir in der Lage sind, 1500-20 = 1480 Byte Daten zu senden. es ist da ist 4000B Datagramm .datagram ist nichts anderes als eine Paketkapselung von Daten im Netzwerk layer.so die Gesamtdaten, die wir senden müssen, ist 4000-20 = 3980. dann wird es in 3 Teile (ceil (3980/1480)) jeweils von Länge 1480, 1480, 1020 fragmentiert. Wenn also der 20B-Header an das letzte Fragment angehängt wird, wird seine Länge 1020 + 20 = 1040.

Verwandte Themen