Heim > Artikel > Betrieb und Instandhaltung > Was ist das Prinzip der Fragmentierung und Assemblierung von IP-Datagrammen?
Wenn ein Host Daten an einen anderen Host sendet, müssen die Daten über mehrere Routing-Ebenen weitergeleitet werden. Der Weiterleitungsprozess von IP auf der Routing-Ebene ist relativ kompliziert. Wie wird das vom Zielhost gesendete Datagramm verarbeitet?
Zuerst müssen wir das Format des Datagramms verstehen:
IP-Weiterleitung und -Steuerung werden durch den Header des IP-Datagramms bestimmt
Der Wert der 4-Bit-Header-Länge wird in Einheiten von 4 Bytes angegeben Mindestwert Es ist 5, was bedeutet, dass die minimale Header-Länge 4x5=20 Bytes beträgt, was dem IP-Header ohne Optionen entspricht. Der durch die 4-Bit-Energietabelle dargestellte Maximalwert beträgt 15, was bedeutet, dass die maximale Header-Länge beträgt ist 60 Wörter. Abschnitt
Das 8-Bit-TOS-Feld enthält 3 Bits, die zur Angabe der Priorität des IP-Datagramms verwendet werden (derzeit veraltet), und 4 Bits, die optionale angeben, einschließlich der minimalen Verzögerung, des maximalen Durchsatzes und der maximalen Zuverlässigkeit des Servicetyp, Geschlecht und Mindestkosten, und die Gesamtzahl der Bits ist immer 0. Die Gesamtlänge von 16 Bit ist die Anzahl der Bytes des gesamten Datagramms (einschließlich IP-Header und IP-Layer-Nutzlast). Jedes Mal, wenn ein IP-Datagramm übertragen wird, wird die 16-Bit-Kennung um 1 erhöht, was zum Fragmentieren und erneuten Zusammensetzen des Datagramms verwendet werden kann.
3-Bit-Flag und 13-Bit-Slice-Offset für das Slicing. TTL (Time to live) wird wie folgt verwendet
:Der Quellhost legt eine Überlebenszeit für das Datenpaket fest, z. B. 64. Jedes Mal, wenn es einen Router passiert
, verringert es den Wert um 1. Wenn dies der Fall ist Wenn das Netzwerk des Zielhosts nach einer zu langen Zeit immer noch nicht gefunden wird, wird das Paket verworfen. Daher ist die Einheit dieser Überlebenszeit nicht Sekunden, sondern Hops. Das Protokollfeld gibt an, ob das Protokoll der oberen Schicht TCP, UDP, ICMP oder IGMP ist.
Dann gibt es noch die Prüfsumme, die nur den IP-Header überprüft, und das übergeordnete Protokoll ist für die Datenüberprüfung verantwortlich.
Die IP-Adresslänge von IPv4 beträgt 32 Bit.
Im IP-Datagramm beträgt die Gesamtlänge ein 16-Bit-Feld, und die maximale Länge eines Datagramms beträgt 2^16-1. Obwohl das längstmögliche Datagramm die Übertragungseffizienz verbessern kann, überschreitet es selten 1500 Bytes Da es hier 1500 Bytes überschreitet, wird davon ausgegangen, dass dieses Datagramm fragmentiert werden sollte. Nachdem das IP-Datagramm fragmentiert wurde, bildet jedes Fragment ein Paket mit einem IP-Header und wird unabhängig weitergeleitet. Nach der Ankunft am Zielhost verarbeitet die IP-Schicht des Zielhosts alle empfangenen Fragmente, bevor sie an die Transportschicht übertragen werden werden wieder zu einem Datagramm zusammengesetzt.
1. IP-Fragmentierungsprinzip:
Der Prozess der Fragmentierung und Neuzusammensetzung ist für die Transportschicht erst dann möglich, wenn er die nächste Station erreicht neu zusammengesetzt und durch die IP-Schicht des Ziels vervollständigt. Das fragmentierte Datagramm kann bei Bedarf erneut fragmentiert werden. sodass bei der Assemblierung die gleichen IP-Datenpaketfragmente identifiziert werden können. Im IP-Header zeichnet die 16-Bit-Identifikationsnummer eindeutig die ID eines IP-Pakets auf, und IP-Fragmente mit derselben ID werden wieder zusammengesetzt, während der 13-Bit-Fragment-Offset die Position eines IP-Fragments relativ zum gesamten Paket aufzeichnet ; Das 3-Bit-Flag in der Mitte dieser beiden Tabellen markiert, ob sich hinter diesem Fragment neue Fragmente befinden. Der Empfänger kann die IP-Daten mithilfe der in diesen drei Feldern bereitgestellten Informationen neu zusammensetzen. Dabei handelt es sich um alle Informationen, die die IP-Fragmentierung ausmachen.
(1) Die Rolle des Flag-Feldes
0 DF MF
Das Flag-Feld hat drei Ziffern, das höchste Bit ist 0, dieser Wert muss in alle Gruppen kopiert werden
Der Wert „Nicht fragmentieren“ (DF) muss sein kopiert. DF=1 bedeutet, dass der empfangende Host das Paket nicht fragmentieren kann. Wenn das Paket nicht fragmentiert werden kann, seine Länge jedoch die MTU überschreitet, kann das Paket nur verworfen werden und es muss eine ICMP-Fehlermeldung verwendet werden, um den Quellhost zu benachrichtigen. DF=0 bedeutet, dass es fragmentiert werden kann
Fragmentierung (MF) gibt an, ob das Fragment das letzte Fragment ist, MF=1 bedeutet, dass das akzeptierte Fragment nicht das letzte Fragment ist, MF=0 bedeutet, dass das akzeptierte Fragment das letzte Fragment ist Das absichtliche Senden einiger IP-Fragmente anstelle aller Fragmente führt dazu, dass der Zielhost immer darauf wartet, dass die Fragmente verbraucht werden und Systemressourcen belegen.
2. MTU-Prinzip (Maximum Transmission Unit)
Wenn zwei entfernte CPs miteinander verbunden sind, müssen ihre Daten viele Router und verschiedene Netzwerkmedien passieren, um das andere Ende zu erreichen
, verschiedene Medien im Netzwerk. Die MTUs sind einfach unterschiedlich wie ein langer Abschnitt einer Wasserleitung, der aus Wasserrohren unterschiedlicher Dicke (unterschiedliche MTU) besteht. Die maximale Wassermenge, die durch diesen Abschnitt der Wasserleitung fließt, wird durch die dünnste Wasserleitung in der Mitte bestimmt.
Für die oberen Protokolle der Netzwerkschicht (hier nehmen wir den TCP/IP-Protokollcluster als Beispiel) ist ihnen die Dicke der Wasserleitungen egal, weil sie denken, dass es eine Frage des Netzwerks ist. Auf der Netzwerkschicht erkennt das IP-Protokoll die Größe jedes vom Protokoll der oberen Schicht übertragenen Datenpakets und bestimmt anhand der MTU-Größe der Maschine, ob es fragmentiert werden muss. Der größte Nachteil von Sharding besteht darin, dass es die Übertragungsleistung verringert und die Aufteilung von Aufgaben, die einmal erledigt werden können, in mehrere Prozesse erfordert. Daher achten die höheren Schichten des Netzwerks (Implementierung der Transportschicht) häufig darauf, da einige höhere Schichten aus bestimmten Gründen möglicherweise erfordern, dass die Pakete nicht fragmentiert werden können, und der Index dem Header der IP eine Beschriftung hinzufügt Datagramm. :DF Wenn ein IP-Datenpaket über ein großes Netzwerksegment übertragen wird und die MTU kleiner als das Datenpaket ist, verwirft das Weiterleitungsgerät das Datenpaket entsprechend der Situation. Dann wird eine Fehlermeldung an den Absender zurückgegeben, was häufig zu Kommunikationsproblemen führt. Glücklicherweise beträgt die MTU der meisten Netzwerkverbindungen 1500 oder mehr. Bei UDP ist es egal, in welcher Reihenfolge die Datenpakete eintreffen ist richtig, daher stellt UDP im Allgemeinen keine großen Anforderungen an die Fragmentierung. Bei TCP ist die Reihenfolge der Datenpakete sehr wichtig Fehler während des Übertragungsprozesses, daher stellen einige TCP-Anwendungen Anforderungen an die Fragmentierung – sie können nicht fragmentiert werden Um die beste Übertragungsleistung zu erzielen, handelt das TCP-Protokoll beim Verbindungsaufbau normalerweise den MSS-Wert beider Parteien aus. Dieser Wert wird bei der Implementierung des TCP-Protokolls durch MTU ersetzt IP-Datenpaket) 20 Bits und der Header des TCP-Datensegments 20 Bits, daher beträgt die MSS-Größe häufig 1460. Beide Parteien bestimmen den maximalen MSS-Wert dieser Verbindung basierend auf dem bereitgestellten minimalen MSS-Wert
II
Ein unfragmentiertes Datagramm. Das Fragmentierungsinformationsfeld ist alle 0, das heißt, mehrere Fragmentierungsflags sind 0 und der Offset ist 0. Um ein Datagramm zu fragmentieren, müssen Sie die folgenden Schritte ausführen: (1) Überprüfen Sie das DF-Flag Überprüfen Sie, ob Fragmentierung zulässig ist. Wenn dieses Bit gesetzt ist, wird das Datagramm verworfen und ein ICMP-Fehler an die Quelle zurückgegeben. (2) Basierend auf dem MTU-Wert wird das Datenfeld in zwei oder Teilepaare unterteilt. Mit Ausnahme des letzten Datenteils, alles neu. Die Länge der Datenoption muss ein Vielfaches von 8 Bytes sein. Mit Ausnahme des letzten Datagramms sind für alle Fragmente mehrere Fragmentierungsflags gesetzt. (5) Das Fragment-Offset-Feld in jedem Fragment wird auf die Position gesetzt, die dieser Datenteil im ursprünglichen Datagramm einnimmt. Diese Position ist relativ zum Anfang des ursprüngliches unfragmentiertes Datagramm.(6) Wenn Optionen im ursprünglichen Datagramm enthalten sind, bestimmt das höherwertige Byte des Optionstypbytes, ob diese Informationen in alle fragmentierten Datagramme oder nur in das erste Datagramm kopiert werden.
(7) Legen Sie das Header-Feld und das Gesamtlängenfeld des neuen Datagramms fest.(8) Berechnen Sie das Prüfsummenfeld im Nachrichtenkopf neu.
Zu diesem Zeitpunkt werden diese fragmentierten Datagramme wie ein vollständiges IP-Datagramm weitergeleitet. Jedes Datagrammfragment kann sein Ziel über verschiedene Routen erreichen. Bei kleineren MTU-Routen können sie weiter fragmentiert werden
Auf dem Zielhost werden die Daten wieder zum ursprünglichen Datagramm zusammengesetzt und das vom sendenden Host festgelegte Identifikationsfeld sowie die Yuan-IP-Adresse und die Ziel-IP-Adresse im Datagramm werden zusammen verwendet. Der Fragmentierungsprozess ändert dieses Feld nicht 3. Zusammensetzen Um die Fragmente dieser Datagramme zu rekonstruieren, weist der empfangende Host einen Speicherpuffer zu, wenn das erste Fragment eintrifft. Dieser Host startet auch einen Timer. Wenn nachfolgende Fragmente des Datagramms eintreffen, werden die Daten an der durch den Fragment-Offset angegebenen Stelle in den Pufferspeicher kopiert, und wenn alle Fragmente angekommen sind, wird das vollständige, unfragmentierte Original-Datagramm wiederhergestellt. Wenn der Timer abläuft und der Shard in einem nicht genehmigten Zustand verbleibt, werden die Daten nicht beibehalten. Der Anfangswert dieses Timers ist der Lebensdauerwert des IP-Datagramms. Er ist abhängig von der Implementierung und kann bei einigen Implementierungen konfiguriert werden. ZusammensetzungsschrittAuf der Empfangsseite setzt ein vom Absender gesendetes Original-IP-Datenpaket alle Fragmente wieder zusammen, bevor es an das Protokoll der oberen Schicht übermittelt werden kann. Jedes neu zusammenzusetzende IP-Datagramm verwendet eine IPQ-Struktur zur Darstellung
In Um die Zusammenstellung von Fragmenten effektiv zu verbessern, muss die zum Speichern von Fragmenten verwendete Struktur die folgenden Punkte erfüllen
(1) Eine Gruppe von Paketen eines bestimmten Datagramms schnell lokalisieren
(2) Zu einem bestimmten Paket gehören. Neue Fragmente schnell in ein einfügen Gruppe von Fragmenten eines Datagramms
(3) Bestimmen Sie effektiv, ob alle Fragmente eines Datagramms empfangen wurden
(4) Verfügen Sie über einen Reassembly-Timeout-Mechanismus. Wenn die Reassemblierung vor Ablauf des Timeouts abgeschlossen ist, werden alle Inhalte des Datagramms abgeschlossen gelöscht werden
Das obige ist der detaillierte Inhalt vonWas ist das Prinzip der Fragmentierung und Assemblierung von IP-Datagrammen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!