InfraAcademy

InfraAcademy Blog

traceroute(tracert)コマンドの使い方解説【どのような経路で通信しているのか?】

こんにちは、フルスタックエンジニアのryuです。

Webサイトへ接続できない。通信が遅い。どこまでパケットが届いているのか確認したい。

そんなときに使えるのが、traceroutetracertコマンドです。

どちらも、手元のパソコンから宛先まで、どのような経路を通っているのか確認できます。

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コマンド実行結果

画像では、手元のパソコンから宛先まで、複数の経路が表示されています。

左側の数字は、宛先までに通過する順番です。この単位をホップと呼びます。

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行目の123はホップの順番です。

続く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 宛先から応答が返るか
traceroutetracert 宛先までの途中経路
ip route Linuxがどの経路を選ぶか
telnetnc 指定したTCPポートへ接続できるか

まずpingで宛先から応答があるか確認し、途中経路を見たいときにtracerouteを使うことがあります。

ただし、pingもICMPを制限している環境では応答しません。

コマンドの成功・失敗だけで判断せず、それぞれ何を確認しているのか理解しておきましょう。

【関連記事】

通信できないときの確認順

tracerouteの結果だけで原因が分からない場合は、大きい範囲から確認します。

私がネットワーク障害を調査するときは、次のような順番で確認します。

  1. IPアドレスとサブネットマスクを確認する
  2. デフォルトゲートウェイを確認する
  3. DNSで名前解決できるか確認する
  4. pingやtracerouteで通信経路を確認する
  5. 必要なポートへ接続できるか確認する
  6. ファイアウォールやルーターの設定を確認する

エンジニアとして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などを順番に学習できます。

ネットワークを構築しながら学びたい方は以下からご覧ください。

InfraAcademyのネットワーク講座を見る

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る