Heim >häufiges Problem >Was ist das Format des IP-Datagramms?
Das TCP/IP-Protokoll definiert ein im Internet übertragenes Paket, ein sogenanntes IP-Datagramm, das aus einem Header und Datenteilen besteht. Der erste Teil des Headers hat eine feste Länge von insgesamt 20 Bytes und wird von allen IP-Datagrammen benötigt. Nach dem festen Teil des Headers folgen einige optionale Felder, deren Länge variabel ist.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, Dell G3-Computer.
Das TCP/IP-Protokoll definiert ein im Internet übertragenes Paket, das als IP-Datagramm bezeichnet wird. Dabei handelt es sich um ein virtuelles Paket, das nichts mit Hardware zu tun hat und aus einem Header und Daten besteht. Die Länge ist festgelegt Insgesamt 20 Bytes werden von allen IP-Datagrammen benötigt. Dem festen Teil des Headers folgen einige optionale Felder, deren Länge variabel ist. Das IP-Protokoll bietet unzuverlässige verbindungslose Datagramm-Übertragungsdienste. Die von der IP-Schicht bereitgestellten Dienste werden durch die Kapselung realisiert und Entkapselung von Datagrammen durch die IP-Schicht. Das Format des IP-Datagramms ist in zwei Teile unterteilt: den Header-Bereich und den Datenbereich. Der Header-Bereich besteht aus verschiedenen Steuerinformationen, die für die korrekte Übertragung von High-Level-Daten hinzugefügt werden. Der Datenbereich enthält die Daten, die High-Level-Protokolle benötigen zu übermitteln.
Das Format des IP-Datagramms ist wie folgt:
Beachten Sie, dass sich in den in der obigen Abbildung gezeigten Daten das höchste Bit auf der linken Seite befindet und das niedrigste Bit auf der rechten Seite aufgezeichnet wird wird als 31 Bit aufgezeichnet. Bei der Übertragung von Daten im Netzwerk werden zuerst die Bits 0–7 übertragen, gefolgt von den Bits 8–15, dann den Bits 16–23 und schließlich den Bits 24–31. Da alle Binärzahlen im TCP/IP-Protokoll-Header bei der Übertragung über das Netzwerk in dieser Reihenfolge vorliegen müssen, wird sie als Netzwerk-Byte-Reihenfolge bezeichnet. Bei der tatsächlichen Programmierung müssen in anderen Formen gespeicherte Binärzahlen die entsprechenden Funktionen der Netzwerkprogrammier-API verwenden, um den Header vor der Übertragung der Daten in die Netzwerk-Byte-Reihenfolge umzuwandeln.
Die Funktionen jedes Felds des IP-Datagramms sind wie folgt:
1) Versionsnummer: Sie belegt eine 4-stellige Binärzahl und gibt die vom IP-Datagramm verwendete IP-Protokollversion an. Derzeit verwendet das Internet hauptsächlich das IP-Protokoll mit der Versionsnummer 4 der TCP/IP-Protokollsuite.
2) Header-Länge: belegt 4 Binärbits. Die Länge basiert auf einer 32-Bit-Binärzahl als Zähleinheit ist durch dieses Feld, wo es endet und wo es beginnt, Daten zu lesen. Für normale IP-Datagramme (ohne Optionen) beträgt der Wert dieses Feldes 5 (d. h. 20 Bytes lang).
3) Diensttyp (TOS, Art des Dienstes): Belegt 8 Binärbits und wird verwendet, um die Verarbeitungsmethode dieses Datagramms anzugeben. Die 8 Bits des Diensttypfelds sind in 5 Unterfelder unterteilt:
(1) – Je größer die Prioritätszahl (0-7), desto höher ist die Priorität des Datagramms. Router im Netzwerk können Prioritäten zur Überlastungskontrolle verwenden. Wenn beispielsweise im Netzwerk eine Überlastung auftritt, kann die Priorität von Datagrammen verwendet werden, um zu entscheiden, welches Datagramm ausgewählt werden soll.
(2) – Kurzes Verzögerungsbit D (Verzögerung): Wenn dieses Bit 1 ist, wird die Datagrammanforderung auf einem Kanal mit kurzer Verzögerung übertragen, und 0 zeigt eine normale Verzögerung an.
(3) – Hochdurchsatzbit T (Durchsatz): Wenn dieses Bit 1 ist, fordert das Datagramm die Übertragung auf einem Hochdurchsatzkanal an, 0 bedeutet normal.
(4) – Hochzuverlässiges Bit R (Zuverlässigkeit): Wenn dieses Bit 1 ist, fordert das Datagramm die Übertragung auf einem Hochzuverlässigkeitskanal an, 0 bedeutet normal.
(5) – reserviertes Bit.
In den meisten Fällen verarbeitet das derzeit im Internet verwendete TCP/IP-Protokoll kein TOS, aber in der tatsächlichen Programmierung gibt es spezielle Funktionen zum Festlegen jeder Domäne dieses Feldes. Einige wichtige Internetanwendungsprotokolle haben empfohlene TOS-Werte festgelegt:
Wie aus der obigen Tabelle ersichtlich ist, werden für Anwendungen, die direkt mit Benutzern interagieren, im Allgemeinen kurze Verzögerungen verwendet; für Anwendungen, die eine große Datenmenge erfordern Für Anwendungen wird im Allgemeinen ein hoher Durchsatz ausgewählt. Für Anwendungen, bei denen Datagramme Steuerinformationen übertragen müssen, wird im Allgemeinen eine hohe Zuverlässigkeit ausgewählt. Wenn TOS während der Lebensdauer des Datagramms nicht unterstützt wird, wird das TOS-Feld auf 0x00 gesetzt.
4) Gesamtlänge: Das Feld „Gesamtlänge“ umfasst 16 Binärbits und bezieht sich auf die Länge des gesamten IP-Datagramms (Header-Bereich + Datenbereich) in Bytes. Die Startposition und Länge des Dateninhalts im IP-Datagramm können anhand des Header-Längenfelds und des Gesamtlängenfelds berechnet werden. Da es sich bei der Länge dieses Feldes um eine 16-Bit-Binärzahl handelt, kann das theoretische IP-Datagramm bis zu 65536 Byte betragen (tatsächlich ist es aufgrund der Einschränkungen des physischen Netzwerks viel kleiner als dieser Wert).
5) Time to Live (TTL, Time to Live): Belegt 8 Binärbits und gibt die maximale Zeit an, die ein Datagramm im Netzwerk übertragen werden kann. In tatsächlichen Anwendungen wird das Lebensdauerfeld auf die maximale Anzahl von Routern eingestellt, die das Datagramm passieren kann. Der Anfangswert der TTL wird vom Quellhost festgelegt (normalerweise 32, 64, 128 oder 256) und ihr Wert wird um eins dekrementiert, sobald sie einen Router passiert, der sie verarbeitet. Wenn dieses Feld 0 ist, wird das Datagramm verworfen und eine ICMP-Nachricht gesendet, um den Quellhost zu benachrichtigen. Dadurch wird verhindert, dass das Datagramm beim Eintritt in eine Schleife endlos übertragen wird.
6) Protokollkennung der oberen Schicht: Das IP-Protokoll belegt 8 Binärbits und kann verschiedene Protokolle der oberen Schicht übertragen. Basierend auf der Protokollkennung kann das Ziel die empfangenen IP-Daten an das Protokoll der oberen Schicht wie TCP oder UDP senden, das die verarbeitet Nachricht. .
Häufig verwendete Internetprotokollnummern:
7) Prüfsumme: Sie belegt eine 16-Bit-Binärzahl und wird zur Überprüfung der Gültigkeit der Protokoll-Header-Daten verwendet, wodurch die Richtigkeit und Integrität des IP-Header-Bereichs sichergestellt werden kann während der Übertragung. Das Header-Prüfsummenfeld ist eine Prüfsumme, die auf der Grundlage des IP-Protokoll-Headers berechnet wird. Es berechnet nicht die Daten hinter dem Header.
Prinzip: Der Absender setzt zunächst das Prüfsummenfeld auf 0, führt dann eine Komplementsummenoperation für jede 16-Bit-Binärzahl im Header durch und speichert das Ergebnis im Prüfsummenfeld. Da der Empfänger während des Berechnungsprozesses die vom Sender in den Header eingefügte Prüfsumme berücksichtigt, sollte das Ergebnis der Berechnung des Empfängers nur Einsen sein, wenn während der Übertragung keine Fehler im Header auftreten.
8) Quelladresse: Belegt eine 32-Bit-Binärzahl und stellt die sendende IP-Adresse dar.
9) Zieladresse: Belegt eine 32-Bit-Binärzahl und drückt die Ziel-IP-Adresse aus.
======================IP-Datagramm-Fragmentierung und Neuzusammenstellung===================== ==
Maximale Übertragungseinheit:
Wenn IP-Datagramme im Internet übertragen werden, müssen sie möglicherweise mehrere physische Netzwerke durchlaufen, um von der Quelle zum Ziel übertragen zu werden. Verschiedene Netzwerke haben unterschiedliche physikalische Eigenschaften der Verbindungsschicht und des Mediums, daher gibt es bei der Übertragung von Daten eine Grenze für die maximale Länge des Datenrahmens. Dieser Grenzwert ist die Maximum Transmission Unit (MTU). Das Gleiche gilt für die Kommunikation zwischen ihnen Wenn zwei Hosts im Netzwerk vorhanden sind, wird der MTU-Wert des Netzwerks ermittelt und es liegt kein Fragmentierungsproblem vor. Fragmentierungsprobleme treten im Internet im Allgemeinen nur bei unterschiedlichen MTU-Werten auf. Da das Internet heutzutage hauptsächlich Router für Netzwerkverbindungen verwendet, wird die Sharding-Arbeit normalerweise von Routern übernommen.
Wenn die Kommunikation zwischen zwei Hosts über mehrere Netzwerke mit unterschiedlichen MTU-Werten läuft, ist der MTU-Engpass der kleinste MTU-Wert auf dem Kommunikationspfad, der als Pfad-MTU bezeichnet wird. Da das Routing nicht unbedingt symmetrisch ist (die Route von A nach B kann sich von der Route von B nach A unterscheiden), ist die Pfad-MTU nicht unbedingt in beide Richtungen konsistent. Die folgende Tabelle zeigt den MTU-Wert mehrerer häufig verwendeter Netzwerke.
Fragmentierung:
Der Vorgang der Aufteilung eines Datagramms in mehrere Datagramme zur Anpassung an die Netzwerkübertragung wird als Fragmentierung bezeichnet. Jedes fragmentierte IP-Datagramm kann den Zielhost über verschiedene Pfade erreichen.
Ein IP-Datagramm kann während der Übertragung fragmentiert sein oder auch nicht. Wenn es fragmentiert ist, hat das fragmentierte IP-Datagramm dieselbe Struktur wie das ursprüngliche IP-Datagramm ohne Fragmentierung, das heißt, es besteht ebenfalls aus zwei Teilen: IP-Header und IP-Datenbereich:
Fragmentiertes IP-Datagramm, der Datenbereich ist a Der Header ist ein kontinuierlicher Teil des ursprünglichen IP-Datagramm-Datenbereichs und eine Kopie des ursprünglichen IP-Datagramm-Headers. Es gibt jedoch zwei Hauptunterschiede zum ursprünglichen unfragmentierten IP-Datagramm-Header: Flags und Fragment-Offset:
(1)-Flag: Dort ist ein Feld namens „Flag“ im IP-Datagramm-Header, dargestellt durch eine dreistellige Binärzahl:
Do not fragment DF (Do not Fragment) Flag, wenn Wenn es auf 1 gesetzt ist, kann das Datagramm während der Übertragung nicht fragmentiert werden Beispielsweise kann der Befehl „ping“ für den Netzwerkkonnektivitätstest mit dem Parameter „-F“ so eingestellt werden, dass er während der Datenübertragung nicht fragmentiert. In diesem Fall können die Daten jedoch nicht über ein Netzwerk mit einer kleineren MTU übertragen werden.
Wenn das Flag „Fragment unfinished MF“ (More Fragment) auf 1 gesetzt ist, bedeutet dies, dass das Datagramm nicht das letzte Datagramm nach der Fragmentierung ist und das Bit des letzten Datagramms auf 0 gesetzt ist.
(2) – Fragment-Offset: Nachdem das IP-Datagramm fragmentiert wurde, wird die Position jedes Fragment-Datenbereichs im ursprünglichen IP-Datenbereich durch einen 13-Bit-Fragment-Offset dargestellt. In der obigen Abbildung beträgt der Offset von Fragment 1 0, der Offset von Fragment 3 1200. Tatsächlich wird der Offset in Einheiten von 8 Bytes berechnet , der Offset von Fragment 1 im IP-Datagramm ist 0; der Offset von Fragment 2 ist 75 und der Offset von Fragment 3 ist 150.
Reassemblierung:
Wenn das fragmentierte IP-Datagramm den endgültigen Zielhost erreicht, setzt der Zielhost jedes Fragment zusammen und stellt es im IP-Datagramm wieder her, als es vom Quellhost gesendet wurde. Dieser Vorgang wird als Reassemblierung des IP-Datagramms bezeichnet.
Im IP-Datagramm-Header wird die Identifikation durch eine 16-Bit-Binärzahl dargestellt, die jedes vom Host gesendete Datagramm eindeutig identifiziert. Wenn ein Datagramm fragmentiert ist, kopiert jedes Fragment nur den Wert des Felds „Identifikation“ des Datagramms, sodass alle Fragmente eines Datagramms dieselbe Identifikation haben.
Das Prinzip der Neuzusammensetzung von Datagrammen durch den Zielhost ist:
(1) – Anhand des Felds „Identifikation“ kann bestimmt werden, zu welchem IP-Datagramm das empfangene Fragment gehört
(2) – Anhand des Unterfelds „Unvollendete MF“ des Felds „Flag“ können Sie bestimmen, ob das Fragment das letzte Fragment ist;
(3) – Anhand des Felds „Offset“ können Sie feststellen, ob das Das Fragment befindet sich am ursprünglichen Speicherort des Datagramms.
Für mehr Computerwissen besuchen Sie bitte die FAQ-Kolumne!
Das obige ist der detaillierte Inhalt vonWas ist das Format des IP-Datagramms?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!