ICMPの重要な役割の1つは、パケットの廃棄など、IPによる通信経路の途中で発生したさまざまなエラーを、送信元に伝えることです。
また、ネットワークから情報を収集するためにも使われます。例えばpingやtracerouteなどのプログラムは、エコー要求/エコー応答といったICMPメッセージを使っています。
ICMPで通知された情報は、あるときにはIPの上位プロトコルに通知され、別の場合には何らかの処理が起動されます。IPとICMPは定義としては別のプロトコルですが、仕組みとして一体化したプロトコルと言えます。
ICMPv6とは
ICMPv6は、ICMPの機能を引き継ぐだけでなく、IPv4でのブロードキャストの代わりにもなるマルチキャスト用のIGMP(Internet Group Management Protocol)の機能や、アドレス解決用のARP/RARP(Address Resolution Protocol/Reverse ARP)の機能なども含んでいます。
また、RFC1256で拡張されたICMPを使うルーター発見プロトコルについては、IPv6が持つ自動設定機能として近隣探索プロトコル(NDP:Neighbor Discovery Protocol)に取り込まれました。NDPは、ICMPv6のメッセージとして定義されています。
エラーと情報通知の2タイプ
ICMPv6パケットは、IPv6ヘッダー内の「次ヘッダー」に58が指定されます。IPv6ヘッダーに続くのはICMPv6メッセージであり、4バイトのメッセージ・ヘッダーと、メッセージ本体から構成されます(図1の上)。
ICMPv6メッセージ・ヘッダーは、「タイプ」、「コード」、「チェックサム」からなります。メッセージの種類を表すタイプは、1バイトで0~255の範囲になります。前半の0~127がエラー・メッセージ用、後半の128~255は情報通知用です。
次の「コード」フィールドは付加的な情報を表します。コードが定義されていないタイプでは、ゼロになります。
チェックサムは、パケット書き換えエラーなどを検出するためのものです。仮想ヘッダー(図2)を前に置き、チェックサムを計算します。仮想ヘッダーは、TCPなどICMPv6以外のプロトコルでも利用します。
メッセージ本体には、ICMPv6で通知される情報や、エラーとなったパケットの一部などが入ります。IPv6は、最小MTU(Maximum Transfer Unit)値が「1280バイト」なので、ICMPv6のパケット・サイズ(IPv6ヘッダー、ICMPv6ヘッダー、ICMPv6メッセージ本体の合計)は、これ以下に制限されます。
ICMPv6で定義されたタイプは、9種類です(表1)。このほかNDP用に5種類のメッセージが定義されています。一方ICMPでは、27個のメッセージが定義されています。ICMPで定義されていてICMPv6では定義されなかったのは、例えば「アドレス・マスク要求/応答」です。アドレス・マスク要求/応答は、IPv6ではNDPに同等の機能が入っています。