tracert (traceroute)

tracert(traceroute)は、ネットワークの向こうにいるホストまでの経路を知ることが出来るコマンドです。 ここでは、Windows2000/XP(ウィンドウズ2000/XP)を使ってネットワークの構築やトラブルシューティングを行う上で最低限知っておきたいコマンドのひとつであるtracertを紹介します。

1. とりあえず、試してみよう

tracertは、指定した宛先までの途中経路を表示してくれます。 例えば、www.google.co.jpまでtracertした場合には図1のような感じの出力になります。 (ただし、図中のホストやIPアドレスには一部存在しないものを入れています。) tracertの結果では、指定した宛先までの途中ルータがわかります。 また、それぞれまでのRTT(Round Trip Time)も表示されます。 IPアドレスに対応するホスト名(FQDN)がDNSの逆引きで取得できない場合には、IPアドレスのまま表示されます。

図1. tracert例
C:\>tracert www.google.co.jp

Tracing route to www.google.akadns.net [66.102.7.99]
over a maximum of 30 hops:

  1  <10 ms  <10 ms  <10 ms  192.168.0.1
  2   20 ms   20 ms   20 ms  mito05.ap.XXXX.ne.jp [201.82.156.1]
  3   10 ms   20 ms   20 ms  07Gi1-0.net.XXXX.ne.jp [63.211.90.1]
  4   20 ms   20 ms   10 ms  gwl2.net.XXXX.ne.jp [63.211.63.14]
  5   20 ms   21 ms   20 ms  gw2.net.XXXX.ne.jp [205.213.13.211]
  6   20 ms   20 ms   20 ms  nrt2.asianetcom.net [203.132.182.113]
  7   20 ms   20 ms   20 ms  nrt5.asianetcom.net [202.143.1.54]
  8   20 ms   20 ms   20 ms  nrt1.asianetcom.net [202.172.1.181]
  9  120 ms  120 ms  120 ms  sj1.asianetcom.net [202.147.51.127]
 10  120 ms  121 ms  120 ms  google-gige.google.com [26.223.116.21]
 11  121 ms  150 ms  130 ms  26.239.48.213
 12  120 ms  121 ms  130 ms  26.239.48.173
 13  120 ms  120 ms  120 ms  26.239.48.246
 14  131 ms  120 ms  120 ms  64.233.174.57
 15  120 ms  130 ms  121 ms  216.239.48.125
 16  120 ms  130 ms  120 ms  16.239.49.146
 17  120 ms  120 ms  120 ms  66.102.7.99

Trace complete.

2. tracertは何故動くか?

では、何故tracertは動作するのかという説明をしたいと思います。 インターネットには、特定のパケットが永遠にネットワーク内を徘徊しないように、各パケットに安全装置があります。 安全装置は、IPヘッダ内にTTL(Time To Live)というフィールドを作ることによって実現しています。 このTTLフィールドは、ルータによりパケットが転送される度に値が1引かれます。 IPパケットの転送が繰り返されると、TTLの値は転送毎に減って行きます。 最終的にIPパケットが宛先まで届けば良いのですが、宛先に届く前にTTLが0になってしまうとIPパケットは消滅します。 しかし、単に消滅してしまうと何が起きたのかがわからない場合があるので、ルータはTTLが0のIPパケットを破棄するときにはIPパケットを送った送信元に対してICMP Time Exceeded という種類のICMPパケットを送信します。

tracertは、このICMP Time Exceededを利用しています。 tracertは、まず最初にTTL=1でIPパケットを送信します。

次に、TTL=2でIPパケットを送信します。

このように順次TTLを上げていき、徐々に届く範囲を広げていきます。 最終的にIPパケットが目的の宛先に到着するまで送信するTTLは上がっていきます。

最終的な目的地にIPパケットが到着したことを知る手段で一般的な物は2つあります。

一つは、tracertによって送信されるIPパケットをICMP Echoパケットにすることです。 それにより、ICMP Echoパケットを受け取った宛先はICMP Echo Replyを返してくれます。 ICMP EchoとICMP Echo Replyに関してはpingの説明をご覧下さい。

二つ目の方法は、tracertによって送信されるIPパケットをUDPにすることです。 UDPの宛先ポート番号は、宛先でサービスが存在しないものを利用します。 そうすることにより、宛先にUDPパケットが届いたときに、宛先ホストはICMP Port Unreachを送り返してくれます。 ICMP Port Unreachは、「そのポートは開いていないよ」と教えてくれるICMPメッセージです。

このような方法でtracertは途中経路を計測しています。 tracertはインターネットの仕組みを巧みに利用したアプリケーションであり、ネットワークのトラブルシューティングにはなくてはならないものです。 tracertを使ったことが無い方も、是非、使い方を覚えてください。

3. 注意事項

重要です!!! 覚えたら使いたくなるのが人情ですが、自分で管理していないホストへむやみにtracertをしないで下さい。 コンピュータセキュリティに関しては人により考え方が異なります。 tracertでパケットを送られるという事を「攻撃をされた」と受け取る人もいます。 トラブルに巻き込まれないためにも、他人のホストに対するtracertは控えましょう。

ルータにとってはTTLが無くなったパケットのためのICMPパケットを作成するのは負荷の高い作業です。 そのため、多くのトラフィックが集中するCoreルータでは、ICMPパケットの優先度を低くしている場合があります。 「何か自分のネットワークが遅い」と思ってtracertしてみて、Coreルータっぽいところで急にRTTが大きくなったからこのネットワークのバックボーンは弱いに違いないという考え方はしないで下さい。 多くの場合は単にICMPパケット生成の優先度が下げられているだけで、その予測は間違いです。

YouTubeで技術解説やってます!