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-list | host-list で指定された緩やかなソース ルートを使用します(IPv4 のみ)。 |
-w timeout | timeout ミリ秒間、応答を待ちます。 |
-R | 往復のパスをトレースします (IPv6 のみ)。 |
-S srcaddr | 使用するソース アドレスです (IPv6 のみ)。 |
-4 | IPv4 の使用を強制します。 |
-6 | IPv6 の使用を強制します。 |
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パケットをフィルタしている場合があります。その場合には、応答が返されません。