連載
» 2001年08月30日 10時00分 UPDATE

ネットワークコマンド使い方:traceroute(tracert) 〜ネットワークの経路を調査する

[加地眞也,@IT]

目的と用途

アイコン

 traceroute(Windowsでは「tracert」)コマンドは、あるホストから別のホストまでのネットワーク経路をリスト表示するコマンドだ。ここでいう経路とは、ホスト間を接続するルータ(ゲートウェイ)という意味で、経路上にどのようなルータが位置しているかを表示する。

 おもな用途としては、pingでの動作が正常でなかった場合など、表示される経路情報からホスト自身や経路上のルータのルーティング設定が正しいかどうかを確認するために用いられる。また、目的のホストまでのルータのリストから、設置場所が不明なホストのおおまかな場所を推測する、といった用途にも使えるだろう。そのほか、各ルータとのレスポンス時間などの統計値も表示されるので、経路上のボトルネックを探るなどの簡易なネットワーク性能評価にも役立つ。

書式

●Windowsの場合

tracert[ -d][ -h 最大ホップ数][ -j ゲートウェイ・リスト][ -w タイムアウト時間] 対象ホスト(ホスト名またはIPアドレス)

-d 結果に表示するIPアドレスからDNSホスト名への名前解決を行わない
-h 使用する最大TTL。つまりここで指定した数のルータしかホップしない
-j 経由すべきゲートウェイ(ルータ)のアドレスを最大9個まで指定できる。ただし指定されていないゲートウェイも経由できる(loose source routed)
-w タイムアウト時間を指定する。単位はミリ秒

●Linuxの場合

traceroute[ -dFInrvx][ -g ゲートウェイ・リスト][ -i インターフェイス][ -f 初期TTL値][ -m 最大TTL値][ -p ポート番号][ -q 試行回数][ -s 送信元アドレス][ -t TOS][ -w タイムアウト時間] 対象ホスト(ホスト名ま たはIPアドレス)[ パケットサイズ]

-d デバックモードで動作する
-F IPパケットの分割(フラグメント)を禁止する
-I UDPパケットではなく、ICMP Echo Requestを用いる
-n 出力をIPアドレスのみに抑制する(DNS逆引きを行わない)
-r ルーティングテーブルを無視して直接パケットを指定したホストに転送するように指示する。すなわち、同一の物理ネットワーク上に目的のホストがない場合はエラーになる
-v 詳細モード
-x ICMPのCheckSumの評価を行う
-g 経由すべきゲートウェイ(ルータ)のアドレスを最大8個まで指定できる。ただし指定されていないゲートウェイも経由できる(loose source routed)
-i 指定されたインターフェイス(ネットワークカード名)を用いて実行する
-f 使用するTTLの初期値を指定する。つまりこの初期値のホップ数のゲートウェイからの表示となる
-m 使用するTTLの最大値を指定する。つまりこの最大値のホップ数のゲートウェイまでの表示となる
-p 使用するUDPパケットのポート番号を指定する(DPパケットを使用する場合のみ)
-q 1つのゲートウェイに対する試行回数を指定する。デフォルトは3
-s 指定されたIPアドレスから実行する(Source Addressを指定する)
-t パケットのTOS(Type Of Service:サービスタイプ)を指定された値に設定する
-w タイムアウト時間を指定する。単位は秒。デフォルトは5秒

使用方法

 最も簡単な使用方法は、引数として経路を調査したいホストを指定する。ホスト名かIPアドレスが指定できる。

●Windowsでの使用例

C:\>tracert www.example.net

Tracing route to VENERA.ISI.EDU [128.9.176.32]    <---(1)
over a maximum of 30 hops:                        <---(2)

  1    40 ms    40 ms    70 ms  gate.isp.xx.jp [203.xxx.xxx.xxx]                    <---+
  2    40 ms    40 ms    40 ms  tokyo-gate.isp.xx.jp [203.xxx.xxx.xxx]                  |
  3    40 ms    40 ms    40 ms  xxx.isp.xx.jp [203.xxx.xxx.xxx]                         |
  4    40 ms    40 ms    30 ms  xxx.xxx.isp.xx.jp [203.xxx.xxx.xxx]                     |
  5    40 ms    40 ms    40 ms  tky.xxx.xxx.isp.xx.jp [203.xxx.xxx.xxx]                 |
  6    40 ms    40 ms    40 ms  so-0-3-0.a01.tokyjp01.jp.ra.verio.net [61.120.15.113]   |
  7    80 ms    40 ms    40 ms  ge-1-0-0.r00.tokyjp01.jp.bb.verio.net [61.120.14.93]    |
  8   170 ms   161 ms   150 ms  p4-1-2-0.r03.snjsca03.us.bb.verio.net [129.250.2.1]     +-(3)
  9   150 ms   161 ms   210 ms  p4-7-2-0.r04.snjsca03.us.bb.verio.net [129.250.2.157]   |
 10   190 ms   171 ms   170 ms  p16-3-0-0.r01.snjsca03.us.bb.verio.net [129.250.2.63]   |
 11   201 ms   180 ms   190 ms  p4-2-0-0.r00.lsanca01.us.bb.verio.net [129.250.2.26]    |
 12   180 ms   230 ms   190 ms  ge-2-0-0.a02.lsanca02.us.ra.verio.net [129.250.9.116]   |
 13   160 ms   200 ms   211 ms  ge-2-3-0.a02.lsanca02.us.ce.verio.net [198.172.17.163]  |
 14   200 ms   190 ms   180 ms  dmz-isi.isi.edu [198.32.16.49]                          |
 15   161 ms   170 ms   230 ms  128.9.32.7                                              |
 16   230 ms   191 ms   200 ms  venera.isi.edu [128.9.176.32]                       <---+

Trace complete.


 例では、「www.example.net」への経路を表示している(経路情報は一部マスクしている)。

 (1)の部分は、以下の結果がこのホスト名とIPアドレスへの経路であることを示している。この例では、「引数で指定したホスト名」と「実際に表示されるホスト名」が異なっていることにも注意しよう。これは、DNS上では「www.example.net」が「VENERA.ISI.EDU」の別名(CNAMEレコード)として登録されているため、このように表示されている。もちろん別名でない場合には、そのままのホスト名が表示される。

 (2)は最大で30個の経路情報を表示することを示している。ルータにより、あるサブネットから別のサブネットへパケットがルーティングされることを「ホップ(Hop)」と呼び、この「ルータを1つ越える」単位を1ホップとして数えることがある。「30hops」とは、最大30台までのルータをリストアップすることを意味する。また、このホップはTTL(後述)の最大値とも一致することになる。

 (3)が経路情報の一覧となる。各行は順に、「順序番号」「各ルータへのレスポンス時間(試行3回分のそれぞれの結果で単位はミリ秒)」「(DNSに登録されている場合)ホスト名」「IPアドレス」を意味している。16番目の結果は指定したホスト自身であるので、経路上には15台のルータが配置されていることが分かる。

 各ルータへのレスポンス時間は、(この例では)それぞれ3回の試行結果が表示されている。この情報を元に、極端に時間がかかっているルータ間がボトルネックであると理解できる。この例では、どうやらルータ名から推測するに、日本〜アメリカ間の接続網が最も全体のレスポンスに影響を与えていると推測できる。また、この試行回数はオプションで変更することもできる。

tracerouteとTTL

 traceroute(tracert)コマンドでは、こうした経路上に存在する各ルータを割り出すために、IPパケットにおけるTTL(Time To Live)の仕組みをうまく利用している。TTLとは、IPパケットヘッダに指定可能な「生存時間」という意味だ。ただし、実際には時間ではなく、「ホップ数」を意味している。つまり、そのパケットが「生存」できるホップ数を指定するのがTTLなのである。

 元々、インターネットに代表されるIPネットワークはさまざまなネットワークの集合体であるため、接続環境やルーティング設定についても、完全なものである保証はまったくない。もしルーティング設定が間違っていると、一度発生したパケットが延々ループに陥って、いつまでもインターネット上をさまよい続けるという事態も考えられないではない。そこで、IPパケットの送出時には必ずTTLを設定することになっている。TTLは最大255が設定可能で、ルータをホップするごとに必ずTTLから1減らされる。そして、0に達したパケットはルータが破棄することになっている。

図1 TTLとICMP Time Exceeded 図1 TTLとICMP Time Exceeded

 では、どの程度のTTLなら十分かという問題は、目的ホストまでどれだけのルータやゲートウェイを越える可能性があるかということだ。つまりこれは、インターネットの「広さ」と密接に関連している。通常は30程度までとされているが、一般的なアプリケーションでは255や128など十分な大きさを指定する場合が多いようだ。

図2 tracerouteの動作
Tracing route to host2.isp.com [203.XXX.XXX.XXX]
over a maximum of 30 hops:

  1    40 ms    40 ms    40 ms  rt1.isp.xx.jp [203.xxx.xxx.xxx]
  2    50 ms    50 ms    50 ms  rt2.isp.xx.jp [203.xxx.xxx.xxx]
  3    70 ms    70 ms    80 ms  gw.isp.com [203.xxx.xxx.xxx]
  4    70 ms    70 ms    70 ms  host2.isp.com [203.xxx.xxx.xxx]

Trace complete.
図2 tracerouteの動作


 パケットが単に破棄されたままでは、送信元ホストは正しく相手のホストにパケットが届いたかどうかは分からない。そこで、ルータの設定にもよるのだが、破棄したルータはICMPのTime Exceededエラー(Type=11)を送信元ホストへ報告することになっている。この通知を受け取ることで、送信元ホストはルーティングなどに何らかの問題が発生していることを知ることができるわけだ。

 tracerouteコマンドでは、このTTLを1から順に増やして試行を重ねて結果を得ている。例えば、最初にTTLを1としてIPパケットを対象ホストへ送出*1すると、1番目のルータ(1ホップ目)が受け取った時点でTTLを減算した結果、0となってしまうので、ルータはICMP Time Exceededエラーを返答する。これが1台目のルータの結果となる。次にTTLを2にして送出すれば、2台目のルーターの結果が得られる。

 このように、目的のホストに到達するまでTTLを増加しつつ次々にパケットを送出することで、tracerouteの結果を得ることができるというわけだ。

*1LinuxではUDPパケットを、WindowsではICMP Echo Requestパケットをデフォルトで用いる。Linuxでは-IオプションでICMPに変更することもできる


対応していないルータも存在する

 調査するホストによっては、次のような結果が得られることもある。

        :
  2    40 ms    40 ms    40 ms  tokyo-gate.isp.xx.jp [203.xxx.xxx.xxx]
  3    * * *
  4    40 ms    40 ms    30 ms  xxx.xxx.isp.xx.jp [203.xxx.xxx.xxx]
        :


 これは、このルータがICMP Time Exceededに対応していないためだ。前述のように、tracerouteはICMP Time Exceededエラーの結果を受け取らないと結果を表示できない。この例では、おそらく3番目のルータからエラーが返らず、tracerouteコマンドがタイムアウトしたため、このような表示になっていると考えられる。

 また、単に対応していないというだけでなく、ルータによってはセキュリティ上の要件からICMPパケットをフィルタしている場合もある。おもにISPの管理するルータでは、そうしたことが多いようだ。

関連ネットワーク・コマンド/ツール

ping 〜ネットワークの疎通を確認する

traceroute(tracert) 〜ネットワークの経路を調査する

route 〜ルーティングテーブルの設定/表示


ネットワークコマンド使い方


Copyright© 2016 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

編集部からのお知らせ

@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。