はてなブックマーク  Yahoo!ブックマークに登録  印刷

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


加地眞也
2001/8/30

 目的と用途

 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

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

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の管理するルータでは、そうしたことが多いようだ。

 

関連記事
  ネットワークの疎通を確認するには?
エラー報告プロトコル「ICMP」の動作原理を理解する
  ルーティングの設定は正しいか?
ルーティングの仕組みを理解して設定を見直す
 

関連ネットワーク・コマンド/ツール
  ping
〜ネットワークの疎通を確認する
traceroute(tracert)
〜ネットワークの経路を調査する
  route
〜ルーティングテーブルの設定/表示
 


ネットワークトラブル解決法
- 通信の疎通を確認 - TCP/UDPの状態
- 設定は正しいか? - DHCPの設定
- ルーティングの設定 - DNSの設定
- イーサネット通信確認  
ネットワークコマンド使い方
- ping - route
- traceroute - arp
- ipconfig - netstat
- ifconfig - nslookup



ツールを使ってネットワーク管理

 名前しか知らない後輩君がやってきた。彼によると、コマンドはすでに古くツールがクールだという。ならば教えてもらおうではないか

最終更新 2007/3/26

「Master of IP Network総合インデックス」

 

Master of IP Network フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

スキルアップ/キャリアアップ(JOB@IT)

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  New! 誰もが満足するシステムへ
10年前にSOA実現を可能にしたサーバは?

  New! 初めての製品に不安を感じる甲山たち
――26年の歴史が物語る信頼性と実績

  New! サーバ担当者を物理的な作業から開放する
ホスティングの“パターンオーダー”とは

  New! スループットは従来機の“2〜3倍”を発揮
CoolThreadsのDBサーバとしての威力とは

  New! 【24時間365日】無償サポートを実現する
専用ホスティング、その秘訣とは?

  ■ 高パフォーマンス 『 UltraSPARC 』
仮想化も併用し、サーバ統合効果を検証!

  「1秒、切れてました」は、通用しない!
堅牢性・信頼性に優れた“国産”通信機器

  市場の変化と淘汰されるERPエンジニアとは
〜エンジニア・キャリア進化論(第7回)〜

  こんな便利な開発ツールがあるならもっと
早く教えてくれよ!おれの青春を返せ〜!

  『もう1つの外資系』を選ぶワケ……
読んでわかる、驚きの採用状況と人材育成法

  『家族持ち』ITエンジニアの方、必見!
経験者が語る、U/Iターン転職の実状と魅力

  業務アプリの開発効率向上と顧客満足の
向上を両立するアウトプットの“疎連携”

  自分のスキル、限界を感じていませんか?
『IT専門教育』で独学の限界を超えろ!

  トレンドは常に動き続ける!時代の変化に
対応する――ベンダーからのメッセージ!

  【実践!SOA】手作業をシステム化で改善
作業ミスが従来の60%から1%にまで激減!

  BI導入が失敗する『3つの理由』と
データ・情報活用を成功させる解決ツール