|

Entête IP
par Sébastien FONTAINE (_SebF)
1 -
Définition du
protocole
2 - Structure de l'entête
3 -
Définition des différents
champs
3.1 -
Vers
3.2 -
IHL
3.3 -
Service
3.4 -
Longueur totale
3.5 -
Identification
3.6 -
Flags
3.7 -
Position fragment
3.8 -
TTL
3.9 -
Protocole
3.10 -
Checksum
3.11 -
Adresse IP source
3.12 -
Adresse IP destination
3.13 -
Options
3.14 -
Bourrage
4 - Discussion autour de la
documentation
5 -
Suivi du document
IP signifie "Internet Protocol", protocole Internet. Il représente le protocole réseau le plus répandu. Il permet de découper l'information à
transmettre en paquets, de les adresser, de les transporter
indépendamment les uns des autres et de recomposer le message initial à
l'arrivée. Ce protocole utilise ainsi une technique dite de commutation de
paquets. Il apporte, en comparaison à Ipx/Spx et Netbeui, l'adressage en couche
3 qui permet, par exemple, la fonction principale de routage.
Il est souvent associé à un protocole de contrôle de la transmission des données
appelé TCP, on parle ainsi du protocole TCP/IP.
Cependant, TCP/IP est un ensemble de protocole dont voici les plus connu.
- IP - Internet Protocol - Couche 3 - IP natif.
- ARP - Address
Resolution Protocol - Couche 3 - Résolution d'adresse IP en adresse MAC.
- RARP - Reverse Address Resolution Protocol
- Couche 3 - Résolution d'adresse MAC en adresse IP.
- ICMP
- Internet Control Message Protocol - Couche 3 - Gestion des messages du
protocole IP.
- IGMP - Internet Group Management Protocol
- Couche 3 - Protocole de gestion de groupe.
- TCP - Transmission Control Protocol -
Couche 4 - Transport en mode connecté.
- UDP - User Datagram Protocol - Couche
4 - Transport en mode non connecté.
Vous trouverez tous les détails du protocole IP dans la
Rfc 791.
Voici la structure de l'entête IP basé sur 20 octets.

Voici le complément de l'entête IP qui est optionnel basé sur 4 octets.

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.
Voici la liste des différent codes.
- 00 - Réservé
- 01 - Non assigné - 02 - Non assigné - 03 - Non assigné - 04 - IP V4 - 05 - ST Datagram Mode - 06 - IP V6 - 07 - Non assigné - 08 - Non assigné - 09 - Non assigné - 10 - Non assigné - 11 - Non assigné - 12 - Non assigné - 13 - Non assigné - 14 - Non assigné - 15 - Réservé
IHL signifie "Internet
header lengh". ce champ est codé sur 4 bits et représente la longueur en mots de 32 bits 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 donc
de 15*32bits = 60 octets
Le champs service "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. Cependant, la plupart des équipements de Backbone, ne tiennent pas compte de ce champ et même certain le réinitialise à 0.
Voici la composition du champ Service :

Vous trouverez tous les détails du champ Service TOS
"Type Of Service" dans la
Rfc 1349.
Le champ Priorité "Precedence" est codé sur 3 bits. Il indique la priorité que
possède la paquet. Voici les correspondances des différentes combinaisons :
- 0 - 000 - Routine - 1 - 001 - Prioritaire - 2 - 010 - Immédiat - 3 - 011 - Urgent
- 4 - 100 - Très urgent - 5 - 101 - Critique - 6 - 110 - Supervision interconnexion
- 7 - 111 - Supervision réseau
Le champ Délai "Delay" est codé sur 1 bit. Il indique l'importance du
délai d'acheminement du paquet. Voici les correspondances des différentes
combinaisons :
- 0 - Normal - 1 - Bas
Le champ Débit "Throughput" est codé sur 1 bit. Il indique l'importance
du débit acheminé. Voici les correspondances des différentes combinaisons :
- 0 - Normal - 1 - Haut
Le champ Fiabilité "Reliability" est
codé sur 1 bit. Il indique l'importance de la qualité du paquet. Voici les
correspondances des différentes combinaisons :
- 0 - Normal - 1 - Haute
Le champ Coût "Cost" est codé sur 1 bit. Il indique le coût du paquet. Voici
les correspondances des différentes combinaisons :
- 0 - Normal - 1 - Faible
Le champ MBZ "Must Be Zero" est codé sur 1 bit. Comme son nom l'indique, il
doit être mis à 0.
Le champ Longueur totale est codé sur 16 bits et représente la longueur du
paquet incluant l'entête IP et les Data associées. La longueur totale est
exprimée en octets, ceci permettant de spécifier une taille maximum de 216
= 65535 octets. La longueur des Data est obtenu par la combinaison des champs
IHL et Longueur totale :
Longueur_des_data = Longueur_totale -
( IHL * 4 );
Le champ Identification 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.
Vous trouverez tous les détails des mécanismes de fragmentation et de
réassemblage dans la Rfc 815.
Le champ Flags est codé sur 3 bits et indique l'état de la fragmentation. Voici
le détail des différents bits constituant ce champ.
Le premier bit est réservé et positionné à
0.
Appelé DF "Don't Fragment", le second bit permet d'indiqué si la fragmentation est autorisée. Si
un Datagramme devant être fragmenté possède le flag DF à 1, alors, il sera alors
détruit.
Appelé MF "More Fragments", le troisième bit indique s'il est à 1 que le fragment n'est pas le
dernier.
Le champ Position fragment 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 champ 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 du niveau.
Le but du champ TTL est
d'éviter de faire circuler des trames en boucle infinie.
Le champ Protocole est codé sur 8 bits et représente le type de Data qui se
trouve derrière l'entête IP.
Vous trouverez tous les détails des types de
protocole dans la
Rfc 1700 qui remplace désormais la
Rfc 1340.
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.
Voici un exemple de fonction permettant le calcul du checksum IP
|
unsigned short
calcul_du_checksum(bool liberation,
unsigned short *data,
int taille)
{
unsigned long checksum=0;
//
********************************************************
// Complément à 1 de la somme des complément à 1 sur 16 bits
// ********************************************************
while(taille>1)
{
if (liberation==TRUE)
liberation_du_jeton(); // Rend la main
à la fenêtre principale
checksum=checksum+*data++;
taille=taille-sizeof(unsigned
short);
}
if(taille)
checksum=checksum+*(unsigned char*)data;
checksum=(checksum>>16)+(checksum&0xffff);
checksum=checksum+(checksum>>16);
return (unsigned
short)(~checksum);
} |
Vous trouverez tous les détails du Checksum IP dans la
Rfc 1071.
Tous les équipements de niveau 3, tel que les routeurs, devront recalculer le
Checksum, car il décrémente le champs TTL. De plus, toutes les fonctions de
niveau 3 à 7, tel que la NAT, le PAT, modifiant le contenu de l'entête IP ou des Data, devront recalculer
le Checksum.
Le champ 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 A.B.C.D.
Le champ IP destination est codé sur 32 bits et représente l'adresse IP
destination. Il est codé sur 4 octets qui forme l'adresse A.B.C.D.
Le champ Options est codé
entre 0 et 40 octets. Il n'est pas obligatoire, mais permet le "Tuning de
l'entête IP". Afin de bien gérer les Options, cela doit commencer par un octets
de renseignement. Voici le détail de cette octet :

Le champ Copie est codé sur 1 bit et indique comment les options doivent
être traitées lors de la fragmentation. Cela signifie que lorsqu'il est
positionné à 1, il faut recopier les options dans chaque paquet fragmenté.
Le champ Classe est codé sur 2 bits et indique les différentes catégorie
d'options existantes. Voici la liste des différentes classe possible :
- 0 - 00 - Supervision de réseau
- 1 - 01 - Non utilisé
- 2 - 10 - Debug et mesures
- 3 - 11 - Non utilisé
Le champ Numéro est codé sur 5 bits et indique les différentes options
existantes. Voici la liste des différents numéros possibles par Classe :
Classe 0,
- 0 - 00000 - Fin de liste d'option.
Utilisé si les options ne se terminent pas à la fin de l'en-tête (bourrage).
- 1 - 00001 - Pas d'opération. Utilisé
pour aligner les octets dans une liste d'options.
- 2 - 00010 - Restriction de sécurité
et de gestion. Destiné aux applications militaires.
- 3 - 00011 - Routage lâche défini par
la source.
- 7 - 00111 - Enregistrement de route.
- 8 - 01000 - Identificateur de
connexion.
- 9 - 01001 - Routage strict défini par
la source.
Classe 2,
- 4 - 00100 - Horodatage dans
l'Internet.
Le champ
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. La valeur des
bits de bourrage est 0.
Vous pouvez poser toutes vos questions,
vos remarques et vos expériences à propos de l'entête IP. Pour cela, rendez-vous
sur le Forum
"TCP-IP".
Le 19 février 2009, par Mesot Titouan,
correction de la valeur par défaut du flag reserved qui doit être égale à 0
(voir chapitre 3.6.1 et RFC 791 page 13).
Le 02 décembre 2004, par _SebF, correction sur le calcul du checksum qui
ne s'effectue que sur l'entête elle même et ne prend pas en compte les couches
supérieurs.
Le 11 novembre 2003, par _SebF, indication des différentes classes et numéros du
champ Options.
Le 11 novembre 2003, par _SebF, complément de la définition du champ TTL en indiquant la
décrémentation de 1 par seconde passé dans un routeur.
Le 18 septembre 2003, par _SebF, création du document.
|