ネットワークトラブルは、Windows標準の「tracert」コマンドで解決できる。本ツールは、宛先までに経由するルーターを逐一表示し、TTL(生存時間)を利用して障害箇所を特定する仕組みだ。pingとの違いやオプションの活用法、Windows 11での実行例までを解説する。インフラ担当者のみならず、全てのPCユーザー必携の知識である。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象:Windows 10/11
Windows 11標準コマンドtracertで通信経路を調べる方法突然、LAN上あるいはインターネット上のサイトにつながらなくなったり、急激に遅くなったりした経験は誰しもあることだろう。
もし、その原因がローカルのWindows PCから対象サイトまでの間のネットワーク(通信の経路)にあるとしたら、Windows OS標準の「tracert」コマンドが原因究明のために利用できる。
本Tech TIPSでは、tracertコマンドの基本的な仕組みと使い方について説明する。普段Windows PCを使っていて、かつネットワークのトラブルシューティングも担当しているなら、tracertコマンドの使い方を知っていて損はないだろう。
TCP/IPネットワークにおける基本的なトラブルシューティングツールとして「pingコマンド」がある。このコマンドは、指定された宛先ホストに対して、ICMPプロトコル(TCP/IPにおける、基本的な制御用プロトコル)を送信し、その応答状態を表示させるコマンドである。pingコマンドの使い方については、Tech TIPS「『ping』コマンドでネットワークトラブルの原因を調査する」を参照していただきたい。
このpingと同様の目的に使われるコマンドとして、Windows OSには「tracert」というコマンドが標準装備されている(UNIXやLinuxなどでは「traceroute」という名称になっている)。tracertコマンドも、pingと同じくICMPプロトコルのEcho要求を送信することにより、指定された宛先への到達可能性を調査する(UNIX版ではICMPプロトコル以外にUDPプロトコルも使用できる)。しかし、ルーティングの途中で経由したホスト(ルーター)を逐一表示するという点が異なる。
tracertでは、TCP/IPにおけるTTL(Time To Live)を使って途中のルーターのIPアドレスを求めている。TTLとは、IPヘッダ中に含まれる特別なフィールドであり、IPパケットが通過可能なルーターの最大数を表している。ルーターがIPパケットをルーティングする場合、ルーターを1つ通過するたびにこのTTL値が減らされ、0になるとIPパケットは廃棄される(詳細は「基礎から学ぶWindowsネットワーク 第10回― 2.IPフラグメンテーション」参照)。
このTTLの値はデフォルト(既定)では128にセットされていることが多い。しかし、tracertではわざと小さな値にしてルーティングの途中でTTLが0になるようにしている。
TTLが0になるとIPパケットが廃棄されると同時に、そのルーターから送信元のIPアドレスに対して、「宛先不達(Destination unreachable)」というICMPのエラーパケットが送り返されてくる。tracertではこのICMPパケットを受信することにより、どこのルーターでTTLが0になったか、つまりどこまでIPパケットが届いていたかを知ることができる。TTLの値を1から順番に1つずつ大きくしてIPパケットを送信することにより、目的のホストまでの経路中に存在するルーターを調べることが可能になる。
組織内のネットワークの場合、通過するルーターの数もせいぜい数段くらいしかないので、tracertの出番はあまり多くない。しかしインターネット上のホストと通信する場合は、経路の途中でトラブルが発生し、通信ができなくなることもしばしばである。
そのような場合には、実際に経路が途中で途絶えているのか、それとも単にネットワークが混雑して通信が滞っているのかなどを見極めるためにtracertを活用できる。
tracertコマンドの使い方は、以下のように、引数を付けずにコマンドを実行すると表示される。一般ユーザー権限でも実行可能だが、ネットワーク環境(プロキシ経由など)によっては管理者権限でコマンドプロンプトを実行していないと、一部の経路情報が正しく取得できないケースがある。経路情報が正しく取得できていないようならば、管理者権限でコマンドプロンプトを起動して実行してみるとよい。
pingコマンドと同様に、引数には宛先となるホスト名(IPアドレスかFQDN)を指定する。
| オプション名 | オプションの概要 |
|---|---|
| -d | 通過したルーターのIPアドレスからホスト名(FQDN)を逆引きしない |
| -h <ホップ数> | 経路の途中で通過できるルーターの最大数を指定。デフォルトは30 |
| -j <IPアドレスのリスト> | (IPv4のみ)通過するルーターを強制的に指定(ルーズソースルーティング) |
| -w <待ち時間> | ルーターからのICMPパケットを受信するまでの待ち時間(タイムアウト値)を指定。単位はミリ秒。デフォルトは4秒 |
| -4 | IPv4による経路探索を強制 |
| -6 | IPv6による経路探索を強制 |
| -R | (IPv6のみ)IPv6の拡張ヘッダ(ルーティングヘッダ)を使ってローカルホストへEcho要求メッセージを送信する。復路のルートのテストに利用 |
| -S <ソースアドレス> | (IPv6のみ)Echo要求メッセージで使用する送信元アドレスを指定 |
以下では主要なオプションについて説明する。
「-d」オプションは、IPアドレスから名前(FQDN)を求めないようにするためのオプションである。
デフォルトでは、通過したルーターのIPアドレスから、DNSを使ってFQDNを求めて表示するようになっている。しかし、インターネット上には名前が割り当てられていないルーターも多く、タイムアウトを待つために表示が遅れる原因となる。「-d」オプションを付けることで、FQDNを求めないようにして、不具合箇所の特定を早めることができる。
「-h <ホップ数>」オプションは、tracertで設定する最大TTL数を指定するために利用される。
デフォルトでは「30」となっているので、最大では経路途中で通過できるルーター数は最大でも30台までに制約される。経路途中に30台以上ルーターが存在する場合(30ホップよりも遠くにある場合)、tracertは処理を打ち切ってしまうので、このオプションを利用して、より大きな値を指定する必要がある。
「 -j<IPアドレスのリスト>」は、通過する経路(ルーター)を明示的に指定する「ソースルーティング(Source Routing)」を適用する場合に利用する。
デフォルトでは、ルーターの持つルーティングテーブルに従ってルーティング処理が行われる。一方、「ソースルーティング」とは、ルーティングの途中で使用するルーターを強制的に指定するルーティング方法であり、あらかじめIPパケットの中に、通過すべきルーターの一覧リスト(最大で9台まで指定可能)を埋め込んでおく手法である。
「ソースルーティング」には「ストリクトソースルーティング(厳密なソースルーティング)」と「ルーズソースルーティング」の2種類がある。「ストリクトソースルーティング」は、指定されたルーター「だけ」を通過するようにルーティングする方法である。一方、「ルーズソースルーティング」は、指定されたルーター「以外も」利用してルーティングできる。
このうち、tracertコマンドでは「ルーズソースルーティング」だけが指定できる。ちなみにpingコマンドではこの両方のソースルーティングが利用可能だ。
ソースルーティングはセキュリティ対策のため、ルーターやOSではデフォルトで無効化(禁止)されていることも多い。そのため実際には、「-j」オプションを指定すると、「要求がタイムアウトしました。」と表示されて経路探索ができないことがある。
「-w <待ち時間>」オプションは、ルーターからのICMPパケットを受信するまでの待ち時間を指定する。
デフォルトの待ち時間は「4000(=4秒。ミリ秒単位で指定する)」である。応答が遅いネットワークなどでは、この時間を超えてもパケットを受信できず、応答時間の代わりに「*」が表示されることがよくある。
そのような場合は、「4000」より大きな数値を「-w」オプションで指定することで、待ち時間を延ばせばよい。
「-4」オプションは「IPv4」で、「-6」オプションは「IPv6」でそれぞれ経路探索することを強制するオプションだ。
ローカルホストでIPv4とIPv6の両方とも使える(デュアルスタック構成の)場合、デフォルトでどちらのプロトコルスタックが利用されるかは、ネットワークの環境や状況によって異なる。もし意図せぬプロトコルスタックで検索されてしまった場合は、どちらかのオプションを指定することでプロトコルスタックを強制的に選択できる。
なお、Windows 11では標準でIPv6を優先するようになっている。宛先がIPv6アドレスを持つホスト名(例:google.com)の場合、オプションなしで実行すると自動的にIPv6(「-6」オプションを付けた場合と同じ)で実行される。IPv4で経路探索したい場合は、「-4」オプションを付ける必要がある。
「-4」オプションを付けて「google.com」に対してtracertコマンドを実行した例ここからはtracertコマンドを使用した例を幾つか紹介する。
まずは、LAN上のホスト(つまりネットワーク的に近くにあるホスト)へのtracertを実行してみよう。
この場合は、目的のホスト(192.168.4.22)に到達するまでに、途中に何も存在していないことが分かる。
「<1 ms」という値が表示されているのは、そのホストからの応答が「1msec(1ミリ秒)」以下であったということを表している。秒数が3つ表示されているのは、3回パケットを送って、3回とも応答が1ミリ秒かそれ以下であったということである。3回実行するのは、ネットワークの混雑などの影響を見るためであり、ばらつきが大きいようであればネットワークがより混雑していると判断できる。
今度はインターネット上のホストへtracertを実行してみよう。
最初の6行ほどは、応答値が数ミリ秒に収まっている。これは国内のインターネット回線を経由しているからである。
一方、8行目から急に応答値が30ミリ秒以上になっている。ここから先は海外のルーターからの応答なので、海底ケーブルを経由する分だけ遅くなっている。3つの応答はそれぞれ似たような値になっているので、ネットワークはあまり混雑していないように見受けられる。
なお「* * * 要求がタイムアウトしました。」と表示されるのは、ルーターやファイアウォールによってtracertに対する応答を返さないように設定されているからだ。その場合はこのように表示される。
途中でルーティングが行えなくなった場合は、次のようになる。
ここでは「172.16.1.2」というプライベートIPアドレスに対してtracertを実行してみた。プライベートIPアドレスなので、インターネットへ向けてtracertを実行しても、ルーティングは成功しない。
経路の途中から「* * * 要求がタイムアウトしました。」と表示され、ホップ数の最大値に到達してトレースが終了してしまう。
また、途中で有効な経路がなくなったような場合は、このように最後のルーターから「<ルーターのIPアドレス> レポート: 宛先ホストに到達できません。」という応答が戻ってくる。これらの情報により、途中のルーターのルーティングテーブルの設定ミスや経路の途絶などが分かる。
【2026/03/09】Windows 11に対応しました。
【2021/08/18】最新の情報を反映しました。Windows 10のスクリーンショットを追加しました。
【2003/05/03】初版公開(対象はWindows 9x/Windows Me/Windows 2000)。
Copyright© Digital Advantage Corp. All Rights Reserved.
編集部からのお知らせ