ICMP

トラブル発生時に重要な情報を与えてくれるICMPについて説明します。

ICMPの概要

 ICMPは通常の通信でも知らず知らずの内に利用していますが、トラブル対応を行う上では非常に重要なプロトコルになります。

 ICMPは、通常の通信で何故通信出来ないか情報を返したり、通信相手との疎通確認を行うために利用されます。

 ICMPはパケットのデータ部分に組み込まれ、以下のヘッダー構造になっています。

ICMP1

タイプ

 ICMPのヘッダーにあるタイプはICMPの種類を示しています。よく見かけるタイプは以下の通りです。

【ICMPのタイプ】
タイプ 意味 説明
0 echo reply pingに対する応答
3 destination unreachable 宛先のアドレスが不明で届かない
5 redirect よりよい通信経路に変更依頼
8 echo request pingへの応答依頼
11 time exceeded 許容可能なルーターの数を越えたため破棄した

 タイプ0のecho reply、タイプ8のecho requestの詳細は「ping」をご参照下さい。

 タイプ11のtime exceededの詳細は「tracert・traceroute」をご参照下さい。

コード

 ICMPのヘッダーにあるコードはタイプの内容によって変わります。よく見かけるコードはタイプが3のdestination unreachableの時で以下の通りです。

【ICMPのコード】
コード 意味 説明
0 network unreachable 相手ルーターがダウンしてarp解決出来ない等
1 host unreachable サーバーがダウンしてarp解決出来ない等
3 port unreachable サーバーまでたどり着いたが、ポートが解放されていない
4 fragmentation needed and DF set フラグメントが必要だがフラグメント不可ビットが有効
6 destination network unknown 宛先ネットワークがルーティングテーブルに載っていない
13 communication administratively prohibited by filtering 管理上遮断されている

 コード4のfragmentation needed and DF setの詳細は応用編の「フラグメント」をご参照下さい。

 destination unreachableはトラブルでパケットを採取するとよく見るICMPです。

 コード0のnetwork unreachableは途中のルーターまでは届いておりルーティングテーブルにも載っていますが、例として宛先まで届ける事が出来ない時に使われます。この場合、送信元のIPアドレスを確認する事で被疑箇所が特定可能です。

ICMP2

 コード1のhost unreachableは最後のルーターまでは届いているが、例としてサーバーがダウンしてARP解決出来ない時等に使われます。この場合、途中の経路は正常である事が分かります。

ICMP3

 コード3のport unreachableはサーバーまで通信が出来ていますが、サーバーのポートが解放されていない時に使われます。この場合、サーバーまでパケットは届いている事が分かります。

ICMP4

 コード6のdestination network unknownはルーターのルーティングテーブルに載っていない時に使われます。この場合、途中の経路がおかしいか、そもそも存在しないネットワークに対して通信しようとしている事が分かります。

ICMP5

 コード13のcommunication administratively prohibited by filteringは通信が遮断されている時に使われます。この場合、必要な通信であれば透過すればよい事が分かります。

ICMP6

 タイプ5のredirectはルーターに送られてきたパケットの宛先が、同一サブネット内の異なるルーターに送った方がメトリックが小さい時に、直接送信した方が早い事を通知しています。

ICMP7

 このため、データ部分にはそのルーターのIPアドレスが入っています。

留意点

 ICMPのエラーが来ていたらトラブル原因の特定に役立ちますが、ICMPは正確に返さないルーターもいますし、途中で遮断されている事も多いです。

 このため、ICMPのエラーが来ていないだけで相手まで届いているといった判断は出来ません。

  • このエントリーをはてなブックマークに追加