tracert(トレースルート)の使い方と結果の見方 — どこで止まっているかを調べる
ping が通らないとき、次に知りたいのは「どこまでは届いていて、どこで止まっているのか」です。それを1台ずつ順に確かめるのが tracert(トレースルート)です。この記事では、日本語版Windowsで実際に表示される画面をもとに、使い方と結果の読み方、止まっているように見えても問題ないケースを説明します。
tracertの仕組み — TTLを1つずつ増やして送る
IPのパケットには、TTL(Time To Live)という「あと何台のルーターを通れるか」を表す数字が付いています。ルーターを1台越えるたびに1減り、0になるとそのルーターがパケットを捨てて、送り主に「期限切れ」の通知(ICMPの時間超過メッセージ)を返します。
tracertはこの仕組みを利用します。TTLを1にして送ると1台目のルーターが、2にして送ると2台目のルーターが通知を返すので、TTLを1つずつ増やしていけば、通知を返してきたルーターを順番に並べることができます。これが経路の一覧になります。pingで「転送中に TTL が期限切れになりました。」と出るのも同じ仕組みです(pingのエラー表示)。
使い方とオプション
コマンドプロンプトかPowerShellで、宛先のIPアドレスか名前を付けて実行します。
tracert www.example.com
tracert -d 203.0.113.10
| やりたいこと | Windows(tracert) | Linux(traceroute) |
|---|---|---|
| 途中のルーターの名前を引かずに速く終わらせる | -d | -n |
| 調べる最大の台数(ホップ数)を決める | -h 15(既定は30) | -m 15(既定は30) |
| 1回の応答を待つ時間 | -w 1000(ミリ秒) | -w 1(秒) |
| IPv4/IPv6を指定する | -4 / -6 | -4 / -6 |
何も付けないと、途中のルーターごとに名前解決(DNSの逆引き)をするので時間がかかります。経路を確かめたいだけなら、-d を付けるのがおすすめです。
結果の見方
tracert -d を実行すると、次のように表示されます(IPアドレスは説明用の値に置き換えています)。
203.0.113.10 へのルートをトレースしています。経由するホップ数は最大 30 です
1 <1 ms <1 ms <1 ms 192.168.1.1
2 8 ms 6 ms 6 ms 198.51.100.1
3 3 ms 3 ms 3 ms 198.51.100.33
4 12 ms 11 ms 12 ms 198.51.100.70
5 12 ms 11 ms 12 ms 203.0.113.10
トレースを完了しました。
| 部分 | 意味 |
|---|---|
| 左端の数字(1〜5) | 何台目か(ホップ数)。1台目はたいてい自宅や社内のルーター(デフォルトゲートウェイ) |
| 3つの時間 | そのルーターまでの往復時間。1台につき3回ずつ送って、それぞれの結果を表示する |
| 右端のアドレス | 通知を返してきたルーター。最後の行が宛先のアドレスなら、宛先まで届いている |
時間は「宛先までの合計」ではなく、「そのルーターまでの往復時間」です。そのため、上の例のように2台目(8ms)より3台目(3ms)のほうが短い、ということも普通に起こります。
「*」と「要求がタイムアウトしました。」の読み方
時間の代わりに * が並び、「要求がタイムアウトしました。」と表示される行は、待ち時間のうちに通知が返ってこなかったことを表します。ただし、それだけで「そこで止まっている」とは言えません。どの行に出ているかで意味が変わります。
途中の1行だけ「*」で、その先は表示が続く場合は、問題ありません。そのルーターが、通知を返さない設定になっているだけです。パケット自体はそのルーターを通って先へ進んでいます。
ある行から最後までずっと「*」が続く場合は、その手前までは届いていて、そこから先で止まっている可能性が高い、と読みます。実際に、存在しない宛先(説明用のアドレス 192.0.2.1)に試すと、次のようになりました。
4 22 ms 19 ms 20 ms 198.51.100.70
5 * * * 要求がタイムアウトしました。
6 * * * 要求がタイムアウトしました。
7 * * * 要求がタイムアウトしました。
4台目まではプロバイダーの中で応答があり、その先は行き先がないので、通知が返ってきません。
注意したいのは、宛先そのものが応答しない設定になっている場合です。Windowsは、標準のファイアウォールの設定ではpingに応答しないため、tracertでも最後の数行がタイムアウトになることがあります。この場合は、途中のルーターまでは届いているので、宛先のサービスのポートまで届くかを Test-NetConnection 宛先 -Port 番号 で確かめます(ポートの確認方法)。
遅い場所の見分け方
時間がある行から急に増えて、その先もずっと大きいままなら、そこから先の区間で時間がかかっています。海外のサーバーなら、海を越える区間で数十〜百数十ms増えるのは普通です。
反対に、途中の1行だけ時間が大きく、次の行で元に戻るなら、そのルーターが通知を返す処理を後回しにしているだけで、通信そのものは遅くなっていません。ルーターにとって、通知を返すことは本来の仕事(パケットの中継)より優先度が低いためです。
「ターゲット システム名 … を解決できません。」と出たら
宛先の名前からIPアドレスを調べられなかった、という意味です。経路の問題ではなく、名前解決(DNS)の問題なので、nslookup 名前 で引けるか、IPアドレスを直接指定するとtracertできるかを確かめます。手順は 名前解決できない時の確認方法 にまとめています。
Linuxのtracerouteとの違い
Windowsのtracertはpingと同じICMPのエコー要求を使いますが、Linuxの traceroute は、標準ではUDPのパケットを使います。そのため、ファイアウォールの設定によっては「Windowsでは最後まで届くのにLinuxでは途中で止まる」、またはその逆が起こります。Linuxで traceroute -I を付けるとICMPで送るので、Windowsと条件をそろえて比べられます。
PowerShellで調べる
PowerShellでは Test-NetConnection 宛先 -TraceRoute でも経路を調べられます。結果の TraceRoute 欄に、通ったルーターのIPアドレスが順番に入ります。また、pathping 宛先 は、経路を調べたあと各ルーターに一定時間パケットを送り続け、どこでパケットが失われているかを数字で表示します。完了まで数分かかりますが、「ときどき途切れる」ような症状を調べるときに役立ちます。
つながらない時の調べ方の中での位置づけ
tracertは、ping で宛先まで届かないことが分かったあとに、「どこまで届いているか」を調べるために使います。順番としては、①自分のIP設定(ipconfig)→ ②デフォルトゲートウェイへのping → ③宛先へのping → ④届かなければtracertで止まっている場所を探す、という流れです。ping側の切り分けの手順は pingの記事 で解説しています。
よくある質問
Q. tracertの最後が「要求がタイムアウトしました。」で終わったら、相手に届いていない?
A. 届いていないとは限りません。宛先がpingやtracertの通知に応答しない設定になっていることがあります。途中まで順に応答が返っているなら、Test-NetConnection 宛先 -Port 番号 で、使いたいサービスのポートまで届くかを確かめてください。
Q. tracertが終わるまでとても時間がかかるのは?
A. 途中のルーターごとに名前解決をしているか、応答のない行で待たされているためです。-d で名前解決を止め、-w 500 などで待ち時間を短くすると速く終わります。
Q. 1行目のアドレスは何?
A. 多くの場合、自分のPCが最初にパケットを渡すルーター、つまりデフォルトゲートウェイです。ipconfig で表示されるデフォルトゲートウェイと同じアドレスになっているはずです。1行目から「*」になる場合は、PCからルーターまでの間(LANケーブル、Wi-Fi、IP設定)を先に確かめます。
🔗 関連:pingの使い方と結果の見方 / ポート番号とは(一覧と確認方法) / DNSと名前解決の確認方法 / ルーティングの可視化