LE SITE PERSONNEL

J.L.B.

Un peu de technique...
ICMP

logo Mozilla logo SeaMonkey logo Firefox logo de la messagerie Thunderbird

Un peu de technique...

ICMP

Le protocole ICMP 1 - Définition du protocole Le protocole ICMP (Internet Control Message Protocol) permet de gérer les informations relatives aux erreurs du protocole IP. Il ne permet pas de corriger ces erreurs, mais d'en informer les différents émetteurs des Datagrammes en erreurs. Chaque pile IP, que ce soit des routeurs ou des stations de travail, gèrent ICMP par défaut. Ce protocole est considéré comme faisant partie de l'ensemble des protocoles TCP/IP. Cependant, contrairement à TCP et UDP, il se situe en couche 3 et donc, il est encapsulé dans IP. Le mot "Encapsulation" relate clairement la confusion du placement d'ICMP dans les 7 couches OSI. Les messages d'erreur ICMP sont transportés sur le réseau sous forme de Datagramme, comme n'importe quelle donnée. Ainsi, les messages d'erreurs peuvent eux-mêmes être sujet aux erreurs. Toutefois, en cas d'erreur sur un message ICMP, aucune trame d'erreur n'est délivrée pour éviter un effet "boule de neige". Vous trouverez tous les détails du protocole ICMP dans la Rfc 792. 2 - Structure de l’entête Voici la structure de l’entête ICMP basé sur 8 octets. Les deux champs Identifiant et Numéro de séquence ne sont présent que dans le cas d’un paquet de type Ping sinon les champs reste présent mais en tant que bourrage et donc non utilisés. 3 - Définition des différents champs 3.1 - Type et Code Les champs Type et Code sont codés respectivement sur 8 bits ce qui donne un totale de 2 octets. Ils représentent la définition de message d'erreur contenu. Voici la liste des principales combinaison entre les champs Type et Code : Type Code Description 0 3 Réponse à une demande d’écho 3 0 Réseau inaccessible 3 1 Hôte inaccessible 3 2 Protocole inaccessible 3 3 Port inaccessible 3 4 Fragmentation nécessaire mais interdite 3 5 Echec de routage par la source 3 6 Réseau de destination inconnu 3 7 Hôte de destination inconnue 3 8 Machine source isolée 3 9 Réseau de destination interdit administrativement 3 10 Hôte de destination interdite administrativement 3 11 Réseau inaccessible pour ce type de service 3 12 Hôte inaccessible pour ce type de service 3 13 Communication interdite par un filtre 3 14 Host Precedence Violation 3 15 Precedence cutoff in efect 4 0 Volume de donnée trop importante 5 0 Redirection pour un hôte 5 1 Redirection pour un hôte et pour un service donné 5 2 Redirection pour un réseau 5 3 Redirection pour un réseau et pour un service donné 8 0 Demande d’écho 9 0 Avertissement routeur 10 0 Sollicitation routeur 11 0 Durée de vie écoulée avant d'arrivée à destination 11 1 Temps limite de réassemblage du fragment dépassé 12 0 En-tête IP invalide 12 1 Manque d'une option obligatoire 12 2 Mauvaise longueur 13 0 Requête pour un marqueur temporel 14 0 Réponse pour un marqueur temporel 15 0 Demande d'adresse réseau 16 0 Réponse d'adresse réseau 17 0 Demande de masque de sous réseau 18 0 Réponse de masque de sous réseau 3.1.1 - Type=0,8 - Le Ping Le principe du Ping étant, à la base, de valider la présence d'un hôte IP. Pour cela, l'application Ping utilisera la séquence 8-0 afin d'émettre une demande d'écho. Les données reçues dans un message d'écho doivent être réémises dans la réponse. Ainsi, si le message de retour correspond à l'émission, on en déduit que l' hôte est présent. De plus, on peux en déduire d'autres services, tel que le temps de réponse, la taille paquet maximum la durée de vie et etc. L'identificateur et le numéro de séquence peuvent être utilisés par l'émetteur du message d'écho afin d'associer facilement l'écho et sa réponse. Par exemple, l'identificateur peut être utilisé comme l'est un port pour TCP ou UDP, identifiant ainsi une session. Et le numéro de séquence peut être incrémenté pour chaque message d'écho envoyé. L'hôte de destination respectera ces deux valeurs pour le retour. 3.1.2 - Type=3 - Destination non valide Ce type de message est émis dans le cas où un routeur ou un hôte ne puisse pas router un paquet. 3.1.3 - Type=4 - Volume de donnée trop importante Un routeur ou hôte peut être amené à détruire un Datagramme s'il manque de mémoire pour bufferiser. Dans ce cas, le routeur émettra un message à destination de la source du Datagramme détruit, un paquet ICMP de type 4. Cela peut ce produire dans un second cas. Quand le Datagramme arrive trop rapidement pour qu'il puisse être traité le message ICMP peut donc constituer une demande de diminution de débit de transfert. 3.1.4 - Type=5 - Redirection Ces types de messages sont émis afin d'indiquer que le chemin emprunté n'est pas le bon pour la destination demandé. La réception de ce type de message d'erreur peut être interprétée par la modification de la table de routage locale. C'est plus communément appelé "Icmp Redirect". 3.1.5 - Type=9,10 - découverte de routeur Au démarrage d'une station, plutôt que de configurer manuellement les routes statiques, surtout si elle sont susceptibles de changer et que le nombre de stations est grands, il peut être intéressant de faire de la découverte automatique de routeurs. Pour cela, il y a deux possibilités. La première est l'envoi régulier de messages ICMP de type 9 "Avertissement routeur" d'annonces de routes par les routeurs. La seconde possibilité est qu'une station sollicite les routeurs avec un message de type 10 "Sollicitation routeur". La découverte de routeur n'est pas un protocole de routage, son objectif est bien moins ambitieux, juste obtenir une route par défaut. Vous trouverez tous les détails du "découverte de routeur" dans la Rfc 1256. 3.1.6 - Type=11 - Temps excédé Lorsqu'un routeur traitant un Datagramme est amené à mettre à jour le champ Durée de Vie de l'en-tête IP et que ce champ atteint une valeur zéro, le Datagramme sera détruit. Le routeur peut alors envoyer un message d'erreur "Time To Live expiré". Ce message ICMP peux être émis aussi dans le cas où le temps de réassemblage expire et le Datagramme ne peux donc être reconstitué à temps. 3.1.7 - Type=12 - Erreur d’entête Si un routeur rencontre un problème avec un paramètre d'en-tête IP l'empêchant de finir son traitement, le datagramme sera alors détruit. Un message d'erreur de type 12 sera donc alors émis. 3.1.8 - Type=13,14 - Marqueur temporel Le but de ce type de message est de s'échanger des données temporelles pour, par exemple, synchroniser les horloges. 3.1.9 - Type=15,16,17,18 - Demande d’information Ce type de message est envoyé vers une adresse constituée du numéro de réseau dans le champ source de l'en-tête IP et un champ destinataire à 0. La pile IP qui répondra pourra alors envoyer une réponse avec les adresses entièrement renseignées. 3.2 - Checksum Le champ Checksum est codé sur 16 bits et représente la validité du paquet de la couche 3 ICMP. Pour pouvoir calculer le Checksum, il faut positionner le champ du checksum a 0. Ce calcul est strictement le même que celui du protocole IGMP. 3.3 - Identifiant Le champ identifiant est codé sur 16 bits et définit l’identifiant de l’émetteur. Pour cela, il est conseillé d’assigner le numéro du processus assigné (PID) à l’application lors de l'exécution. Cela permet de le rendre unique inter application. Cela ressemble beaucoup aux numéros de port pour les protocole TCP et UDP. 3.4 - Numéro de séquence Le champ Séquence est codé sur 16 bits et permet au récepteur, d’identifier si il manque un paquet. Le plus classique étant une incrémentation linéaire de 1. Ainsi, si le récepteur reçoit la séquence 1 puis 3, il peut en déterminer une perte d’un paquet. Néanmoins, ce n’est pas normalisé, donc personne n’à la garantie que l’émetteur utilisera cette méthode. Cela peut aussi permettre à l'émetteur d'envoyer multiples paquets et de pouvoir distinguer les retours.