ICMP / Internet Control Message Protocol
■ ICMP。Internet Control Message Protocol。 IPネットワーク向けの管理用プロトコル。 RFC792に規定されている。 IPはコネクションレス型のプロトコルであり、 信頼性のある通信を行うようには設計されていない。 このため、パケット送信後に何らかのエラーが起きても 送信元ホストはその事実を知ることができない。 そこでICMPはこれを補完し、 IPで通信ができなかった場合に送信元にエラー通知をしたり、 さまざまな制御メッセージを交換するなどの メッセージサービスを提供する。 ICMPは、IPと同じネットワーク層プロトコルである。 それにもかかわらず、 ICMPのパケットはIPパケットに格納して運ばれる。 以下にそのパケットフォーマットを記す。 IPヘッダのTOSフィールドには全て0が入り、 またプロトコル番号フィールドには1が入る。 ICMPパケットのヘッダは8バイトからなり、 メッセージタイプやコード等のフィールドを備えている。 ■ ICMPのメッセージ。 ICMPヘッダの先頭1バイトにあるタイプフィールドは、 ICMPメッセージの種別を表している。 以下に主なメッセージタイプとそれが表すメッセージ内容を示す。 +-----------+---------------------------------------------+ | タイプ | メッセージ | +-----------+---------------------------------------------+ | タイプ 0 | エコー応答 Echo Reply | +-----------+---------------------------------------------+ | タイプ 3 | 宛先到達不能 Destination Unreachable | +-----------+---------------------------------------------+ | タイプ 4 | 発信抑制 Source Quench | +-----------+---------------------------------------------+ | タイプ 5 | 最適経路通知、ルート変更 Redirect | +-----------+---------------------------------------------+ | タイプ 8 | エコー要求 Echo Request | +-----------+---------------------------------------------+ | タイプ11 | 時間超過によるパケット廃棄 Time Exceeded | +-----------+---------------------------------------------+ | タイプ12 | パラメータ異常 Parameter Problem | +-----------+---------------------------------------------+ | タイプ13 | タイムスタンプ要求 Timestamp Request | +-----------+---------------------------------------------+ | タイプ14 | タイムスタンプ応答 Timestamp Reply | +-----------+---------------------------------------------+ | タイプ17 | アドレスマスク要求 Address Mask Request | +-----------+---------------------------------------------+ | タイプ18 | アドレスマスク応答 Address Mask Reply | +-----------+---------------------------------------------+ ■ 宛先到達不能メッセージ。 タイプ3のICMPパケットは、 送信元ホストから配送されたIPパケットが宛先ホストに届かなかった場合に ルータまたは宛先ホストから送られるメッセージである。 ICMPタイプ3のメッセージには、 コードフィールドと呼ばれる部分があり、 そこに宛先到達不能エラーの原因、つまり どうして配送することができなかったのかという理由が記される。 以下に具体的なコード値と到達不能原因の対応を記す。 個々のパケットのコード値は、 ネットワークアナライザ等で確認することができる。 +-----------+----------------------------------------------------+ | コード | 到達不能の原因 | +-----------+----------------------------------------------------+ | コード 1 | ネットワークへ到達不能 | +-----------+----------------------------------------------------+ | コード 2 | ホストへ到達不能 | +-----------+----------------------------------------------------+ | コード 3 | プロトコルに到達不能 | +-----------+----------------------------------------------------+ | コード 4 | フラグメントが必要だが、不可に設定されている | +-----------+----------------------------------------------------+ | コード 5 | ソースルートが使用不可 | +-----------+----------------------------------------------------+ | コード 6 | 宛先ネットワークが不明 | +-----------+----------------------------------------------------+ | コード 7 | 宛先ホストが不明 | +-----------+----------------------------------------------------+ | コード 8 | 送信元ホストが分離されている | +-----------+----------------------------------------------------+ | コード 9 | 宛先ネットワークとの通信が禁止されている | +-----------+----------------------------------------------------+ | コード10 | 宛先ホストとの通信が禁止されている | +-----------+----------------------------------------------------+ | コード11 | 指定のサービスタイプでは宛先ネットワークに到達不能 | +-----------+----------------------------------------------------+ | コード12 | 指定のサービスタイプでは宛先ホストに到達不能 | +-----------+----------------------------------------------------+ なお、タイプ3パケットのデータ部分には、 元のIPパケットのヘッダとペイロード部分の先頭64バイトが格納される。 ■ エコー要求/応答メッセージ。 タイプ0/タイプ8のICMPパケットは、 通信したい宛先ホストがあるとき、 そのホストが接続可能な状態かどうかを調べるときに使われる。 まず送信元がタイプ8のエコー要求メッセージを送る。 宛先ホストがそのメッセージを受け取ると タイプを0に書き換えてエコー応答メッセージを送信元ホストへ返す。 これが成功すれば接続性はOKなのだが、 ネットワーク上に障害等があれば、タイプ3が返信されることになる。 このタイプ0/タイプ8のICMPパケットを利用したツールが、 よく使われる ping である。 詳細はこちらを参照のこと。 以上。 2004/01/16 am