traceroute

読み:とれーするーと / 英語表記:traceroute

宛先までの経路上にあるルータを、順番に調べるコマンド。IPv4のTTL(IPv6のホップリミット)を1から順に増やしながらパケットを送り、途中のルータから返ってくるICMPのエラーで、経由した機器を知る。

イマシルちゃんの解説

pingが「相手まで届く?」を調べる道具なら、
tracerouteは「相手まで、どの道を通っていくの?」を調べる道具なんだ。

「1つ目の交差点まで行ったら戻ってきて」「次は2つ目まで」……って、
少しずつ遠くまで行かせて、そのたびに「ここまで来たよ」って返事をもらうんだよ。
そうすると、通り道の交差点(ルータ)が、順番にわかるんだ!

より深い解説

定義

traceroute(Windowsでは tracert、IPv6用には traceroute6 や tracert -6)は、宛先までの経路上のルータを列挙し、それぞれまでの往復時間を表示するコマンドである。

仕組み

  1. TTL(ホップリミット)を1にしたパケットを宛先に送る
  2. 1台目のルータで、TTLが0になってパケットが破棄され、ルータからICMPの時間超過(IPv6ではICMPv6 Time Exceeded)が返ってくる。その送信元アドレスが、1台目のルータのアドレスである
  3. TTLを2、3…と増やしながら同じことを繰り返す
  4. 宛先に届くと、宛先から応答(UNIXのtracerouteではUDPの宛先ポート到達不能、Windowsのtracertではエコー応答)が返り、終了する
実装送るパケット
UNIX系の tracerouteUDP(使われていない大きなポート番号宛て)
Windowsの tracertICMPのエコー要求

表示されるアドレス

時間超過のメッセージの送信元は、パケットを受信したインタフェース(または実装によって決まるインタフェース)のアドレスである。そのため、ルータのインタフェースにどのアドレスを割り当てているかで、表示が変わる。

状況結果
各インタフェースに固有のGUA(IPv6)や管理しやすいアドレスを割り当てているアドレスから、どの機器のどのインタフェースかを識別しやすい
アドレスを割り当てていない(IPv6でLLAだけ)ほかのインタフェースのアドレスで応答するなど、どの機器かが分かりにくくなる
途中の機器がICMPを返さない、遮断されているその段は「*」と表示される

IPv6でルータ間のネットワークにGUAを静的に割り当てる利点の1つは、traceroute6 で経路を調べたときに、各機器を識別しやすくなることである。

結果を読むときの注意

注意点内容
行きの経路しかわからない戻りの経路は別のことがある
負荷分散経路が複数あると、試行ごとに違うルータが表示されることがある
ICMPの扱いICMPの応答を後回しにするルータでは、表示される時間が実際の転送の遅延より長くなることがある

実際の試験ではここに出る!

この用語が出てくる記事

↑