ではpingを例に、ICMPv4がどのように動作するのかを簡単に見ていこう。
ICMPv4のメッセージはIPパケットで運ばれる。ただし、TCPやUDPといったトランスポート層のプロトコルは使わない。ICMPv4のメッセージはIPパケットのデータ部にそのまま格納される。
ICMPv4のメッセージにはいくつかの情報が搭載されるが、中でも重要なものがタイプとコードの2つ。それぞれ8ビットの情報で、これらの組み合わせでメッセージの種類や役割が決まる。
pingの場合、タイプが8でコードが0の「エコー要求」と、タイプとコードのいずれも0の「エコー応答」という2種類のメッセージを使う。
pingでは、パソコンでサーバーのIPアドレスを指定してコマンドを実行する。すると、エコー要求のICMPv4メッセージが相手のサーバーに届けられる。サーバーが正常な状態なら、エコー応答のICMPv4メッセージを送信元のパソコンに返す。これでパソコンはサーバーがIPで通信できる状態だと分かる。
アドレスの自動割り当てを実現
ICMPv4はIP通信をサポートする役割を果たすが、ICMPv6は通信に不可欠な役割も担う(PICT2)。
IPv6がIPv4と大きく異なるのは、パソコンとルーターだけでIPアドレスを自動で割り当てられる点だ。ここで使われるのがICMPv6である。IPv6ルーターは、IPv6アドレスのプレフィックス(ネットワーク部を示す前半部分)をネットワーク内にマルチキャストで同報する。これをRA(ルーター広告)と呼ぶ。プレフィックスを受け取ったパソコンは、IPv6アドレスの後半部分を生成し、自分で使うIPv6アドレスを完成させる。このようにDHCPなどの別の仕組みを使わずに、IPv6アドレスを自動で割り当てられる。
このほか、名前解決やIPマルチキャストなど、IPv4では別のプロトコルが担っていた役割もICMPv6が受け持つ。
ICMPv6にも攻撃に悪用されるリスクはある。ただしIPv4とは異なり、IPv6の通信にICMPv6は必須である。このため、安易にフィルタリングするのは禁物だ。実施の際には慎重に検討する必要がある。