tracert / traceroute コマンドと仕組み

 tracert/traceroute コマンドは、宛先までにたどったルートをリストとして表示するためのコマンドです。ネットワーク層をホップバイホップでテストします。

WindowsとLinuxでは、異なったメカニズムで動作します。

まずは、送信元が

  • Windowsでは、ICMPの Echo Requestパケット
  • LinuxではUDPパケット

のパケットを送信します。

 宛先の経路途中にある機器(ルータ)は、ICMPのType11(時間超過)で応答を返します。そして、宛先に到達すると宛先機器は、エコー応答(Echo Reply)で応答します。

Windowsの場合の tracert コマンドは、コマンドプロンプト上から実行します。使用方法は以下の通りです。

●Windowsの場合

【使用法】
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout][-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name

例えば、「www.yahoo.co.jp」への tracert の実行例は、下図のようになります。

 トレースの結果は、最大で30個の経路情報を表示されます。ルータを1つ越える度に、1ホップとして数えるため、30ホップ表示されます。アスタリスク「*」が表示さる場合は、パケットが到達できなかったことを示します。

※ルータや宛先の端末では、セキュリティーを高めるためにICMPパケットをフィルタしている場合があります。その場合にも「*」が表示されます。

●tracert コマンドのオプション

オプション説明
-dアドレスをホスト名に解決しません。
-h maximum_hopsターゲットを検索するときの最大ホップ数です。
-j host-listhost-list で指定された緩やかなソース ルートを使用します(IPv4 のみ)。
-w timeouttimeout ミリ秒間、応答を待ちます。
-R往復のパスをトレースします (IPv6 のみ)。
-S srcaddr使用するソース アドレスです (IPv6 のみ)。
-4IPv4 の使用を強制します。
-6IPv6 の使用を強制します。

tracert / traceroute コマンドの仕組み

tracert / traceroute の動作・仕組みについて解説します。

WindowsとLinuxでは、少し異なったメカニズムで動作します。

1.送信元がTTL値をセットしたパケットを送信する。

TTL値をセットします。

はじめは、TTL=1をセットします。

次からは、TTL=2、その次は、TTL=3、その次は、・・・とTTL値を1つずつ増やしてゆきます。

・Windowsでは、ICMPの Echo Requestパケット
・LinuxではUDPパケット

UDPパケットは、ポート番号 33434~33499 辺りを使用する。

のパケットを送信します。

2.経路途中にある機器がTTL値を「-1」する。

途中経路にある機器(ルータ)は、TTL値を「-1」し、TTL=0 でなければ、次のルータに転送します。

3.経路途中にある機器がICMPのType11(時間超過)で応答を返す。

 経路途中の機器は、TTL=0 になった時点で、ICMPのType11(時間超過)で応答を返し、宛先にまだ到達していなければ、手順1に戻る。TTL値は、手順1に戻るたびに、「+1」される。

4.ICMP Type0のエコー応答(Echo Reply)もしくは、Type3(宛先到達不能)の「Port Unreachable」で応答を送信元に返す。

ここまでの説明を図で表すと下図のようになります。

①最初にTTL=1をセットして、IPパケットを目的の端末へ送信します。

 1つ目のルータは、パケットを受け取り、TTL値を「-1」します。すると、TTL値は「0」になるので、ICMPのType11 のエラーである時間超過(Time Exceeded)を返します。

②次にTTL=2をセットして、IPパケットを目的の端末へ送信します。

 1つ目のルータは、パケットを受け取り、TTL値を「-1」し、次のルータに転送します。2つ目のルータは、TTL値を「-1」します。すると、TTL値は「0」になるので、ICMPのType11 のエラーである時間超過(Time Exceeded)を返します。

③その次に、TTL=3セットして、IPパケットを目的の端末へ送信します。

 1つ目のルータは、パケットを受け取り、TTL値を「-1」し、次のルータに転送します。2つ目のルータは、TTL値を「-1」し、次のルータに転送します。3つ目のルータは、TTL値を「-1」します。すると、TTL値は「0」になるので、ICMPのType11 のエラーである時間超過(Time Exceeded)を返します。

④最後に、TTL=4セットして、IPパケットを目的の端末へ送信します。

 1つ目のルータは、パケットを受け取り、TTL値を「-1」し、次のルータに転送します。2つ目のルータは、TTL値を「-1」し、次のルータに転送します。3つ目のルータは、TTL値を「-1」し、次のルータに転送します。このようにして、宛先の端末に到達するとすると、宛先の端末は、受信するパケットに応じて、ICMP Type0のエコー応答(Echo Reply)もしくは、Type3(宛先到達不能)の「Port Unreachable」を応答として送信元に返します。

※ルータや宛先の端末では、セキュリティーを高めるためにICMPパケットをフィルタしている場合があります。その場合には、応答が返されません。