【初心者わかりやすく】ICMPを詳しく解説

 ICMP(インターネット制御メッセージプロトコル)は、ネットワークの診断や管理に使用されるネットワークプロトコルです。一番有名なのはPing(エコーリクエストとリプライ)です。ICMPはTCPやUDPのようなポート番号という考え方はありません。あるのは、タイプとコードです。様々なタイプとコードがあるので、有名なものをみていきます。

スポンサーリンク

ICMP エコーリクエストとリプライ (ping)

 まず、代表的にpingを確認します。

R1# ping 192.168.12.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/8/12 ms

 まず、R1からのPingパケットを確認します。エコーリクエストはタイプ8  コード0 であることがわかります。

 R2からのエコーリプライは、タイプ0 コード0 であることがわかります。

スポンサーリンク

ICMP Time-to-live Exceeded

 ルーティングループ等によりIPヘッダのTTLがゼロとなり、パケットが破棄されたことを送信元の通知します。R1とR2でそれぞれデフォルトルートを設定し、存在しない宛先へPingしてみます。(注:Time-to-live Exceededを発生させるために、R1、R2でICMP Redirectを無効にしています)

 以下がパケットキャプチャです。3.3.3.3宛のPingがR1とR2間をピンポンし、TTLが255から一つずつ減っていきます。最後、R2でTTLがゼロになり、R2からR1へICMP Time-to-live Exceeded(タイプ11 コード0)を送信し、パケットを破棄したことを通知します。

スポンサーリンク

ICMP Destination Unreachable

 ホストが宛先に何らかの理由で接続ができない場合、タイプ3としてDestination Unreachableを送信元に通知します。接続できない理由はコードで表します。ここでは、よくみられるコードを確認します。

Port Unreachable

 ホスト上で開いていないTCP/UDPポートへアクセスすると、そのポートにはアクセスできないことを送信元に通知します。(注:TCPの場合は、TCP RSTで通知される場合も多くあります)

 今回はR1からR2にトレースルートを送信します。Ciscoの場合、トレースルートはUDPを使用して送信します。R2は該当のUDPのポートが開いていないので、コード3としてPort Unreachableを送信元に通知します。

Host Unreachable

 ホストが宛先に到達できない(ARP応答がない)場合、コード1として、Host Unreachableを送信元に通知します。

Communication Administratively Prohibited

 ホストがACL(アクセスリスト)でフィルタをして、パケットを破棄した場合、その旨を送信元に通知します。 R2では以下の設定をしています。

R2(config)# access-list 100 deny icmp any any
R2(config)# access-list 100 permit ip any any
R2(config)# interface FastEthernet0/0.12
R2(config-subif)# ip access-group 100 in

 R1からR2へpingを実行すると、R2からコード13として、Communication Administratively Prohibitedを送信元に通知します

スポンサーリンク

ICMP リダイレクト

 ホストが宛先に対して自身より良いネクストホップがある場合、タイプ5 コード1としてICMPリダイレクトを送信元に通知します。送信元は次回よりリダイレクトされたネクストホップへの接続を試みます。

他にもたくさんのタイプとコードがあります。一覧は以下で確認できます。

Internet Control Message Protocol (ICMP) Parameters

Internet Control Message Protocol (ICMP) Parameters

最後までお読み頂きありがとうございました。

コメント