Zum Hauptinhalt springen

2. ICMPv6 (ICMP for IPv6)

ICMPv6 wird von IPv6-Knoten verwendet, um bei der Paketverarbeitung auftretende Fehler zu melden und andere Internet-Schicht-Funktionen auszuführen, wie z.B. Diagnosen (ICMPv6 "ping"). ICMPv6 ist ein integraler Bestandteil von IPv6, und das Basisprotokoll (alle von dieser Spezifikation geforderten Nachrichten und Verhaltensweisen) muss von jedem IPv6-Knoten vollständig implementiert werden.

2.1. Allgemeines Nachrichtenformat (Message General Format)

Jeder ICMPv6-Nachricht geht ein IPv6-Header und null oder mehr IPv6-Erweiterungsheader voraus. Der ICMPv6-Header wird durch einen Next Header-Wert von 58 im unmittelbar vorhergehenden Header identifiziert. (Dies unterscheidet sich von dem Wert, der zur Identifizierung von ICMP für IPv4 verwendet wird.)

Die ICMPv6-Nachrichten haben das folgende allgemeine Format:

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

Das Type-Feld gibt den Typ der Nachricht an. Sein Wert bestimmt das Format der verbleibenden Daten.

Das Code-Feld hängt vom Nachrichtentyp ab. Es wird verwendet, um eine zusätzliche Ebene der Nachrichtengranularität zu schaffen.

Das Checksum-Feld wird verwendet, um Datenkorruption in der ICMPv6-Nachricht und Teilen des IPv6-Headers zu erkennen.

ICMPv6-Nachrichten werden in zwei Klassen gruppiert: Fehlernachrichten (Error Message) und Informationsnachrichten (Informational Message). Fehlernachrichten werden als solche durch eine Null im höchstwertigen Bit ihrer Nachrichtentyp-Feldwerte identifiziert. Somit haben Fehlernachrichten Nachrichtentypen von 0 bis 127; Informationsnachrichten haben Nachrichtentypen von 128 bis 255.

Dieses Dokument definiert die Nachrichtenformate für die folgenden ICMPv6-Nachrichten:

ICMPv6-Fehlernachrichten:

  • 1 - Destination Unreachable (Ziel nicht erreichbar) (siehe Abschnitt 3.1)
  • 2 - Packet Too Big (Paket zu groß) (siehe Abschnitt 3.2)
  • 3 - Time Exceeded (Zeit überschritten) (siehe Abschnitt 3.3)
  • 4 - Parameter Problem (Parameterproblem) (siehe Abschnitt 3.4)
  • 100 - Private experimentation (Private Experimente)
  • 101 - Private experimentation (Private Experimente)
  • 127 - Reserved for expansion of ICMPv6 error messages (Reserviert für Erweiterung von ICMPv6-Fehlernachrichten)

ICMPv6-Informationsnachrichten:

  • 128 - Echo Request (Echo-Anforderung) (siehe Abschnitt 4.1)
  • 129 - Echo Reply (Echo-Antwort) (siehe Abschnitt 4.2)
  • 200 - Private experimentation (Private Experimente)
  • 201 - Private experimentation (Private Experimente)
  • 255 - Reserved for expansion of ICMPv6 informational messages (Reserviert für Erweiterung von ICMPv6-Informationsnachrichten)

Die Typwerte 100, 101, 200 und 201 sind für private Experimente reserviert. Sie sind nicht für allgemeine Verwendung vorgesehen.

2.2. Bestimmung der Nachrichtenquelladresse (Message Source Address Determination)

Ein Knoten, der eine ICMPv6-Nachricht erzeugt, muss sowohl die Quell- als auch die Ziel-IPv6-Adressen im IPv6-Header bestimmen, bevor die Prüfsumme berechnet wird. Wenn der Knoten mehr als eine Unicast-Adresse hat, muss er die Quelladresse der Nachricht wie folgt wählen:

(a) Wenn die Nachricht eine Antwort auf eine Nachricht ist, die an eine der Unicast-Adressen des Knotens gesendet wurde, muss die Quelladresse der Antwort dieselbe Adresse sein.

(b) Wenn die Nachricht eine Antwort auf eine Nachricht ist, die an eine andere Adresse gesendet wurde, wie z.B.:

  • eine Multicast-Gruppenadresse,
  • eine vom Knoten implementierte Anycast-Adresse, oder
  • eine Unicast-Adresse, die nicht zum Knoten gehört

muss die Quelladresse des ICMPv6-Pakets eine Unicast-Adresse sein, die zum Knoten gehört. Die Adresse sollte nach den Regeln ausgewählt werden, die zur Auswahl der Quelladresse für jedes andere vom Knoten stammende Paket verwendet würden, unter Berücksichtigung der Zieladresse des Pakets.

2.3. Berechnung der Nachrichten-Prüfsumme (Message Checksum Calculation)

Die Prüfsumme ist das 16-Bit-Einerkomplement der Einerkomplementsumme der gesamten ICMPv6-Nachricht, beginnend mit dem ICMPv6-Nachrichtentyp-Feld, und vorangestellt mit einem "Pseudo-Header" von IPv6-Header-Feldern, wie in [IPv6, Abschnitt 8.1] angegeben. Der im Pseudo-Header verwendete Next Header-Wert ist 58.

Zur Berechnung der Prüfsumme wird das Prüfsummenfeld zuerst auf Null gesetzt.

2.4. Nachrichten-Verarbeitungsregeln (Message Processing Rules)

Implementierungen müssen die folgenden Regeln bei der Verarbeitung von ICMPv6-Nachrichten beachten (aus [RFC-1122]):

(a) Wenn eine ICMPv6-Fehlernachricht eines unbekannten Typs an ihrem Ziel empfangen wird, muss sie an den Oberschichtprozess weitergegeben werden, der das Paket gesendet hat, das den Fehler verursacht hat, wenn dies identifiziert werden kann (siehe Abschnitt 2.4, (d)).

(b) Wenn eine ICMPv6-Informationsnachricht eines unbekannten Typs empfangen wird, muss sie stillschweigend verworfen werden.

(c) Jede ICMPv6-Fehlernachricht (Typ < 128) muss so viel wie möglich vom verletzenden (aufrufenden) IPv6-Paket (das Paket, das den Fehler verursacht hat) enthalten, ohne dass das Fehlernachrichtenpaket das minimale IPv6-MTU [IPv6] überschreitet.

(e) Eine ICMPv6-Fehlernachricht darf nicht als Ergebnis des Empfangs von Folgendem erzeugt werden:

(e.1) Eine ICMPv6-Fehlernachricht.

(e.2) Eine ICMPv6-Redirect-Nachricht [IPv6-DISC].

(e.3) Ein Paket, das für eine IPv6-Multicast-Adresse bestimmt ist. (Es gibt zwei Ausnahmen von dieser Regel: (1) die Packet Too Big Message (Abschnitt 3.2) und (2) die Parameter Problem Message, Code 2 (Abschnitt 3.4).)

(e.4) Ein als Link-Layer-Multicast gesendetes Paket.

(e.5) Ein als Link-Layer-Broadcast gesendetes Paket.

(e.6) Ein Paket, dessen Quelladresse nicht eindeutig einen einzelnen Knoten identifiziert.

(f) Um die Bandbreite und Weiterleitungskosten zu begrenzen, die durch das Erzeugen von ICMPv6-Fehlernachrichten entstehen, muss ein IPv6-Knoten die Rate der von ihm erzeugten ICMPv6-Fehlernachrichten begrenzen.

Eine empfohlene Methode zur Implementierung der Ratenbegrenzungsfunktion ist ein Token-Bucket, der die durchschnittliche Übertragungsrate auf N begrenzt, wobei N entweder Pakete/Sekunde oder ein Bruchteil der Bandbreite des angeschlossenen Links sein kann, aber bis zu B Fehlernachrichten in einem Burst übertragen werden können, solange der Langzeitdurchschnitt nicht überschritten wird.

HINWEIS: DIE EINSCHRÄNKUNGEN UNTER (e) UND (f) OBEN HABEN VORRANG VOR JEDER ANFORDERUNG ANDERSWO IN DIESEM DOKUMENT ZUR ERZEUGUNG VON ICMP-FEHLERNACHRICHTEN.

Die folgenden Abschnitte beschreiben die Nachrichtenformate für die oben genannten ICMPv6-Nachrichten.