ICMPとは
ICMP (読み方:あいしーえむぴー) とは Internet Control Message Protocol の略で、IP 通信の疎通状態を確認したり、問題があるときにエラー情報を返す、IP 通信を補助するプロトコルです。
IP を使って動作しますが、IP と同じレイヤー 3 のプロトコルです。
なお、ICMP は IP ヘッダ内のプロトコル番号 1 です。TCP (プロトコル番号 6) や UDP (プロトコル番号 17) とは違い、ポート番号の概念はありません。
その代わり、タイプ番号とコード番号があります。
ping との違い
ping は ICMP の機能の一部であり、ICMP だからといって、ping とは限りません。
ping の仕組みや、その他の ICMP の具体的な機能 (使われ方) については、次に説明します。
ICMP の具体的な機能(使われ方)
Echo Request (Type 8) / Echo Reply (Type 0)
ping の正体は、ICMP の中で一番有名な使われ方である『Ping 要求【Echo Request】』と『Ping 応答【Echo Reply】』です。
宛先 IP アドレスを指定して Ping 要求を送り、その宛先まで到達できれば送信元へ Ping 応答を返します。これが送信元に戻ってくれば IP ネットワークとして機能している、という評価をすることもできます。
Destination Unreachable (Type 3)
指定した宛先 IP まで到達できない場合はこのタイプの ICMP が送信元 IP に返されます。
例えば IP 通信において、経路途中で宛先 IP アドレスへの通信が不可と分かった場合、その判定を行ったネットワーク機器は【Destination Unreachable】と呼ばれるタイプの ICMP を送信元 IP に送ります。
【Destination Unreachable】は Network Unreachable (code 0) や Host Unreachable (code 1) など、詳細原因毎に個別の Code を持っています。
これらは、ICMP echo に対してだけでなく、例え TCP 通信であっても UDP 通信であっても、IP アドレスによって通信していて宛先 IP アドレスへの通信が不可であれば、通信ができないと判断した NW 機器やホストにより ICMP が返されます。(セキュリティ上の理由で、あえて返さない設定がされていることもあります。)
通常の IP 通信は、返信するときは送信元 IP と宛先 IP を入れ替えて送信しますが、このような (ping 以外の) ICMP についてはそうはならず、送信元 IP は『ICMP を生成する NW 機器 (もしくはホスト)』が保有する IP (返信先への NextHop となるインタフェースの IP) となります。
【Destination Unreachable】となる主な原因は、宛先 IP の機器が ARP を返さない、もしくは経路途中のネットワーク機器が ARP を返さない、といった場合です。
例えばサーバ自体がダウンしていればその手前のルータや L3 スイッチが ARP 解決に失敗したらこの ICMP を返しますし、経路途中のネットワーク機器がダウンしていればやはりその前のルータや L3 スイッチがこの ICMP を返します。
Time Exceeded (Type 11)
ルーティングループが発生したり中継機器が多すぎた等の理由で、IP ヘッダの中にある TTL が 1 のパケットをルーティングしようとした NW 機器が生成するメッセージです。
Windows のコマンドプロンプトで Ping を打ち TTL が 0 になった場合は【TTL Expired】や【TTL が期限切れになりました】と表示されます。
IP redirect (Type 5)
NextHop を最適なものに変更させる【Redirect】という機能もあります。
例えば下記の NW 構成の場合を考えます。
ホスト A が 10.1.9.9 へのパケットを DGW であるルータ A に投げます。ルータ A はルーティングテーブルを見て ルータ B へ転送しますが、このとき受信インタフェースの IP と NextHop の IP が同じセグメントとなっています。
この場合、ホスト A は 10.1.0.0/16 宛の通信は DGW のルータ A へ送るより、ルータ B へ送ったほうが効率的です。なので、ルータ A は【Redirect】によりそのことを通知します。
通知を受けたホスト A は自身のルーティングテーブルにそのルート情報を載せ、次回以降はルータ B へ転送します。
この機能を無効化させたい場合は、端末側の FW で拒否設定するか (Windows ファイアウォールではデフォルトで拒否)、ルータ側で無効設定 (Cisco の場合は no ip redirects) をします。
コメント