3. Le protocole IP de la couche réseau
En reprenant le principe à l'origine du réseau de communications militaires ARPANET, on doit pouvoir communiquer d'un point à un autre de l'Internet «quel que soit l'état du réseau». Une grande partie de l'infrasctructure peut être détruite par une frappe nucléaire et les communications doivent toujours être possibles. C'est ce «mode de fonctionnement» qui a conduit à l'adoption d'un réseau à commutation de paquets fonctionnant en mode non connecté sans aucune hiérarchie. Si un autre principe avec supervision, hiérarchie et|ou mode connecté avait été retenu il suffirait qu'un point névralgique soit touché pour interrompre l'ensemble des communications.
Le fonctionnement du protocole IP qui a été décrit dans le document RFC791 : INTERNET PROTOCOL, reprend l'ensemble des caractéristiques énoncées ci-avant. L'absence totale de mécanisme de contrôle et|ou de correction d'erreur est une caractéristique importante qui découle des mêmes principes. La fiabilisation des communications ne se joue pas au niveau réseau mais au niveau transport.
En-tête de paquet IP - image seule
Version : 4 bits
Version du protocole IP codée sur 4 bits : 0100 pour IPv4 et 0110 pour IPv6.
Internet Header Length : 4 bits, IHL
Longueur de l'en-tête en mots de 32 bits. Cette valeur est utilisée pour distinguer la partie en-tête de la partie données du paquet. La représentation usuelle de l'en-tête se fait sur 32 bits de largeur. Comme les champs Options et Padding ne sont pas obligatoires, la valeur minimum du champ IHL est 5 (0101).
Type Of Service : 8 bits, TOS
Champ découpé en 2 parties. Les 3 premiers bits sont appelés precedence et les 5 derniers représentent le type de service. La définition d'origine prévoyait 3 choix : low-delay, high-reliability et high-throughput. Ce «marquage» des paquets est utilisable pour définir des flux prioritaires sur une interconnexion réseau «sous contrôle». Sur l'Internet, les opérateurs définissent leurs propres priorités ; donc leurs propres valeurs pour ce champ. Voir l'Extrait du Linux Advanced Routing & Traffic control Howto.
Total Length : 16 bits
Longueur du datagramme : en-tête & données. La taille minimum est de 21 octets (en-tête + 1 octet de donnée). Comme se champ est représenté sur 16 bits, la taille maximum est de 2^16 - 1, soit 64 Ko.
Identification : 16 bits
Chaque paquet IP reçoit un numéro d'identification à sa création. Il est possible qu'un paquet soit découpé en fragments avant d'atteindre sa destination finale. Chaque fragment appartient au même paquet IP. Chaque fragment possède le même numéro d'identification.
Flags : 3 bits
Ce champ contient 3 indicateurs d'état :
•Reserved flag : doit toujours être à 0.
•Don't Fragment (DF) : à 0 si le paquet peut être fragmenté ; à 1 s'il ne doit pas être fragmenté.
•More Fragments (MF) : à 1 si d'autres fragments sont attendus ; à 0 s'il n'y a pas/plus de fragments.
Fragment Offset : 13 bits
Position du fragment dans le datagramme courant. Cette position est comptée en octets.
Time To Live : 8 bits, TTL
Ce compteur est décrémenté à chaque traversée de routeur. Si la valeur 0 est atteinte, le paquet est jeté. Cela signifie qu'il ne peut être délivré à sa destination finale. La valeur initiale du champ TTL dépend du système d'exploitation utilisé.
Protocol : 8 bits
Ce champ spécifie le protocole utilisé dans les données du paquet IP. Par exemple, la valeur 1 indique que le protocole utilisé est ICMP. On sait ainsi que ce paquet n'est pas destiné à une application. Les différentes valeurs de ce champs sont listées dans le fichier /etc/protocols sur les systèmes GNU/Linux ou *BSD.
Header Checksum : 16 bits
A chaque création ou modification d'un paquet, une somme de contrôle (cyclic redundancy check) est calculée sur son en-tête. Lorsque le paquet arrive à destination, cette somme est recalculée. Si le résultat diffère, c'est que le paquet a été endommagé lors de son trajet.
Source Address : 32 bits
Adresse IP de l'hôte qui a émis le paquet. Voir Adressage IP.
Destination Address : 32 bits
Adresse IP de l'hôte qui doit recevoir le paquet. Voir Adressage IP.
Options and Padding
Cette partie de l'en-tête est optionnelle. Ce champ est utilisé pour fournir des instructions spécifiques de distribution du paquet qui ne sont pas couvertes par les autres champs de l'en-tête. La taille maximum de ces insturctions est limitée à 40 octets regroupés en double-mots de 32 bits. Les bits de padding servent à compléter le dernier double-mot de 32 bits.
Data
C'est le dernier champ du paquet IP. Il contient les «données» du paquet. Celles ci peuvent débuter par un en-tête de couche transport (4) qui donnera d'autres instructions à l'application qui recevra les données. Le champ Data peut aussi contenir un message ICMP qui ne contient aucune donnée utilisateur.