Ordre des octets réseau

8

Selon l'ordre des gros octets endiens ou l'ordre des octets du réseau, les bits sont transmis dans cet ordre: les bits 0-7 en premier, puis les bits 8-15, puis 16-23 et les bits 24-31 en dernier. Cela signifie-t-il que les bits de la version, de l'identification, du TTL, etc. vont d'abord, puis les bits des champs suivants?

entrez la description de l'image ici

MUSR
la source

Réponses:

6

Il y a une confusion ici. L'ordre des octets du réseau ne spécifie pas comment les bits sont transmis sur le réseau. Il spécifie comment les valeurs sont stockées dans des champs multi-octets.

Exemple :

Le champ Longueur totale est composé de deux octets. Il spécifie en octets la taille du paquet.

Disons que nous avons la valeur 500 pour ce champ. En utilisant l'ordre des octets du réseau, il sera vu sur le fil comme celui-ci, étant transmis par transmission de gauche à droite:

00000001 11110100

Si nous utilisions le petit format endian, il aurait été vu sur le fil comme ceci:

11110100 00000001

Une fois le paquet entier construit, les bits seront envoyés en commençant par le bit adressé le plus bas de l'en-tête (bit 0), de sorte que la transmission commencera avec le champ Version .

Un dernier point à souligner ici est que l'ordre des octets réseau est, comme vous l'avez mentionné, l'ordre Big Endian. Il a été choisi arbitrairement pour avoir un format commun pour tous les protocoles et implémentations de réseau.

dragosb
la source
1
Donc, dans le cas où le premier champ qui ira sur le fil est la version, puis HL, puis Type, puis Longueur totale, puis Identification, etc. Big endian et little endian déterminent uniquement la façon dont les bits sont stockés dans les champs d'en-tête.
MUSR
Oui, vous l'avez compris :)
dragosb
@MUSR: non, ils déterminent l'ordre dans lequel les octets d'un champ multi-octets sont transmis.
EML
3

Il est très facile de penser que les paquets Internet vont sur le fil d'une manière très simple de "port série". Dans la pratique, il n'y a rien de intrinsèquement sériel à ce sujet.

Si vous pensez à certains détails de l'interface, cela pourrait être plus clair:

  • Considérez le port parallèle IP, qui envoie en fait les données 4 bits à la fois sur quatre fils. https://en.wikipedia.org/wiki/Parallel_Line_Internet_Protocol
  • Le 100baseTX réel brouille les blocs de 4 bits et les envoie en série de 5 bits, mais les données d'origine ne sont pas visibles dans la sortie, donc la question sur l'ordre dans lequel ils vont n'a pas de réponse. https://en.wikipedia.org/wiki/4B5B
  • Lorsque vous envoyez un paquet via une interface de bouclage, il peut être copié à l'intérieur du bus 64 bits de l'ordinateur à la fois; ou bien simplement par remappage de la mémoire qui serait vraiment un paquet entier en parallèle.

Bien sûr, le port parallèle IP n'est pas commun, mais il illustre le point; les deux autres sont omniprésents.

J'espère que cela pourra aider

Jonathan.

jonathanjo
la source
2

D'autres protocoles peuvent être différents, mais Ethernet transmet d'abord l' octet / octet le plus significatif et d'abord dans chaque octet le bit le moins significatif . Ainsi, un champ de 16 bits est transmis 8-9-10-11-12-13-14-15-0-1-2-3-4-5-6-7 (0 = bit le moins significatif, 15 = le plus peu significatif). Vérifiez les clauses 3.1.1, 3.2.6 et 3.3 de l'IEEE 802.3.

(Il s'agit d'un Ethernet purement série - selon la couche physique, jusqu'à huit bits peuvent être transférés simultanément. De plus, l'ordre des bits ne s'applique qu'à la couche 1 non codée.)

IPv4 utilise également l'octet le plus significatif en premier, vérifiez RFC 791. Cependant, la numérotation dans les RFC IETF est dans l'ordre de transmission avec la numérotation des bits en sens inverse vers Ethernet : Bit 0 = bit le plus significatif = transmis en premier (là où cela n'est pas défini autrement).

Zac67
la source
Vous avez confondu les octets et l'ordre des bits, il devrait être: 7-6-5-4-3-2-1 15-14-13-12-11-10-9-8 le premier octet est 0-7, le 7e bit étant le moins important.
Gopoi
@Gopoi Si vous numérotez les bits de cette façon, vous avez raison. Cependant, "0" est généralement le bit le moins significatif (dernier sous forme écrite humaine) et "15" est le bit le plus significatif (premier sous forme écrite humaine) - selon leur puissance de deux valeurs.
Zac67
J'ai toujours pensé à la numérotation des bits comme l'ordre de transmission, car les en-têtes RFC sont affichés ainsi. Plus vous en savez!
Gopoi