top of page
Datagramme et Entête IP

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 les champs nécessaires à la mise en oeuvre de ces fonctions.

Etudier le format d’une PDU (Protocol Data Unit) d’un protocole, renseigne immanquablement sur les fonctions qu’il offre. Ce cette partie présente donc le datagramme IP qui est le PDU de la couche Internet du modèle TCP/IP.

datagrammeIP.jpg
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. Quoi qu’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 vous 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.

enteteIP.gif
Les champs et leurs rôles
  • Le champ version est codé sur 4 bits. Il représente le numéro de version du protocole IP. Il permet aux piles IP réceptionnant la trame de vérifier le format et d’interpréter correctement la suite du paquet. C’est d’ailleurs pour cette raison qu’il est placé au début, une version inconnue par un équipement conduit au rejet direct.

  • IHL signifie « Internet Header Length ». ce champ est codé sur 4 bits et représente la longueur en mots de 4 octets de l’entête IP. Par défaut, il est égal à 5 (20 octets), cependant, avec les options de l’entête IP, il peut être compris entre 6 et 15. Le fait que le codage soit sur 4 bits, la taille maximum de l’entête IP est de 15*4 = 60 octets

  • Le champs service ou TOS « Type of Service » est codé sur 8 bits, il permet la gestion d’une qualité de service traitée directement en couche 3 du modèle OSI. Ce champ donne des indications aux équipements qu’il traverse sur son niveau de priorité et sa classe de service. Quoi qu’il en soit, ce champ est rarement utilisé.

  • « Total Length » La 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).

 

Ces trois prochains 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.

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

  • Le champ Identificateur ou Identifier est codé sur 16 bits et constitue l’identification utilisée pour reconstituer les différents fragments. Chaque fragment possède le même numéro d’identification, les entêtes IP des fragments sont identiques à l’exception des champs Longueur totale, Checksum et Position fragment.

  • Flags est codé sur 3 bits et indique l’état de la fragmentation.

  • Le champ Position du fragment ou Position Offset est codé sur 13 bits et indique la position du fragment par rapport à la première trame. Le premier fragment possède donc le champ Position fragment à 0.

  • Le TTL (Time To Live) est codé sur 8 bits et indique la durée de vie maximale du paquet. Il représente la durée de vie en seconde du paquet. Si le TTL arrive à 0, alors l’équipement qui possède le paquet, le détruira. Attention, à chaque passage d’un routeur le paquet se verra décrémenté de une seconde. De plus, si le paquet reste en file d’attente d’un routeur plus d’une seconde, alors la décrémentation sera plus élevée. Elle sera égale au nombre de seconde passé dans cette même file d’attente. Par défaut, si les temps de réponse sont corrects, alors on peut, entre guillemet, en conclure que le Time To Live représente le nombre de saut maximum. Le but du champ TTL est d’éviter de faire circuler des trames en boucle infinie.

  • Le champ Protocol est codé sur 8 bits et représente le type de Data qui se trouve derrière l’entête IP.                  Voici la liste des protocoles les plus connu :

    • 01 – 00001 – ICMP

    • 02 – 00010 – IGMP

    • 06 – 00110 – TCP

    • 17 – 10001 – UDP

  • Le champ Checksum est codé sur 16 bits et représente la validité du paquet de la couche 3. Pour pouvoir calculer le Checksum, il faut positionner le champ du checksum a 0 et ne considérer que l’entête IP. Donc par exemple, si deux trames ont la même entête IP (y compris le champ length) et deux entêtes ICMP et Data différentes (mais de même longueur), le checksum IP sera alors le même.

  • IP source est codé sur 32 bits et représente l’adresse IP source ou de réponse. Il est codé sur 4 octets qui forme l’adresse 192.168.1.1 par exemple.

  • IP destination est codé sur 32 bits et représente l’adresse IP destination. Il est codé sur 4 octets qui forme l’adresse 192.168.1.254 par exemple.

  • Le champ Options est codé entre 0 et 40 octets. Il n’est pas obligatoire, mais permet le « Tuning de l’entête IP ». Par exemple 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.

  • « Padding » (ou bourrage) est de taille variable comprise entre 0 et 7 bits. Il permet de combler le champ option afin d’obtenir une entête IP multiple de 32 bits soit 4 octets. La valeur des bits de bourrage est 0.

bottom of page