用語辞典・通信プロトコル

ICMP

ICMPとは

ICMPは、IP通信のエラー通知や到達確認などに使う制御用プロトコルです。正式名称はInternet Control Message Protocol(インターネット・コントロール・メッセージ・プロトコル)で、アイシーエムピーと読みます。

IPv4ではICMP、IPv6ではICMPv6を使います。TCPやUDPのポートへ届けるアプリデータではなく、IPパケットの中へ制御メッセージとして収容され、ルーターや宛先ホストが元の通信について通知します。

pingのEcho 要求・応答はICMPの一機能にすぎず、到達不能、時間超過、パケットが大きすぎる通知など、IP通信を成立・診断させる重要な役割があります。

転送できなかった装置が、理由と元パケットの抜粋を送信元へ返す到達不能、時間超過、Packet Too Big、Echoを分け、必要な通知をレート制限して通す
端末から複数ルーターを経てサーバーへ向かうIP通信について、到達不能、ホップ上限超過、狭い経路でのPacket Too Bigが元パケット抜粋付き制御メッセージとして戻り、Echo要求と応答、レート制限、ファイアウォールで必要通知を許可する図解
図1ICMPエラーが返らない理由は、到達成功だけではありません。経路、送信元アドレス、レート制限、フィルター、エラー生成規則でも無応答になります。

エラー用と情報用のメッセージを、TypeとCodeで分類する

同じ「届かない」でも、生成位置と理由をメッセージから切り分けるIPv4とIPv6でType番号や詳細Codeが異なるため、版も合わせて読む
Unreachable宛先へ届けられない

経路なし、管理上禁止、待受ポートなしなど、Codeが詳細理由を表す

Time exceeded転送回数を使い切った

TTL・Hop Limitがゼロになった位置や、再構成時間超過を知らせる

Too big次リンクへ大きすぎる

IPv6 Packet Too Bigは次ホップMTUを返し、経路MTU発見へ使う

Parameterヘッダーを解釈できない

問題のあるIPヘッダーフィールド位置などを示し、送信処理へ返す

Echo要求と応答

識別子・シーケンス・データを対応させ、往復到達と時間を測る

Redirectより適切な次ホップ

同一リンク上のルーターがIPv4端末へ経路改善を示す。信頼境界に注意する

図2表は代表例です。ICMPv6は近隣探索にも使われますが、Neighbor Discoveryのメッセージと一般ICMPv6エラーを役割別に扱います。

エラーメッセージには、原因となったIPパケットの先頭部分が入る

送信元が「どの通信への通知か」を判断できるよう、ICMPエラーは原因となったIPパケットのヘッダーと後続データの一部を含めます。TCP・UDPの先頭が入れば、プロトコル、送信元・宛先アドレス、ポートなどから対応するソケットを見つけられます。

NATやトンネルがあると、観測点ごとに内外のヘッダーが異なります。短い抜粋だけでは暗号化された上位通信や深いカプセル化を識別できない場合もあります。受信したICMPの外側送信元と、埋め込まれた元パケットを別々に読みます。

pingはEchoの往復を測るが、アプリサービスの成功までは示さない

pingはEcho 要求を送り、Echo 応答の識別子・番号を対応させ、応答時間と損失を表示します。IP層で相手が応答した手掛かりになりますが、Webサーバー、DNS、認証、アプリ処理が動くことは保証しません。

Echoだけを遮断する機器、レート制限するサーバー、応答を低優先にするルーターがあります。反対にpingが成功しても、TCPポートが閉じていることはあります。ping成功・失敗を結論にせず、調べたいアプリと同じ宛先・ポート・名前解決も確認します。

tracerouteはTTL・Hop Limitを段階的に変え、時間超過の位置を並べる

tracerouteやtracertは、最初のパケットのTTLまたはHop Limitを小さくし、途中ルーターが返すTime Exceededを記録します。値を一つずつ増やし、より遠いホップからの応答を並べます。最終宛先の確認方法はUDP、ICMP Echo、TCPなどツールで異なります。

各ホップ表示は往路で通知を生成した位置ですが、ICMP応答の復路は別経路かもしれません。無応答ホップの先が表示される場合、そこで転送が止まったのではなく、当該ルーターだけが通知しなかった可能性があります。

Packet Too Bigを遮断すると、IPv6の大きな通信だけが止まることがある

IPv6ルーターは途中で断片化せず、出力リンクのMTUより大きいパケットへICMPv6 Packet Too Bigを返します。送信元は通知されたMTUへ合わせてパケットを小さくします。Path MTU Discoveryの中核です。

通知を一律遮断すると、小さなパケットやハンドシェイクは通るのに、大きな応答だけ止まるPMTU black holeになります。IPv4のFragmentation Neededも同様に重要です。ファイアウォールではメッセージ種別、方向、状態、レートを考えて許可します。

エラーへのエラーを際限なく返さず、生成量を制限する

ICMPエラーへ別のICMPエラーを返す、ブロードキャスト宛通信へ大量応答するなどは、ループや増幅を生みます。仕様はエラーを生成しない条件を定め、実装はレート制限します。断片の先頭以外へエラーを返さないなどの規則もあります。

攻撃者は送信元を偽装して大きな応答を被害者へ集めたり、エラー抜粋から通信情報を探ったりできます。ICMPを全部許可・全部拒否の二択にせず、IP版ごとに運用へ必要なType・Codeを通し、異常量を監視します。

仕様の確認資料:RFC 792「Internet Control Message Protocol」RFC 4443「ICMPv6 Specification」RFC 1812「Requirements for IPv4 Routers」

関連用語