![]() |
guill.net
-
La page des réseaux
|
![]() ![]() |
Les messages ICMP sont envoyés dans diverses situations: par exemple, lorsqu'un datagramme ne peut pas atteindre sa destination, lorsque le routeur manque de réserve de mémoire pour retransmettre correctement le datagramme, ou lorsque le routeur décode de viser l'hôte destinataire via une route alternative pour optimiser le trafic.
Le protocole Internet n'est pas, dans sa définition, absolument fiable. Le but de ces messages de contrôle est de pouvoir signaler l'apparition d'un cas d'erreur dans l'environnement IP, pas de rendre IP fiable. Aucune garantie que le datagramme soit acheminé ni qu'un message de contrôle soit retourné, de peut être donnée. Certains datagrammes pourront se perdre dans le réseau sans qu'aucun message de contrôle ne le signale. Les protocoles de niveau supérieur s'appuyant sur une couche IP devront implémenter leurs propres mécanismes de contrôle d'erreur et de retransmission si leur objet nécessite un circuit de communication sécurisé.
Les messages ICMP reportent principalement des erreurs concernant le traitement d'un datagramme dans un module IP. Pour éviter de ne pas entrer dans un cercle vicieux de réémission de message de contrôle en réponse à un autre message de contrôle et ce sans fin, aucun message ICMP ne sera réémis en réponse à un message ICMP. De même les messages ICMP ne seront transmis qu'en réponse à un traitement erroné du fragment zéro dans le cas d'un datagramme fragmenté. (Le fragment zéro est celui dont l'offset vaut zéro).
Version : | 4 |
IHL : | Longueur d'en-tête Internet en mots de 32-bits. |
Type de Service : | 0 |
Longueur Totale : | Longueur totale du datagramme en octets. |
Identification
:
Bits Contrôles : Fragment Offset : |
Utilisés par le mécanisme de fragmentation, voir [1]. |
Durée de vie : | Durée de vie du datagramme en secondes; ce champ est diminué d'une unité par chaque module IP traversé dans lesquels le datagramme est traité, la valeur dans ce champ doit être au moins égale au nombre maximum de routeurs que ce datagramme est sensé traverser jusqu'à sa destination finale. |
Protocole : | ICMP = 1 |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un de l'en-tête Internet pris par mots de 16 bits. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Adresse source : | L'adresse du routeur ou hôte qui compose le message ICMP. Sauf mention contraire, celle-ci peut être toute adresse de routeur. |
Adresse destinataire : | L'adresse du routeur ou hôte à qui le message doit être envoyé. |
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | non utilisé | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Datagramme original En-tête Internet + 64 bits de données | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adresse destinataire : | L'adresse et réseau source du datagramme original. |
Type : | 3 |
Code : | 0 = réseau inaccessible;
1 = hôte inaccessible; 2 = protocole non disponible; 3 = port non accessible; 4 = fragmentation nécessaire mais interdite; 5 = échec d'acheminement source. |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Si, dans l'hôte destinataire, le module IP ne peut délivrer le message à la couche supérieure soit parce que le protocole indiqué n'est pas implémenté soit parce que l'application ne répond pas, l'hôte destinataire lui-même peut être amené à émettre un tel message à destination de la source.
Un autre cas de figure est celui où le datagramme doit être fragmenté pour pouvoir être retransmis sur le segment suivant de réseau et où celui-ci affiche un bit antifragmentation marqué interdisant d'effectuer cette opération pour ce datagramme. Ce message ICMP permet de signaler ce cas de figure.
Les codes 0, 1, 4, et 5 seront reçus de la part de routeurs. Les codes 2 et 3 proviendront d'hôtes.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | non utilisé | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Datagramme original En-tête Internet + 64 bits de données | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adresse destinataire : | L'adresse et réseau source du datagramme original. |
Type : | 11 |
Code : | 0 = durée de vie
écoulée avant arrivée à destination;
1 = temps limite de réassemblage du fragment dépassé. |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Si un hôte réassemblant un datagramme fragmenté ne peut terminer cette opération à cause de fragments manquants au bout de la temporisation de réassemblage, il doit détruire le datagramme en cours de traitement et peut dans ce cas en avertir la source en émettant ce message.
Si parmi les fragments reçu, aucun ne porte le numéro 0, il n'est pas utile d'envoyer ce message.
Un message de code 0 pourra provenir d'un routeur. Un message de code 1 peut être reçu provenant d'un hôte.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Pointeur | non utilisé | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Datagramme original En-tête Internet + 64 bits de données | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adresse destinataire : | L'adresse et réseau source du datagramme original. |
Type : | 12 |
Code : | 0 = l'erreur est indiquée par le pointeur. |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Pointer : | Si code = 0, identifie l'octet où l'erreur a été détectée. |
Le pointeur identifie l'octet par sa position dans l'en-tête du datagramme original dans laquelle l'erreur a été détectée (cela peut être au milieu d'une option). Par exemple, une valeur de 1 indique un Type de Service erroné, et (si l'en-tête comporte des options) 20 indique une erreur sur le code de type de la première option.
Un message de code 0 pourront provenir d'un routeur ou d'un hôte.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | non utilisé | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Datagramme original En-tête Internet + 64 bits de données | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adresse destinataire : | L'adresse et réseau source du datagramme original. |
Type : | 4 |
Code : | 0 |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Il sera plus judicieux de faire émettre ce message lorsque les ressources du routeur ou de l'hôte passent en dessous d'une valeur de sécurité, plutôt que d'attendre de ne plus disposer de ressource du tout. Ceci veut aussi dire que le datagramme ayant déclenché l'émission de ce message aura de fortes chances d'arriver quand même à destination.
Le message de code 0 pourront provenir d'un hôte ou d'un routeur.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Adresse Internet de routeur | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Datagramme original En-tête Internet + 64 bits de données | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adresse destinataire : | L'adresse et réseau source du datagramme original. |
Type : | 5 |
Code : | 0 = Redirection de datagramme
sur la base du réseau;
1 = Redirection de datagramme sur la base de l'adresse d'hôte; 2 = Redirection de datagramme sur la base du réseau et du Type de Service; 3 = Redirection de datagramme sur la base de l'hôte et du Type de Service; |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Adresse Internet de routeur : | Adresse du routeur auquel le trafic à destination du réseau spécifié dans le champ de destination de l'en-tête IP du datagramme original doit être envoyé. |
Pour les datagrammes présentant une option IP de routage précisant l'adresse du routeur dans le champ de destination, aucun message de redirection ne sera émis même si un chemin plus court vers la destination finale existe, autre que celui indiqué par l'adresse suivante de la liste de routage.
Les messages de codes 0, 1, 2, et 3 pourront provenir d'un routeur.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identificateur | Numéro de Séquence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data ... +-+-+-+-+- |
Adresses : | L'adresse de la source dans un message d'écho doit être le destinataire du message de "réponse à écho". Pour constituer un message de réponse à écho, il suffit d'inverser les adresses de source et de destination, et de mettre code type à 0, puis enfin de recalculer le Checksum. |
Type : | 8 = écho;
0 = réponse à écho. |
Code : | 0 |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Si la longueur totale du message est un nombre impair d'octets, le calcul du Checksum se fera en ajoutant un dernier octet à zéro de bourrage en fin de message. Ce mécanisme de Checksum sera changé dans le futur. |
Identificateur : | Si le code = 0, un identificateur permettant d'associer l'écho et la réponse à l'écho, peut être nul. |
Numéro de séquence : | Si le code = 0, un numéro de séquence permettant d'associer l'écho et sa réponse. Peut être nul. |
Les messages de code 0 peuvent provenir d'un routeur ou d'un hôte.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identificateur | Numéro de séquence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Etiquette temporelle origine | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Etiquette temporelle reçue | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Etiquette temporelle transmise | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adresses : | L'adresse source dans un marqueur temporel doit être la destination du message de réponse à marqueur temporel. Pour constituer une telle réponse, on intervertira simplement l'adresse source et l'adresse de destination, on marquera le code de type à la valeur 14, et le Checksum sera recalculé. |
Type : | 13 = marqueur temporel;
14 = réponse à marqueur temporel. |
Code : | 0 |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Identificateur : | Si le code = 0, un identificateur permettant d'associer le marqueur et sa réponse, peut être nul. |
Numéro de séquence : | Si le code = 0, un numéro de séquence permettant d'associer le marqueur et sa réponse. Peut être nul. |
L'étiquette Origine est l'heure à laquelle le message a été modifié pour la dernière fois par la source avant de l'envoyer, L'étiquette de Réception donne l'heure à laquelle la cible a reçu le message, et l'étiquette de Transmission donne l'heure à laquelle la cible réémet le message.
Si l'heure ne peut être obtenue en millisecondes ou ne peut être calculée par rapport à la référence 0 h 00 GMT, alors toute heure peut être codée dans l'étiquette temporelle pourvu que le bit de poids fort soit marqué pour indiquer la présence d'une valeur non standard.
L'identificateur et le numéro de séquence peuvent être utilisés par l'émetteur du marqueur temporel afin d'associer facilement le marqueur 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 incrémenté pour chaque marqueur envoyé. Le "miroir" respectera ces deux valeurs pour renvoyer le retour.
Les messages de code 0 peuvent provenir d'un routeur ou d'un hôte.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identificateur | Numéro de séquence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adresses : | L'adresse source dans un message d'information doit être la destination du message de réponse à demande d'information. Pour constituer une telle réponse, on intervertira simplement l'adresse source et l'adresse de destination, on marquera le code de type à la valeur 16, et le Checksum sera recalculé. |
Type : | 15 = demande d'information;
16 = réponse. |
Code : | 0 |
Checksum : | Le complément à un sur 16 bits de la somme des compléments à un du message ICMP. Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur. |
Identificateur : | Si le code = 0, un identificateur permettant d'associer la demande et sa réponse, peut être nul. |
Numéro de séquence : | Si le code = 0, un numéro de séquence permettant d'associer la demande et sa réponse. Peut être nul. |
L'identificateur et le numéro de séquence peuvent être utilisés par l'émetteur du message de demande d'information afin d'associer facilement la demande 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 incrémenté pour chaque message de demande d'information envoyé. Le "miroir" respectera ces deux valeurs pour renvoyer le retour.
Les messages de code 0 peuvent provenir d'un routeur ou d'un hôte.
0 | Réponse Echo |
3 | Destination non accessible |
4 | Contrôle de flux |
5 | Redirection |
8 | Echo |
11 | Durée de vie écoulée |
12 | Erreur de Paramètre |
13 | Marqueur temporelle |
14 | Réponse à marqueur temporel |
15 | Demande d'information |
16 | Réponse à demande d'information |
[2] Cerf, V., "The Catenet Model for Internetworking," IEN 48, Information Processing Techniques Office, Defense Advanced Research Projects Agency, July 1978.
[3] Strazisar, V., "Gateway Routing: An Implementation Specification", IEN 30, Bolt Beranek and Newman, April 1979.
[4] Strazisar, V., "How to Build a Gateway", IEN 109, Bolt Beranek and Newman, August 1979.
[5] Mills, D., "DCNET Internet Clock Service," RFC 778, COMSAT Laboratories, April 1981.