ICMP活用例(tracerouteコマンド)

ICMPメッセージにICMP時間超過メッセージと宛先到達不能メッセージがありますが、これらのメッセージを利用して送信先から宛先までのパケット経路を追跡するためのコマンドがtracerouteコマンドです。

traceroute(tracert)コマンド

tracerouteコマンドは宛先までの経路(通過するルーター)を調べるためのコマンドです。(Windowsの場合は「tracert」というコマンド名になります。)

ICMP時間超過メッセージ

ICMP時間超過(Time Exceeded)メッセージは、主に以下の2つの状況で出力されます。

①TTLが0になったため、ルーターに破棄された場合
ルータは、IPヘッダのTTLフィールド値が0になると、そのIPパケットを破棄します。
このとき、ルーターはICMP時間超過メッセージを使って、送信元ホストに通知します。

②分割されたIPパケットの再構築に失敗した場合
IPがパケット分割を行った場合、宛先ホスト上で元のパケットに再構築する必要があります。
しかし、分割されたパケットの一部が届かないなどの何らかのトラブルによって再構築に失敗すると、宛先ホストは送信元ホストに対してICMP時間超過メッセージを使って通知します。

この性質のうち①を利用したプログラムがtraceroute(tracert)です。

tracerouteコマンドは、IPヘッダのTTLフィールドと、ICMP時間超過メッセージ、宛先到達不能メッセージを組み合わせることで、「送信元から宛先までのパケットの経路」を追跡します。

tracerouteコマンド

①tracerouteコマンドを実行すると、引数でしていた宛先に対してエコー要求メッセージを送信する。
②このとき、TTLを1に設定する。TTLはそのパケットが経由できるルーターの数を示す値。TTLが1だとひとつめのルーターAでTTLが1減らされて0になる。
③TTLが0になったので、次へは転送せずパケットを破棄する。ルーターAは時間超過メッセージを送信元に返信する。※1
④次にTTLを2にして、再びパケットを宛先に送信する。
⑤今度は、2つ目のルーターBでTTLが0になり、パケットが破棄され、時間超過メッセージを送信元に返信する。

このように宛先までパケットが届くまでTTLをひとつずつ増やしながらエコー要求を送り続けます。宛先にパケットが届くと、エコー応答メッセージが戻ってくるため、ここで終了します。

※1 ルーターは送信元ホストに近いほうのインターフェースから時間超過メッセージを送信します。