Ch. 4 — Le datagramme IPv4
L'en-tête RFC 791 champ par champ : Version, IHL, ToS devenu DiffServ, longueur totale, MTU et fragmentation, TTL, protocole, checksum, options — avec le décodage hexadécimal.
Retour sur la trame Wireshark
Dans la capture du chapitre 3, le datagramme IPv4 commence à l'octet 45 de la trame. Le
cours le décode intégralement — c'est l'exercice type d'examen :
brut : 45 00 01 05 59 a0 40 00 35 06 45 1d c3 53 22 30 c0 a8 00 0a
0x4 Version (IPv4)
0x5 Longueur d'en-tête : 5 mots de 32 bits = 20 octets
0x00 Type de service (ToS) / Différenciation de services (DiffServ)
0x0105 Longueur totale : 261 octets (20 d'en-tête + 241 de données)
0x59a0 Identifiant du datagramme
0x4000 Gestion de la fragmentation (0 / 1 / 0 / 0 / 0 0000 0000 0000)
0x35 TTL (53)
0x06 Protocole transporté (= TCP)
0x451d Somme de contrôle
0xC3532230 Adresse IP source (195.83.34.48)
0xC0a8000a Adresse IP destination (192.168.0.10)La méthode : découper octet par octet, puis replacer chaque groupe dans le schéma de l'en-tête ci-dessous.
Le schéma de l'en-tête (RFC 791)
0 4 8 16 19 31
+--------+--------+----------------+----------------+
|Version | IHL |Type de service | Longueur totale|
+--------+--------+----------------+----------------+
| ID datagramme |0|DF|MF| Position frag. |
+--------------------------+--+--+--+----------------+
| TTL | Protocole | Somme de contrôle |
+------------------------+--------------------------+
| Adresse IP source |
+-----------------------------------------------------+
| Adresse IP destination |
+-----------------------------------------------------+
| Options (facultatives) | Bourrage |
+-----------------------------------------------------+
| DATA (données utiles) |Version, IHL et longueur totale
Version (4 bits) vaut 4 pour IPv4. IHL (Internet Header Length) donne la longueur de l'en-tête en mots de 32 bits : minimum 5, soit 20 octets ; maximum 15, soit 60 octets — la différence accueille les options. La longueur totale compte le nombre d'octets tout compris, en-tête inclus : minimum théorique 20 octets (paquet sans données), maximum théorique 65 535 octets.
Le type de service : de ToS à DiffServ
À l'origine (RFC 791), le ToS tient sur 6 bits pour optimiser une caractéristique de bout
en bout : précédence (3 bits, de 000 « normal » à 111 « contrôle réseau »), puis délai,
débit, fiabilité, coût (P P P D T R C 0). Le champ est devenu DS (Differentiated
Services), définition identique en IPv6 : DSCP (6 bits, Differentiated Service Code
Point, RFC 2474/3260) et ECN (2 bits, Explicit Congestion Notification, RFC
3168/8311).
Fragmentation et MTU
La MTU (Maximum Transmission Unit) est la taille maximale d'un datagramme transmissible en une seule fois sur un lien : minimum obligatoire 68 octets, 1500 octets sur un réseau Ethernet standard. Le Path MTU est la MTU minimale sur un trajet ; le Path MTU discovery la recherche à l'avance pour éviter les processus de fragmentation et de ré-assemblage — et désengorger les machines.
Quand le « tuyau » est trop petit, le datagramme est découpé, avec trois outils dans l'en-tête : l'ID datagramme, les drapeaux DF (fragmentation interdite) et MF (indication du dernier fragment), et la position du fragment. Le ré-assemblage se fait par le destinataire : l'ID — avec le protocole et les adresses source et destination — retrouve les fragments d'un même datagramme d'origine, la position replace les données de chaque fragment.
TTL, protocole et somme de contrôle
Le TTL (Time To Live) est le temps de vie du paquet : il est décrémenté au passage de chaque routeur et le paquet n'est pas retransmis si le compteur est nul. Le champ protocole donne le numéro du protocole transporté : 1 ICMP, 4 encapsulation IPv4, 6 TCP, 17 UDP, 41 IPv6 (liste à l'IANA).
La somme de contrôle porte sur l'en-tête seul. À la création (avant envoi), le champ est mis à 0 puis on calcule le complément à 1 de la somme des compléments à 1 des mots de 16 bits du datagramme. À la réception, le même calcul est refait : 0 → tout va bien, autre chose → erreur.
Source, destination et options
L'adresse source est normalement unicast (l'adresse d'une machine) ; la valeur 0.0.0.0 apparaît pendant la recherche d'adresse pour une configuration dynamique. L'adresse destination peut être unicast (une machine), broadcast (toutes les machines d'un réseau) ou multicast (plusieurs machines, éventuellement sur plusieurs réseaux).
Les options sont facultatives : elles commencent par un type sur 1 octet (0 = fin des options, 1 = nop), suivi — pour un type supérieur à 1 — d'une longueur et de données d'option. Le type code la copie (1 bit : l'option est présente ou non sur tous les fragments), la classe (2 bits : 0 contrôle, 2 mesure) et un numéro (5 bits). Enfin, le bourrage (padding) complète avec des 0 jusqu'à aligner sur 32 bits (4 octets).
L'exercice qui tombe
Le décodage hexadécimal d'un en-tête complet — version, IHL, longueur totale, TTL,
protocole, adresses — est l'exercice de cours repris aux examens. Entraînez-vous :
45 00 01 05 ... doit se lire sans hésitation.
A retenir
- en-tête de 20 octets minimum (IHL = 5), 60 maximum avec options ; longueur totale jusqu'à 65 535 octets ;
- ToS → DiffServ (DSCP + ECN), la même définition qu'IPv6 ;
- fragmentation liée à la MTU (68 minimum, 1500 en Ethernet) : ID, DF/MF et position ; ré-assemblage chez le destinataire ; Path MTU discovery pour l'éviter ;
- TTL décrémenté à chaque routeur (paquet jeté à 0) ; checksum sur l'en-tête seul ;
- source unicast (ou 0.0.0.0 en configuration dynamique) ; destination unicast, broadcast ou multicast.
R205-4-ipv4-datagramme.pdf
R2.05 · Cours 4 — Format du datagramme IPv4 · 17 pages
Chargement du document…
Dernière mise à jour le
Ch. 3 — Pile et modèles
Pourquoi des couches, service vs protocole, l'encapsulation lue comme dans Wireshark, le modèle OSI couche par couche face à TCP/IP — et les trames Ethernet.
Ch. 5 — IPv6
Pourquoi IPv6, l'en-tête simplifié de la RFC 8200 avec extensions chaînées, l'écriture canonique RFC 5952, les plages IANA (2000::/3, fd00::/8, ff00::/8) et les modes de diffusion.