traceroute — 寿命を1ずつ延ばして経路をあぶり出す
traceroute(Windowsでは tracert)を実行すると、相手のサーバーに届くまでに通り道のルーターが1台ずつ順番に表示されます。でも、通信のパケットには「途中で寄った場所を書き残す」機能なんてありません。では、どうやって経路を割り出しているのでしょう?
秘密は、パケットに必ず付いている TTL(Time To Live=パケットの寿命) という数字を逆手に取ることです。TTLはルーターを1台通るたびに1ずつ減り、0になったルーターはパケットを捨てて「時間切れです」と送り主に返信します。この返信の差出人を見れば、そのルーターの正体がわかる——下の図1で、プローブを1回ずつ送って試してみてください。
なぜTTLを増やすと経路が見えるのか
TTLはもともと、迷子のパケットが永遠にネットをさまよわないための安全装置です。設定ミスでルーターがぐるぐる輪を作ってしまっても、TTLが0になればパケットは確実に捨てられます。traceroute はこの「捨てられたら持ち主に通知が届く」性質を、経路調査に流用しているのです。
やっていることはとてもシンプル。TTL=1 で送れば1台目で力尽き、TTL=2 なら2台目で力尽きる。力尽きた場所のルーターが「時間切れ(ICMP Time Exceeded)」を返してくれるので、その差出人アドレスと、送ってから返ってくるまでの往復時間(RTT)を記録します。これを TTL=1,2,3… と繰り返すと、近い順にルーターのリストが完成します。最後にTTLが目的地まで届けば、サーバー本人が応答して探索は終了です。
- TTL
- パケットの寿命。ルーターを通るたび1減り、0になると捨てられる。元は無限ループ防止の安全装置。
- Time Exceeded
- TTLが0になったルーターが送り主へ返す「時間切れ」通知(ICMP)。差出人で正体がわかる。
- RTT
- プローブを送ってから返信が戻るまでの往復時間。各ホップの遠さ・混み具合の目安になる。
- ホップ
- パケットがルーターを1台越えること。「3ホップ目」は3台目のルーターを指す。
まとめ
traceroute は、新しい仕組みを作ったわけではありません。「TTLが0になったら差出人に通知が届く」という既存の安全装置を、1ずつ延ばしながら使い倒しているだけです。図1で見たように、寿命を1, 2, 3…と延ばすたびに通り道が一歩ずつ照らし出される——通信が「どこで遅いか」「どこで途切れたか」を突き止める、シンプルで強力な道具なのです。