パケットを何回も送って応答を確認

 前回はtracertコマンドの使い方と見方の基礎を紹介した。ここで,tracertコマンドのしくみを押さえておこう(図4)。

図4●tracertコマンドのしくみ
図4●tracertコマンドのしくみ
Windowsでtracertコマンドを実行すると,あて先のホストに向けてTTLを一つずつ増やしながらICMPエコー要求パケットを送り,時間超過メッセージを返信してきたルーターのIPアドレスを順次表示する。

 tracertコマンドを実行すると,送信元のパソコンはICMPのエコー要求パケットを送信する。このとき,tracertコマンドではパケットのヘッダー部分にある「TTL」というパラメータを使う。TTLはそのパケットが経由できるルーターの数を示す値である。ルーターを経由するたびに一つずつ減っていく。「0」になるとルーターはそれ以上パケットを中継せずに廃棄する。このときルーターは送信元に対して,「時間超過(time exceeded)メッセージ」をエラーとして返す。

 tracertコマンドでは,このTTLと時間超過メッセージをうまく使って,経路にあるルーターの情報と往復時間を調べている。図4を例に,順を追って見ていこう。

 tracertコマンドを実行すると,送信元のパソコンはTTLを「1」に設定してエコー要求パケットを送信する。TTLが1なので,最初のルーター1でTTLが一つ減らされて「0」となる。このためルーター1は次のルーター2にパケットを転送せずに廃棄し,送信元のパソコンに対して時間超過メッセージを送る。

 このメッセージの送信元アドレスから,送信元のパソコンは最初に経由するルーター1のIPアドレスがわかる。DNSサーバーで逆引きができる設定になっていれば,ルーター1のドメイン名もわかる。さらに往復にかかった時間も合わせて表示する。

 次に送信元のパソコンは,TTLを「2」に設定して,再びエコー要求パケットを送る。このパケットは,最初のルーター1を通過して,2番目のルーター2に到達する。ここでTTLが「0」になるのでルーター2はパケットを廃棄して,送信元のパソコンへ時間超過メッセージを返す。時間超過メッセージを受け取ったパソコンは,ルーター2のIPアドレスとドメイン名,往復時間を表示する。

 このように送信元のパソコンは,あて先のホストに到達するまでTTLを一つずつ増やして,エコー要求パケットを送信し続ける。エコー要求パケットがあて先のホストに到達すると,あて先のホストは時間超過メッセージではなく,エコー応答メッセージを送信する。送信元のパソコンがこのメッセージを受信すると,tracertコマンドの処理は完了する。