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 |
|
Bit 3 |
|
Bit 4 |
|
Bit 5 |
|
Bits 6-7 |
|
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.