Le datagramme IP

Commencer la description du protocole IP, par une présentation du format du paquet (datagramme) peut sembler osé. Certains trouveront que l’approche est trop complexe, mais il n’en est rien. En effet, pour mettre en oeuvre des fonctions (priorisation, contrôle de flux, détection d’erreurs, etc.) un protocole doit prévoir dans son format de PDU, et notamment dans son PCI, les champs nécessaires à la mise en oeuvre de ces fonctions.

Autrement dit, étudier le format d’une PDU d’un protocole, renseigne immanquablement sur les fonctions qu’il offre. Ce chapitre présente donc le datagramme IP sans trop insister sur les différents champs. Les chapitres suivants, traitant des plus importantes fonctions d’IP, s’appuieront sur le format des champs, plus en détails.

Format général du paquet

Vous l’avez remarqué, on dit tout aussi bien « paquet« , que « datagramme« . En théorie, un datagramme véhicule toutes les informations nécessaires à son routage (notamment les adresses sources et destinations), alors qu’un paquet est beaucoup plus générique et pourrait fort bien ne pas comporter ces informations. Quoiqu’il en soit, nous dirons que « paquet » et « datagramme » c’est la même chose !

Un paquet IP moyen a une taille de 128 ou 256 octets. Avec l’arrivée des technologies ATM à très hauts débits, on commence à vulgariser des tailles plus importantes aux alentours des 1500 octets.

Le paquet IP est formé de deux grandes parties :

  • l’entête du paquet, généralement d’une taille de 20 octets, constitue le PCI du protocole. C’est là que sont inscrites toutes les informations du protocole (adresse, segmentation, options, etc.).
  • la partie « data », ou champ de données, d’une taille maximum de : (65536 octets) – (les octets d’entête et d’options). Elle véhicule la PDU de couche supérieure (généralement un segment TCP ou UDP).

L’analyse du champ de données ne nous apprendra rien, si ce n’est le format de la PDU TCP ou UDP, mais ce n’est pas le sujet de ce cours. Nous allons donc focaliser sur l’entête, qui vous le verrez est très intéressante !

Format général de l’entête du paquet

L’entête IP, comme tout le paquet IP est structurée en mots de 4 octets. C’est une des raisons qui a conduit a refusé la normalisation d’IP dans le modèle OSI, qui préconise une structure en mots de 1 octet.

Structure en mots de 4 octets veut dire que le nombre d’octets d’un paquet IP est toujours un multiple de 4 octets. Si on doit placer un nombre d’octets non multiple de 4 dans le paquet (65 par exemple), on procède à un complément, encore appelé « bourrage » pour les moins élégants, ou « padding » pour les cultivés ! Cette opération consiste à ajouter un nombre d’octets supplémentaires formés de 0, qui vont compléter jusqu’à un multiple de 4. Pour notre exemple, on ajouterai 3 octets pour obtenir 68 octets (68/4 = 17 mots de 4 octets).

L’entête IP standard n’utilise pas le champ « Option », elle a donc une longueur de 20 octets (5 mots de 4 octets) dans 99% des cas.

Le champ d’option peut avoir une longueur très variable. Nous le présentons succinctement, plus loin.

Rôles des champs de l’entête

Version

Ce champ code sur 4 bits, la version du protocole. La version actuelle est la version 4 (0100). Une version 6 est annoncée depuis bientôt 6 ans ! On commence à en voir certaines implémentations, mais le chemin est encore long. Elle introduit un nouveau format d’adressage permettant d’affecter une adresse IP à n’importe quoi sur terre, avec plusieurs milliards d’adresses possibles … Peut-être un jour en parlerons-nous … Mais il faudra que je me documente sur la chose …

Internet Header Length (IHL)

Longueur de l’en-tête Internet, exprimée en mots de 4 octets. Cette longueur étant codée sur 4 bits, elle peut avoir comme valeur maximum binaire 1111 soit 15. Comme elle indique un nombre de mots de 4 octets, on en déduit que la taille maximum de l’entête IP est de 15*4 = 60 octets.

Type Of Service (TOS)

Ce champ donne des indications aux équipements qu’il traverse sur son niveau de priorité et sa classe de service. Défini sur 8 eb (1 octet), il est divisé en 5 parties :

  • Les bits 0 à 2 indiquent la « précédence« . Autrement dit la priorité d’acheminement par rapport aux autres paquets. Cette partie du champ permet de définir 8 niveaux de priorité d’acheminement.
  • Le bit 3 indique si le paquet peut supporter une attente de traitement normale ou faible.
  • Le bit 4 indique si le paquet doit être acheminé en priorité sur des liens à hauts débits ou non
  • Le bit 5 indique si le paquet doit être acheminé sur des liens très fiables (faible taux d’indisponibilité et d’erreurs) ou normaux
  • Les bits 6 et 7 sont réservés et donc inutilisés.

Quoiqu’il en soit, ce champ est rarement utilisé. Avec l’arrivée de nouvelles technologies comme le MPLS (Multi Protocol Label Switching) on commence à utiliser le champ TOS bits 0 à 2 pour définir des classes de services qui sont exploitées par MPLS. Certaines applications utilisaient déjà ce champ TOS pour définir des priorités d’acheminement de leurs paquets dans le réseau, mais cela restait rare !

Tableau des valeurs du champ pour un paquet IP/DoD
 

Bits 0-2

  • 111: contrôle de réseau
  • 110: contrôle de réseau Arpanet
  • 101: Critic/ECP
  • 100: flash override
  • 011: flash
  • 010: immédiat
  • 001: priorité
  • 000: routine
Bit 3
  • 0: attente normale
  • 1: attente faible
Bit 4
  • 0: débit normal
  • 1: débit élevé
Bit 5
  • 0: fiabilité normale
  • 1: fiabilité élevée
Bits 6-7
  • 00: réservés

Total Length

Longueur totale du datagramme, exprimée en octets, en-tête et données comprises. Ce champ étant codé sur 2 octets, la longueur maximale d’un paquet IP est donc de 65 536 octets (0 à 65535).

Identification, Flags et Fragment Offset

Ces trois champs servent à gérer le mécanisme de fragmentation (ou segmentation si vous préférez) du paquet IP. En effet, il est possible qu’un paquet IP n’entre pas entièrement dans une trame de niveau 2 parce que sa taille est trop importante. Il sera nécessaire de fragmenter le paquet pour le véhiculer dans plusieurs trames.

Cependant en raison de la nature non connecté du protocole, la fragmentation est assez complexe à gérer. Nous étudierons cet aspect plus complétement dans un chapitre suivant.

Pour le moment retenez qu’un mot complet de 4 octets est réservé à la gestion de la fragmentation.

Time To Live

Toujours en raison du fait que le protocole IP fonctionne en mode non connecté, que de plus im est capable d’implémenter des techniques de routage dynamique susceptible de lui permettre de changer de route pour acheminer ses paquets, il est possible qu’un paquet se perde dans le réseau. Pour éviter qu’il tourne indéfiniment, on lui affecte une durée de vie. Durée de vie du datagramme. Cette valeur est décrémentée toutes les secondes ou à chaque passage dans une passerelle. Si cette valeur est à 0, le datagramme est mis au rebut.

Protocol

Ce champ codé sur un octet, identifie le protocole de niveau supérieur transporté dans le champ de données du paquet IP. Il permet au destinataire, en analysant ce champ, de savoir à quel protocole de niveau supérieur (niveau 4 en général : TCP ou UDP) il doit transmettre le contenu du datagramme.

Tableau des valeurs du champ protocole

Hexadécimal

Décimal

Protocole

Nom

01

1

ICMP

Internet Control Message Protocol

06

6

TCP

Transmission Control Protocol

08

8

EGP

Exterior Gateway Protocol

09

9

IGP

Interior Gateway Protocol

11

17

UDP

User Datagram Protocol

1D

29

ISO-TP4

Transport Iso Classe 4

Checksum

Le checksum est le champ de contrôle d’erreur. Il est calculé uniquement sur l’en-tête. Le principe consiste à faire la somme des valeurs des octets de l’entête et à inscrire le résultats dans l’octet de checksum. Le récepteur effectue la même opération, si la valeur trouvée est identique, il n’y a pas d’erreur. Dans le cas contraire, le paquet est rejeté.

ATTENTION : IP possède un mécanisme de détection d’erreurs, mais pas de correction d’erreurs. Autrement dit, il jette le paquet, mais n’informe personne et ne cherche pas à générer une répétition du paquet (réémission par l’émetteur). Les couches supérieures devront gérer elles-mêmes cette perte de paquet est s’occuper des demandes de réémissions éventuelles.

Comme certains champs de l’entête peuvent varier dans le temps, le checksum est recalculé par chaque équipement traversé par le paquet.

Adresses destination et source

Les champs d’adresses sont chacun codés sur 4 octets. Il existe donc, en théorie, 2 puissance 32 adresses possibles (4 294 967 296 adresses). Dans le chapitre consacré à l’adressage, nous étudierons précisément ce format.

Le champ adresse Source indique l’adresse IP de la machine qui émet les données, le champ adresse Destination indique l’adresse IP de la machine à qui sont envoyées les données.

Options

Je vous l’ai déjà indiqué, ce champ est assez peu utilisé. Il permet de mettre en œuvre des mécanismes évolués comme le routage par la source (l’émetteur indique par où doit passer le paquet) ou l’enregistrement de routes (le paquet enregistre par où il est passé pour arriver à destination).

La longueur totale de la partie options doit être un multiple de quatre octets. Il y a donc une possibilité de « padding » (bourrage) à la fin de la section options.

Tableau des principales options

Hexa.

Déc.

Type

Fonction

00

0

Fin d’option

Termine la partie options

01

1

Pas d’opération

Permet de commencer sur un multiple de quatre octets (bourrage ou padding).

07

7

Enregistrement de route

Chaque relais doit insérer son adresse IP associée au réseau

44

68

Enregistrement d’instant

Possibilité d’insérer l’instant de réception, l’adresse IP

82

130

Sécurité

Spécifique DOD

83

131

Routage approximatif

Si adresse source reconnue, remplacement par adresse réseau

88

136

Identificateur de stream

Spécifique STATNET

89

137

Routage impératif

Routage à travers les passerelles spécifiées

 Conclusion du chapitre

Par la connaissance du format de l’entête IP, et du paquet en général, vous avez maintenant une idée plus précise des fonctions offertes par le protocole. Dans les chapitres suivants, nous allons détailler certaines fonctions.

Page Précédente | Page Suivante