Netzwerkbyte-Reihenfolge

8

Entsprechend der Big-Endian-Bytereihenfolge oder der Netzwerkbytereihenfolge werden die Bits in dieser Reihenfolge übertragen: zuerst die Bits 0-7, dann die Bits 8-15, dann 16-23 und zuletzt die Bits 24-31. Bedeutet dies, dass zuerst Bits aus Version, Identifikation, TTL usw. und dann Bits aus den nächsten Feldern verwendet werden?

Geben Sie hier die Bildbeschreibung ein

MUSR
quelle

Antworten:

6

Hier herrscht Verwirrung. Die Netzwerkbyte-Reihenfolge gibt nicht an, wie Bits über das Netzwerk übertragen werden. Es gibt an, wie Werte in Mehrbytefeldern gespeichert werden.

Beispiel :

Das Feld Gesamtlänge besteht aus zwei Bytes. Es gibt in Bytes die Größe des Pakets an.

Nehmen wir an, wir haben den Wert 500 für dieses Feld. Bei Verwendung der Netzwerkbyte-Reihenfolge wird dies wie folgt über das Kabel angezeigt und von links nach rechts übertragen:

00000001 11110100

Wenn wir das Little-Endian-Format verwenden würden, wäre es wie folgt über den Draht gesehen worden:

11110100 00000001

Nachdem das gesamte Paket erstellt wurde, werden die Bits beginnend mit dem niedrigsten adressierten Bit des Headers (Bit 0) gesendet, sodass die Übertragung mit dem Feld Version beginnt .

Ein letzter Punkt, den Sie hier ansprechen müssen, ist, dass die Netzwerkbyte-Reihenfolge, wie Sie erwähnt haben, die Big-Endian-Reihenfolge ist. Dies wurde willkürlich gewählt, um ein gemeinsames Format für alle Netzwerkprotokolle und -implementierungen zu haben.

Dragosb
quelle
1
Wenn also das erste Feld, das auf Draht geht, die Version ist, dann HL, dann Typ, dann Gesamtlänge, dann Identifikation und so weiter. Big Endian und Little Endian bestimmen nur, wie die Bits in den Header-Feldern gespeichert werden.
MUSR
Ja, du hast es :)
Dragosb
@MUSR: Nein, sie bestimmen die Reihenfolge, in der Bytes in einem Mehrbytefeld übertragen werden.
EML
3

Es ist sehr leicht zu glauben, dass Internetpakete auf eine sehr einfache Art der "seriellen Schnittstelle" über das Kabel übertragen werden. In der Praxis ist nichts von Natur aus seriell.

Wenn Sie über einige Details der Benutzeroberfläche nachdenken, wird dies möglicherweise klarer:

  • Betrachten Sie die IP des parallelen Anschlusses, die die Daten tatsächlich 4-Bit gleichzeitig über vier Drähte sendet. https://en.wikipedia.org/wiki/Parallel_Line_Internet_Protocol
  • Tatsächlich 100baseTX verschlüsselt 4-Bit-Blöcke und sendet sie seriell als 5-Bit-Blöcke, aber die Originaldaten sind in der Ausgabe nicht sichtbar, sodass die Frage, in welcher Reihenfolge sie ablaufen, keine Antwort hat. https://en.wikipedia.org/wiki/4B5B
  • Wenn Sie ein Paket über eine Loopback-Schnittstelle senden, wird es möglicherweise jeweils 64-Bit in den Bus des Computers kopiert. oder in der Tat nur durch Neuzuordnung des Speichers, was wirklich ein ganzes Paket parallel wäre.

Natürlich ist die IP von parallelen Ports nicht üblich, aber es veranschaulicht den Punkt; Die anderen beiden sind allgegenwärtig.

Ich hoffe, das hilft

Jonathan.

Jonathanjo
quelle
2

Andere Protokolle können unterschiedlich sein, aber Ethernet überträgt zuerst das wichtigste Oktett / Byte und innerhalb jedes Bytes das niedrigstwertige Bit zuerst . Es wird also ein 16-Bit-Feld übertragen. 8-9-10-11-12-13-14-15 - 0-1-2-3-4-5-6-7 (0 = am wenigsten signifikantes Bit, 15 = am meisten signifikantes Bit). Überprüfen Sie die IEEE 802.3-Abschnitte 3.1.1, 3.2.6 und 3.3.

(Dies gilt für rein serielles Ethernet. Abhängig von der physischen Schicht können bis zu acht Bits gleichzeitig übertragen werden. Außerdem gilt die Bitreihenfolge nur für die nicht codierte Schicht 1.)

IPv4 verwendet auch zuerst das höchstwertige Oktett, überprüfen Sie RFC 791. Die Nummerierung in IETF-RFCs erfolgt jedoch in der Reihenfolge der Übertragung, wobei die Bitnummerierung umgekehrt zu Ethernet erfolgt : Bit 0 = höchstwertiges Bit = zuerst übertragen (sofern nicht anders definiert).

Zac67
quelle
Sie haben Oktette und Bitreihenfolge verwechselt: 7-6-5-4-3-2-1 15-14-13-12-11-10-9-8 Das erste Oktett ist 0-7, das 7. Bit ist das geringste von Bedeutung.
Gopoi
@ Gopoi Wenn Sie die Bits so nummerieren, haben Sie Recht. Normalerweise ist "0" jedoch das niedrigstwertige Bit (zuletzt in menschlicher Schriftform) und "15" das höchstwertige Bit (zuerst in menschlicher Schriftform) - entsprechend ihrer Potenz von zwei Werten.
Zac67
Ich habe mir die Bitnummerierung immer als Übertragungsreihenfolge vorgestellt, da die RFC-Header so angezeigt werden. Je mehr du weisst!
Gopoi