概要
ICMP for IPv6 (IPv6 のためのインターネット制御メッセージ・プロトコル,Internet Control Message Protocol for IPv6.以下 ICMPv6 と略記) は IPv6 において用いられるデータグラム処理における誤りの通知や通信に関する情報の通知などのために使用されるプロトコルである. IPv6 では ICMPv6 の枠組みを利用して,アドレス解決やアドレス重複検出などにも利用し,type 番号も ICMP (IPv4) のものとは違う番号が定義し直されているので,IPv4 の ICMP とは異なる新しいプロトコルとして定義されている. プロトコル番号は 58. RFC 4443 によって規定されている.
メッセージ形式
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) は下記のとおりである. エラー通知は 127 以下,そうでないものは 128 以上の値が定義される.
- 1 宛先不達 (Destination Unreachable) RFC 4863 Section 3.1
- 2 パケット過大 (Packet too Big) RFC 4863 Section 3.2
- 3 時間切れ (Time Exceeded) RFC 4863 Section 3.3
- 4 パラメータ異常 (Parameter Problem) RFC 4863 Section 3.4
- 128 エコー要求 (Echo Request) RFC 4863 Section 4.1
- 129 エコー応答 (Echo Reply) RFC 4863 Section 4.2
- 130 マルチキャスト・リスナ照会 (Multicast Listener Query) RFC 2710 Sectino 3.1
- 131 マルチキャスト・リスナ報告 (Multicast Listener Report) RFC 2710 Sectino 3.1
- 132 マルチキャスト・リスナ終了 (Multicast Listener Done) RFC 2710 Sectino 3.1
- 133 ルータ要請 (Router Solicitation) RFC 4861 Section 4.1
- 134 ルータ広告 (Router Advertisement) RFC 4861 Section 4.2
- 135 近隣者要請 (Neighbor Solicitation) RFC 4861 Section 4.3
- 136 近隣者広告 (Neighbor Advertisement) RFC 4861 Section 4.4
- 137 リダイレクト (Redirect) RFC 4861 Section 4.5
- 138 ルータ・リナンバ (Router Renumber) RFC 2894 Section 3.1
- 141 逆近隣者探索要請 (Inverse Neighbor Discovery Solicitation) RFC 3122 Section 2.1
- 142 逆近隣者探索広告 (Inverse Neighbor Discovery Advertisement) RFC 3122 Section 2.2
- 144 ホーム・エージェント・アドレス発見要求 (Home Agent Address Discovery Request) RFC 3775 Section 6.5
- 145 ホーム・エージェント・アドレス発見応答 (Home Agent Address Discovery Reply) RFC 3775 Section 6.6
- 146 モバイル・プレフィクス要請 (Mobile Prefix Solicitation) RFC 3775 Section 6.7
- 147 モバイル・プレフィクス広告 (Mobile Prefix Advertisement) RFC 3775 Section 6.8
ルータ広告
ルータ広告はは ICMPv4 においても定義されている (RFC 1256) が,IPv6 では DHCP などのようなアドレス割当用サーバがなくても,ノードが自力でアドレスを設定する (ステートレス・アドレス自動設定 (RFC 4862)) 手段を提供するために,積極的にこのルータ広告が利用されている. これも広い意味での近隣者発見 (Neighbor Discovery) であり,RFC 4861 で規定されている.
ステートレス・アドレス自動設定重複アドレス検出
アドレスを手動で設定したり,ステートレス・アドレス自動設定でつけた場合は,そのアドレスの一意性を確認できないので,重複アドレス検出 (Duplicate Address Detection, DAD) によってその一意性を確認する. RFC 4862 Section 5.4 において規定されている.
あるノードにアドレスがつけられると,そのアドレスは “TENTATIVE” という状態になり,アドレスの重複検出を行う. これは target アドレスにその重複検出をするアドレスを入れた,アドレス解決で利用される近隣者要請 (Neighbor Solicitation) を送出するものである. もし,既にそのアドレスを使っているノードがあれば近隣者広告 (Neighbor Advertisement, NA) を返すので,アドレスの重複が検出できる. 1 秒以内に NA が返ってこないと,そのアドレスは重複無しと判断され,利用可能アドレスとなる.
パス MTU 発見 (Path MTU Discovery)
IPv6 のパケット断片化は配送中のルータではなく,送信元のみで行われるので,送信元は配送される全経路で通過できるパケットのサイズ (パス MTU) を知らなければならない. これを行うのがパス MTU 発見である. RFC 1981 において規定されている.
参考文献
この項目の記述にあたっては Wikipedia の Internet Control Message Protocol for IPv6 の項目を参照した.