Cette page du site www.frameip.com
nous explique le fonctionnement des entêtes IP.
Entêtes IP par _SebF (Webmaster et créateur
de FrameIP.com) :
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.3.1 - Priorité
3.3.2 - Délai
3.3.3 - Débit
3.3.4 - Fiabilité
3.3.5 - Coût
3.3.6 - MBZ
3.4 - Longueur
totale
3.5 - Identification
3.6 - Flags
3.6.1 - Reserved
3.6.2 - DF
3.6.3 - MF
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.13.1 - Copie
3.13.2 - Classe
3.13.3 - Numéro
3.14 - Bourrage
4
- Suivi
du document
1 - Définition du protocole
IP
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 (http://www.ietf.org/rfc.html)
- Rfc
791 - IP.txt
- Rfc
791 - IP.pdf
- Rfc
791 - IP.doc
- Rfc
791 - IP - Fr.pdf
2 - Structure de l’entête
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.

3 - Définition des différents
champs
3.1 - Le champ Vers
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é
3.2 - IHL
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
3.3 - Service
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 (http://www.ietf.org/rfc.html)
- Rfc
1349 - TOS.txt
- Rfc
1349 - TOS.pdf
- Rfc
1349 - TOS.doc
3.3.1
- Priorité
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
3.3.2 -
Délai
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
3.3.3 -
Débit
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
3.3.4 - Fiabilité
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
3.3.5 -
Coût
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
3.3.6 - MBZ
Le champ MBZ "Must Be Zero"
est codé sur 1 bit. Comme son nom l'indique, il doit être mis à
0.
3.4 - Longueur totale
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 );
3.5 - Identification
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 (http://www.ietf.org/rfc.html)
- Rfc
815 - Fragmentation.txt
- Rfc
815 - Fragmentation.pdf
- Rfc
815 - Fragmentation.doc
3.6 - Flags
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.
3.6.1
- Reserved
Le premier bit est réservé et
positionné à 1.
3.6.2 - DF
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.
3.6.3 - MF
Appelé MF "More Fragments", le
troisième bit indique s'il est à 1 que le fragment n'est pas le
dernier.
3.7 - Position fragment
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.
3.8 - TTL
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.
3.9 -
Protocole
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 1340 (http://www.ietf.org/rfc.html)
- Rfc
1340 - Assigned Numbers.txt
- Rfc
1340 - Assigned Numbers.pdf
- Rfc
1340 - Assigned Numbers.doc
Voici la liste des protocoles
les plus connu :
- 01 - 00001 - ICMP
- 02 - 00010 -
IGMP
- 06 - 00110 - TCP
- 17 - 10001 - UDP
3.10
- Checksum
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 (http://www.ietf.org/rfc.html)
- Rfc
1071 - Checksum IP.txt
- Rfc
1071 - Checksum IP.pdf
- Rfc
1071 - Checksum IP.doc
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.
3.11 - Adresse IP source
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.
3.12 - Adresse IP destination
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.
3.13 -
Options
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 :

3.13.1
- Copie
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é.
3.13.2
- Classe
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é
3.13.3
- Numéro
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.
3.14
- Bourrage
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.
4 - Suivi du document
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.