6.5.2 traceroute

ping がホストへの接続性を調査するのに対して、ホストまでの経路を調査する コマンドが traceroute です。但し、Windows ではコマンド名は tracert に なっています。

traceroute は中々巧妙な手段で経路を調査するようになっています。その原理は、 先に学習した IP ヘッダの TTL(Time To Live)にあります。TTL は最初64などの適度 な大きさに設定してパケットが送り出され、経路上のルータで1つづづ減らされ、 0になった時点で相手には届かないと解釈され、該当パケットを廃棄するための仕組み です(パケットを廃棄したことを発信元に知らせるためにICMPを出します)。こ れを逆手に取って、 最初にTTLを1に設定して、相手に送り出すのです。すると、経路上の最初の ルータでTTLが0になるので、パケットは落とされ、ICMP の type 11(Time Exceeded) が返されます。このICMPのヘッダには当然、パケットを落としたルータのIPアドレス が入っているので、これで経路上の最初のルータが分かる訳です。後は、相手から 返事があるまで、TTLを大きくしながら同じ動作を繰り返せば、相手先までの経路 が分かる訳ことになります。 但し、これによって分かるのは、あくまでも往路の経路であって、 復路の経路ではありません。実際、インターネットでは往路と復路が異なっていても 全く問題はないからで、復路を調べるには相手の方から traceroute を使って調べ なければなりません。

> traceroute -n www.jp.freebsd.org
traceroute to www.jp.freebsd.org (211.14.6.244), 64 hops max, 44 byte packets
 1  10.16.164.253  0.559 ms  0.368 ms  0.503 ms
 2  10.0.1.x  0.225 ms  0.202 ms  0.342 ms
 3  10.x.0.x  5.528 ms  5.462 ms  5.519 ms
 4  211.13.x.x 8.052 ms  11.174 ms  8.351 ms
 5  211.13.x.x  8.365 ms  9.200 ms  8.527 ms
 6  202.224.36.1  25.765 ms  25.424 ms  26.145 ms
 7  202.224.32.50  26.136 ms  27.332 ms  26.371 ms
 8  210.171.224.205  32.763 ms  27.245 ms  26.489 ms
 9  211.14.3.196  30.780 ms  30.760 ms  39.290 ms
 10  211.14.4.105  29.777 ms  28.668 ms  26.974 ms
 11  211.14.6.244  27.333 ms  26.072 ms  25.666 ms
(上の例では、-n オプションでIPを名前に変換しないように指定し、一部のIPアドレスを 伏せている。)

traceroute は管理者にとっては中々便利なツールですが、原理的に万能ではありま せん。 何故ならば、ルータがそれに対して応答しないように設定されている場合や、応答 出来ないような場合(プライベート空間のルータなど)は、 その情報を知ることは出来ません。 勿論、返事がなくても、tracerouteはTTLを大きくして更に探索を続けますが、その間 タイムアウトするまでに少し時間がかかります。 traceroute の実行が遅いからと言って、 ネットワークが遅いとは言えないので、注意しましょう。 その他に、最悪のケースでは 、tracerouteで調べている最中に経路変更が起こった場合、traceroute ではその ことが分からず、途中から経路変更後のルータが検出されるような場合もあり得る でしょう。このような場合、何度か traceroute を繰り返すことで安定しているか どうかを確かめられます。

参考
Unix上のtracerouteコマンドは最初に送り出すパケットとして、 UDPパケットを用います。もし、ファイヤーウォールなどでこうしたあるポートの パケットが落とされている場合には、送るパケットの種類を変えることで解決する 場合があります。一方、Windowsのtracert では、ICMP Echo を用いています。



Noriyo Kanayama