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
- 一番左の番号は、何番目のルータに到達したかを示しています。この場合は3番目ということ。
- 次はルータの名前です。もし名前が分からなければアドレスを表示します。
- カッコの中はそのルータのアドレスです。
- 3つのミリ秒はそのルータまでの往復時間です。3回繰り返しています。
- 3回やって、とった経路が違う場合は、ルータ名が同じ行に複数個表示されます。例4を見てください。
- * は応答を受取らなかったということです。例3と例4にあります。
- もしその行が 「15 * * *」 のような表示になっていたら(例はないですが)、そのルータは ICMP TTL expired の機能をサポートしていないということです。