2. ICMPv6 (ICMP for IPv6)
ICMPv6は、IPv6ノードがパケット処理中に遭遇したエラーを報告し、診断 (ICMPv6 "ping") のような他のインターネット層機能を実行するために使用されます。ICMPv6はIPv6の不可欠な部分であり、基本プロトコル (本仕様で要求されるすべてのメッセージと動作) は、すべてのIPv6ノードによって完全に実装されなければなりません (MUST)。
2.1. Message General Format (メッセージの一般フォーマット)
すべてのICMPv6メッセージの前には、IPv6ヘッダーと0個以上のIPv6拡張ヘッダーが配置されます。ICMPv6ヘッダーは、直前のヘッダーのNext Header値58によって識別されます (これはIPv4のICMPを識別するために使用される値とは異なります)。
ICMPv6メッセージは次の一般的なフォーマットを持ちます:
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 +
| |
Typeフィールドはメッセージのタイプを示します。その値は残りのデータのフォーマットを決定します。
Codeフィールドはメッセージタイプに依存します。メッセージの粒度の追加レベルを作成するために使用されます。
Checksumフィールドは、ICMPv6メッセージとIPv6ヘッダーの一部のデータ破損を検出するために使用されます。
ICMPv6メッセージは2つのクラスに分類されます: エラーメッセージ (Error Message) と情報メッセージ (Informational Message) です。エラーメッセージは、メッセージTypeフィールド値の最上位ビットのゼロによって識別されます。したがって、エラーメッセージのメッセージタイプは0から127です。情報メッセージのメッセージタイプは128から255です。
本文書は、以下のICMPv6メッセージのメッセージフォーマットを定義します:
ICMPv6エラーメッセージ:
- 1 - Destination Unreachable (宛先到達不可) (Section 3.1を参照)
- 2 - Packet Too Big (パケットサイズ超過) (Section 3.2を参照)
- 3 - Time Exceeded (時間超過) (Section 3.3を参照)
- 4 - Parameter Problem (パラメータ問題) (Section 3.4を参照)
- 100 - Private experimentation (プライベート実験)
- 101 - Private experimentation (プライベート実験)
- 127 - Reserved for expansion of ICMPv6 error messages (ICMPv6エラーメッセージの拡張用に予約)
ICMPv6情報メッセージ:
- 128 - Echo Request (エコー要求) (Section 4.1を参照)
- 129 - Echo Reply (エコー応答) (Section 4.2を参照)
- 200 - Private experimentation (プライベート実験)
- 201 - Private experimentation (プライベート実験)
- 255 - Reserved for expansion of ICMPv6 informational messages (ICMPv6情報メッセージの拡張用に予約)
2.2. Message Source Address Determination (メッセージ送信元アドレスの決定)
ICMPv6メッセージを発信するノードは、チェックサムを計算する前に、IPv6ヘッダー内の送信元アドレス (Source Address) と宛先アドレス (Destination Address) の両方を決定する必要があります。ノードが複数のユニキャストアドレスを持っている場合、次のようにメッセージの送信元アドレスを選択しなければなりません (MUST):
(a) メッセージがノードのユニキャストアドレスの1つに送信されたメッセージへの応答である場合、応答の送信元アドレスは同じアドレスでなければなりません (MUST)。
(b) メッセージが、マルチキャストグループアドレス、ノードによって実装されたエニーキャストアドレス、またはノードに属さないユニキャストアドレスなど、他のアドレスに送信されたメッセージへの応答である場合、ICMPv6パケットの送信元アドレスは、ノードに属するユニキャストアドレスでなければなりません (MUST)。アドレスは、パケットの宛先アドレスを考慮して、ノードから発信される他のパケットの送信元アドレスを選択するために使用されるルールに従って選択されるべきです (SHOULD)。
2.3. Message Checksum Calculation (メッセージチェックサムの計算)
チェックサムは、ICMPv6メッセージタイプフィールドから始まるICMPv6メッセージ全体と、[IPv6, Section 8.1] で指定されているIPv6ヘッダーフィールドの「疑似ヘッダー (pseudo-header)」を前置した、1の補数和の16ビット1の補数です。疑似ヘッダーで使用されるNext Header値は58です。
チェックサムを計算するために、チェックサムフィールドは最初にゼロに設定されます。
2.4. Message Processing Rules (メッセージ処理ルール)
実装は、ICMPv6メッセージを処理する際に、以下のルールを遵守しなければなりません (MUST) ([RFC-1122] から):
(a) 未知のタイプのICMPv6エラーメッセージが宛先で受信された場合、それは、識別可能な場合 (Section 2.4, (d) を参照)、エラーを引き起こしたパケットを発信した上位層プロセスに渡されなければなりません (MUST)。
(b) 未知のタイプのICMPv6情報メッセージが受信された場合、それは黙って破棄されなければなりません (MUST)。
(c) すべてのICMPv6エラーメッセージ (type < 128) は、エラーメッセージパケットが最小IPv6 MTU [IPv6] を超えないようにしながら、できるだけ多くのIPv6違反 (呼び出し) パケット (エラーを引き起こしたパケット) を含まなければなりません (MUST)。
(e) 以下を受信した結果としてICMPv6エラーメッセージを発信してはなりません (MUST NOT):
(e.1) ICMPv6エラーメッセージ。
(e.2) ICMPv6リダイレクトメッセージ [IPv6-DISC]。
(e.3) IPv6マルチキャストアドレス宛てのパケット。
(e.4) リンク層マルチキャストとして送信されたパケット。
(e.5) リンク層ブロードキャストとして送信されたパケット。
(e.6) 送信元アドレスが単一のノードを一意に識別しないパケット。
(f) ICMPv6エラーメッセージを発信することによって発生する帯域幅と転送コストを制限するために、IPv6ノードは、発信するICMPv6エラーメッセージのレートを制限しなければなりません (MUST)。
注意: 上記の (e) および (f) の下の制限は、ICMPエラーメッセージを発信するための本文書の他の場所の要件よりも優先されます。
以下のセクションでは、上記のICMPv6メッセージのメッセージフォーマットについて説明します。