traceroute の仕組み


 traceroute は IP ヘッダの TTL フィールドと ICMP のしくみをたくみに利用して、 あるホストから目的地までのパスをたどって行くツールです。



 イメージで表すと、、、

 ping はこんな感じ。



 traceroute はこんな感じ。





 TTL の値はルータに着くと一つ減らされます。(このしくみによってパケットがいつまで存在することを防ぐのです。 永久に存在したら、ネットワークがいらないパケットでいっぱいになってしまうでしょ。)

 まず HOST A が TTL=1 のパケットを送信すると、上の図では R1 (ルータです)に着いたとき TTL=0 となり、 R1 は HOST A に対して ICMP を返します。「もうこれ以上は先には行けない(TTL expired)」というわけです。

 そこで HOST A は次に TTL=2 としてパケットを送信します。今度はさっきより一つ遠くへ行けます。

 こうやって順番に TTL の値を一つずつ増やしながら、一つずつ遠くへ行きます。

 目的地である HOST B に着いたときにはどうなるかですって? このしくみのままならちゃんと着いたのなら何の返事も返ってこないはずですよね。

 実は HOST A は TTL に細工をしてパケットを送信しているだけではなく、別の細工もしています。 UDP の port を 33434 に設定しているのです。ありえない(だろう)サービスという意味です。 つまり、パケットが HOST B に到着したら、HOST B はわけのわからないものが来たと思って 「こんなサービスは存在しないよ(Port Unreachable)」という ICMP を返すことになるのです。

 このような方法で traceroute は順にパス(ルータを経由していくということ)をたどって行きます。



具体例でもう少し詳しく見てみましょう。


    host1:user1{21}traceroute host-b
    traceroute to host-b (10.11.12.13), 30 hops max, 20 byte packets
     1 10.13.1.66 (10.13.1.66)                     1 ms    1 ms    1 ms
     2 10.14.2.6 (10.14.2.6)                      78 ms   42 ms   37 ms
     3 router-a (10.15.1.133)                       61 ms   41 ms   60 ms
     4 router-b (10.16.118.2)                      57 ms   67 ms   72 ms
     5 host-b (10.11.12.13)                       111 ms   62 ms   76 ms
    host1:user1{22}

次の行を例にとって解説します。

     3 router-a (10.15.1.133)                       61 ms   41 ms   60 ms