こんにちは、フルスタックエンジニアのryuです。
Webサイトへ接続できない。通信が遅い。どこまでパケットが届いているのか確認したい。
そんなときに使えるのが、tracerouteとtracertコマンドです。
どちらも、手元のパソコンから宛先まで、どのような経路を通っているのか確認できます。
Windowsではtracert、LinuxやmacOSではtracerouteを使います。
この記事では、コマンドの使い方だけでなく、表示された経路や* * *の意味、pingとの違いまで初心者向けに解説します。
traceroute・tracertとは¶
tracerouteは、宛先までに経由するルーターや、各経路から応答が返るまでの時間を確認するコマンドです。
ネットワーク障害の調査で、どの区間まで応答があるのか確認するときに使います。
OSによってコマンド名が異なります。
| OS | コマンド |
|---|---|
| Windows | tracert |
| Linux | traceroute |
| macOS | traceroute |
WindowsでGoogleへの経路を確認する場合は、以下のように実行します。
tracert google.com
LinuxやmacOSでは、以下の通りです。
traceroute google.com
traceroute 8.8.8.8
Windowsでtracertを使う¶
Windowsでは、コマンドプロンプトまたはPowerShellを開きます。
ホスト名から経路を確認する場合は、以下のコマンドを実行してください。
tracert google.com
名前解決を行わず、IPアドレスだけを表示したい場合は-dを付けます。
tracert -d google.com
-dを付けると、各IPアドレスをホスト名へ変換しません。
名前解決を待たないため、結果が早く表示されることがあります。

画像では、手元のパソコンから宛先まで、複数の経路が表示されています。
左側の数字は、宛先までに通過する順番です。この単位をホップと呼びます。
Windowsでよく使うオプション¶
tracertでよく使うオプションは以下です。
| オプション | 内容 |
|---|---|
-d |
IPアドレスからホスト名への変換を行わない |
-h 数字 |
最大ホップ数を指定する |
-w 数字 |
応答を待つ時間をミリ秒で指定する |
-4 |
IPv4を使用する |
-6 |
IPv6を使用する |
例えば、最大ホップ数を15にする場合は以下のように実行します。
tracert -d -h 15 google.com
Linuxでtracerouteを使う¶
Linuxでは、以下のコマンドを実行します。
traceroute google.com
Windowsの-dに近い使い方をしたい場合は、-nを付けます。
traceroute -n google.com
-nを付けると、ホスト名へ変換せず、IPアドレスのまま表示します。
tracerouteが見つからない場合¶
Linuxでは、tracerouteが最初から入っていないことがあります。
UbuntuやDebian系では、以下のコマンドでインストールします。
sudo apt update
sudo apt install traceroute
RHEL、Rocky Linux、AlmaLinuxなどでは、以下のように実行します。
sudo dnf install traceroute
インストール後に、もう一度確認してください。
traceroute -n 8.8.8.8
ICMPやTCPを使って確認する¶
Linuxのtracerouteでは、通常はUDPを使って経路を確認します。
ICMP Echoを使いたい場合は、-Iを指定します。
sudo traceroute -I 8.8.8.8
TCPを使いたい場合は、-Tを指定します。
sudo traceroute -T -p 443 example.com
ネットワークによってはUDPやICMPが制限されていることがあります。
通常のtracerouteで途中から応答がない場合は、確認する通信方式を変えると結果が変わることがあります。
macOSでも、ターミナルからLinuxと同じようにtracerouteを実行できます。
traceroute -n google.com
利用できるオプションは環境によって異なるため、詳しくはman tracerouteで確認してください。
tracerouteの結果の見方¶
Linuxでtracerouteを実行すると、次のような結果が表示されます。
traceroute to example.com (203.0.113.10), 30 hops max
1 192.168.1.1 1.021 ms 0.854 ms 0.903 ms
2 198.51.100.1 8.124 ms 8.301 ms 8.212 ms
3 203.0.113.10 15.432 ms 15.201 ms 15.388 ms
1行目の1、2、3はホップの順番です。
続くIPアドレスは、そのホップで応答を返したルーターや機器のインターフェースです。
最後に表示される3つの時間は、送信した複数の確認パケットに対する往復時間です。
単位はミリ秒です。
3つの時間が表示される理由¶
tracerouteは、通常、同じTTLで複数回の確認パケットを送信します。
そのため、各ホップに3つの応答時間が表示されます。
8.124 ms 8.301 ms 8.212 ms
少しずつ数字が違うのは、通信の混雑状況などによって応答時間が変化するためです。
ただし、あるホップの数字が大きいだけで、そのルーターに障害があるとは断定できません。tracerouteへの応答を低い優先度で処理する機器もあるためです。
* * *と表示される理由¶
tracerouteやtracertでは、次のようにアスタリスクが表示されることがあります。
4 * * *
これは、指定された時間内に応答を受け取れなかったという意味です。
ただし、その場所で通信が完全に止まっているとは限りません。
ルーターやファイアウォールが、ICMPの応答を返さない設定になっていることがあります。
途中で* * *が表示されても、その後のホップや最終的な宛先から応答が返っていれば、通信そのものは先へ進んでいます。
一方、あるホップから最後までアスタリスクが続き、宛先にも接続できない場合は、その付近の経路や設定を調べる必要があります。
tracerouteは実際の経路を必ずすべて表示するわけではない¶
tracerouteの結果は、ネットワーク調査の手がかりになります。
しかし、通信経路を完全に再現した地図ではありません。
応答を返さない機器や負荷分散があると、経路の一部が表示されなかったり、実行ごとに結果が変わったりします。
そのため、1回の結果だけで原因を断定しないようにしましょう。
時間を空けて複数回実行したり、別の端末から確認したりすると、状況を比較できます。
tracerouteの仕組み¶
tracerouteは、IPパケットのTTLを利用しています。
TTLはTime to Liveの略です。
名前だけを見ると時間のようですが、通常はパケットが通過できるルーターの回数として使われます。
ルーターを1台通過するたびに、TTLは1ずつ減ります。
TTLが0になると、ルーターはパケットを破棄し、送信元へICMP Time Exceededを返します。
tracerouteは、最初にTTLを1にしてパケットを送ります。
すると、1台目のルーターでTTLが0になり、そのルーターから応答が返ります。
次はTTLを2にして送ります。
今度は2台目のルーターから応答が返ります。
このようにTTLを1ずつ増やし、応答した機器を順番に表示することで、宛先までの経路を確認しています。
WindowsとLinuxで使うパケットが異なる¶
Windowsのtracertは、基本的にICMP Echo Requestを使います。
Linuxのtracerouteは、通常はUDPを使います。
ただし、LinuxでもオプションによってICMPやTCPを利用できます。
仕組みの中心は同じです。
TTLを少しずつ増やし、経路上の機器から返るICMP Time Exceededを確認しています。
pingとtracerouteの違い¶
pingとtracerouteは、どちらもネットワーク調査に使います。
役割は異なります。
| コマンド | 主に確認すること |
|---|---|
ping |
宛先から応答が返るか |
traceroute・tracert |
宛先までの途中経路 |
ip route |
Linuxがどの経路を選ぶか |
telnet・nc |
指定したTCPポートへ接続できるか |
まずpingで宛先から応答があるか確認し、途中経路を見たいときにtracerouteを使うことがあります。
ただし、pingもICMPを制限している環境では応答しません。
コマンドの成功・失敗だけで判断せず、それぞれ何を確認しているのか理解しておきましょう。
【関連記事】
通信できないときの確認順¶
tracerouteの結果だけで原因が分からない場合は、大きい範囲から確認します。
私がネットワーク障害を調査するときは、次のような順番で確認します。
- IPアドレスとサブネットマスクを確認する
- デフォルトゲートウェイを確認する
- DNSで名前解決できるか確認する
- pingやtracerouteで通信経路を確認する
- 必要なポートへ接続できるか確認する
- ファイアウォールやルーターの設定を確認する
エンジニアとして10年以上仕事をしてきましたが、tracerouteだけで原因が分かることは多くありません。
ただ、どの範囲までは応答があり、どこから先の情報がないのかを整理するには役立ちます。
最初から原因を当てようとするのではなく、正常な範囲を1つずつ確認することが大切です。
traceroute・tracertの使い方まとめ¶
Windowsではtracertを使います。
tracert -d google.com
LinuxやmacOSではtracerouteを使います。
traceroute -n google.com
結果には、宛先までのホップ、応答したIPアドレス、往復時間が表示されます。
* * *が表示されても、その時点で通信が必ず停止しているわけではありません。
途中の機器が応答を返していない可能性もあるため、その後のホップや宛先への接続結果も確認しましょう。
tracerouteは、ネットワーク障害の原因を直接教えてくれるコマンドではありません。
どこまで通信経路を確認できたのかを知り、次に調べる場所を絞るためのコマンドです。
ネットワークを構築しながら学びたい方へ¶
ネットワークの経路は、コマンド結果を読むだけでは理解しにくい部分です。
ルーターを配置し、IPアドレスや経路を設定してからtracerouteを実行すると、ホップが増える理由を確認できます。
InfraAcademyでは、シミュレーターを使いながら、IPアドレス、ルーティング、VLANなどを順番に学習できます。
ネットワークを構築しながら学びたい方は以下からご覧ください。