Aller au contenu principal

2. ICMPv6 (ICMP for IPv6)

ICMPv6 est utilisé par les nœuds IPv6 pour signaler les erreurs rencontrées lors du traitement des paquets et pour effectuer d'autres fonctions de couche Internet, telles que les diagnostics (ICMPv6 "ping"). ICMPv6 fait partie intégrante d'IPv6, et le protocole de base (tous les messages et comportements requis par cette spécification) doit être entièrement implémenté par chaque nœud IPv6.

2.1. Format général des messages (Message General Format)

Chaque message ICMPv6 est précédé d'un en-tête IPv6 et de zéro ou plusieurs en-têtes d'extension IPv6. L'en-tête ICMPv6 est identifié par une valeur Next Header de 58 dans l'en-tête immédiatement précédent. (Ceci est différent de la valeur utilisée pour identifier ICMP pour IPv4.)

Les messages ICMPv6 ont le format général suivant :

    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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Message Body +
| |

Le champ Type indique le type du message. Sa valeur détermine le format des données restantes.

Le champ Code dépend du type de message. Il est utilisé pour créer un niveau supplémentaire de granularité du message.

Le champ Checksum est utilisé pour détecter la corruption des données dans le message ICMPv6 et certaines parties de l'en-tête IPv6.

Les messages ICMPv6 sont regroupés en deux classes : les messages d'erreur (Error Message) et les messages informatifs (Informational Message). Les messages d'erreur sont identifiés comme tels par un zéro dans le bit de poids fort de leurs valeurs de champ Type de message. Ainsi, les messages d'erreur ont des types de message de 0 à 127 ; les messages informatifs ont des types de message de 128 à 255.

Ce document définit les formats de message pour les messages ICMPv6 suivants :

Messages d'erreur ICMPv6 :

  • 1 - Destination Unreachable (Destination inaccessible) (voir Section 3.1)
  • 2 - Packet Too Big (Paquet trop grand) (voir Section 3.2)
  • 3 - Time Exceeded (Temps dépassé) (voir Section 3.3)
  • 4 - Parameter Problem (Problème de paramètre) (voir Section 3.4)
  • 100 - Private experimentation (Expérimentation privée)
  • 101 - Private experimentation (Expérimentation privée)
  • 127 - Reserved for expansion of ICMPv6 error messages (Réservé pour l'expansion des messages d'erreur ICMPv6)

Messages informatifs ICMPv6 :

  • 128 - Echo Request (Demande d'écho) (voir Section 4.1)
  • 129 - Echo Reply (Réponse d'écho) (voir Section 4.2)
  • 200 - Private experimentation (Expérimentation privée)
  • 201 - Private experimentation (Expérimentation privée)
  • 255 - Reserved for expansion of ICMPv6 informational messages (Réservé pour l'expansion des messages informatifs ICMPv6)

Les valeurs de type 100, 101, 200 et 201 sont réservées pour l'expérimentation privée. Elles ne sont pas destinées à un usage général. Il est prévu que plusieurs expérimentations simultanées seront effectuées avec les mêmes valeurs de type. Toute utilisation à grande échelle et/ou non contrôlée devrait obtenir de vraies allocations comme défini dans la Section 6.

2.2. Détermination de l'adresse source du message (Message Source Address Determination)

Un nœud qui émet un message ICMPv6 doit déterminer à la fois l'adresse source et l'adresse de destination IPv6 dans l'en-tête IPv6 avant de calculer la somme de contrôle. Si le nœud a plus d'une adresse unicast, il doit choisir l'adresse source du message comme suit :

(a) Si le message est une réponse à un message envoyé à l'une des adresses unicast du nœud, l'adresse source de la réponse doit être cette même adresse.

(b) Si le message est une réponse à un message envoyé à toute autre adresse, telle que :

  • une adresse de groupe multicast,
  • une adresse anycast implémentée par le nœud, ou
  • une adresse unicast qui n'appartient pas au nœud

l'adresse source du paquet ICMPv6 doit être une adresse unicast appartenant au nœud. L'adresse devrait être choisie selon les règles qui seraient utilisées pour sélectionner l'adresse source pour tout autre paquet émis par le nœud, compte tenu de l'adresse de destination du paquet.

2.3. Calcul de la somme de contrôle du message (Message Checksum Calculation)

La somme de contrôle est le complément à un sur 16 bits de la somme en complément à un de l'ensemble du message ICMPv6, commençant par le champ de type de message ICMPv6, et précédé d'un "pseudo-en-tête" de champs d'en-tête IPv6, comme spécifié dans [IPv6, Section 8.1]. La valeur Next Header utilisée dans le pseudo-en-tête est 58.

Pour calculer la somme de contrôle, le champ de somme de contrôle est d'abord mis à zéro.

2.4. Règles de traitement des messages (Message Processing Rules)

Les implémentations doivent observer les règles suivantes lors du traitement des messages ICMPv6 (d'après [RFC-1122]) :

(a) Si un message d'erreur ICMPv6 de type inconnu est reçu à sa destination, il doit être transmis au processus de couche supérieure qui a émis le paquet ayant causé l'erreur, lorsque cela peut être identifié (voir Section 2.4, (d)).

(b) Si un message informatif ICMPv6 de type inconnu est reçu, il doit être ignoré silencieusement.

(c) Chaque message d'erreur ICMPv6 (type < 128) doit inclure autant que possible du paquet IPv6 fautif (invoquant) (le paquet qui a causé l'erreur) sans que le paquet de message d'erreur ne dépasse le MTU IPv6 minimum [IPv6].

(d) Dans les cas où le protocole de couche Internet est requis pour transmettre un message d'erreur ICMPv6 au processus de couche supérieure, le type de protocole de couche supérieure est extrait du paquet original (contenu dans le corps du message d'erreur ICMPv6) et utilisé pour sélectionner le processus de couche supérieure approprié pour gérer l'erreur.

(e) Un message d'erreur ICMPv6 ne doit pas être émis suite à la réception des éléments suivants :

(e.1) Un message d'erreur ICMPv6.

(e.2) Un message de redirection ICMPv6 [IPv6-DISC].

(e.3) Un paquet destiné à une adresse multicast IPv6. (Il existe deux exceptions à cette règle : (1) le message Packet Too Big (Section 3.2) pour permettre à la découverte du MTU de chemin de fonctionner pour IPv6 multicast, et (2) le message Parameter Problem, Code 2 (Section 3.4) signalant une option IPv6 non reconnue.)

(e.4) Un paquet envoyé en tant que multicast de couche liaison.

(e.5) Un paquet envoyé en tant que broadcast de couche liaison.

(e.6) Un paquet dont l'adresse source n'identifie pas de manière unique un seul nœud.

(f) Enfin, afin de limiter la bande passante et les coûts de transmission encourus en émettant des messages d'erreur ICMPv6, un nœud IPv6 doit limiter le taux de messages d'erreur ICMPv6 qu'il émet. Cette situation peut se produire lorsqu'une source envoyant un flux de paquets erronés ne tient pas compte des messages d'erreur ICMPv6 résultants.

Une méthode recommandée pour implémenter la fonction de limitation de débit est un seau à jetons (token bucket), limitant le taux de transmission moyen à N, où N peut être soit des paquets/seconde soit une fraction de la bande passante du lien attaché, mais permettant jusqu'à B messages d'erreur d'être transmis en rafale, tant que la moyenne à long terme n'est pas dépassée.

NOTE : LES RESTRICTIONS SOUS (e) ET (f) CI-DESSUS ONT LA PRIORITÉ SUR TOUTE EXIGENCE AILLEURS DANS CE DOCUMENT POUR L'ÉMISSION DE MESSAGES D'ERREUR ICMP.

Les sections suivantes décrivent les formats de message pour les messages ICMPv6 ci-dessus.