traceroute
宛先までの経路上にあるルータを、順番に調べるコマンド。IPv4のTTL(IPv6のホップリミット)を1から順に増やしながらパケットを送り、途中のルータから返ってくるICMPのエラーで、経由した機器を知る。
イマシルちゃんの解説
tracerouteは、宛先までの通信がどのルータを通るか調べるコマンドだよ。
IPv4では通過できるルータの数を制限するTTLを変えたパケットを送り、途中で転送が打ち切られるようにするんだ。
そのルータが返すICMPという通知用プロトコルのエラーメッセージから、どこまで届いたか分かるよ。
IPv6ではTTLに相当するホップリミットを使うの。
こうして経路と応答までの時間を調べると、通信がうまくいかない場所を探す手掛かりになるんだ。
ただし返事をしないルータもあるから、表示が抜けただけで故障とは決められないよ。
この解説はわかりやすかったですか?
より深い解説
定義
traceroute(Windowsでは tracert、IPv6用には traceroute6 や tracert -6)は、宛先までの経路上のルータを列挙し、それぞれまでの往復時間を表示するコマンドである。
仕組み
- TTL(ホップリミット)を1にしたパケットを宛先に送る
- 1台目のルータで、TTLが0になってパケットが破棄され、ルータからICMPの時間超過(IPv6ではICMPv6 Time Exceeded)が返ってくる。その送信元アドレスが、1台目のルータのアドレスである
- TTLを2、3…と増やしながら同じことを繰り返す
- 宛先に届くと、宛先から応答(UNIXのtracerouteではUDPの宛先ポート到達不能、Windowsのtracertではエコー応答)が返り、終了する
| 実装 | 送るパケット |
|---|---|
| UNIX系の traceroute | UDP(使われていない大きなポート番号宛て) |
| Windowsの tracert | ICMPのエコー要求 |
表示されるアドレス
時間超過のメッセージの送信元は、パケットを受信したインタフェース(または実装によって決まるインタフェース)のアドレスである。そのため、ルータのインタフェースにどのアドレスを割り当てているかで、表示が変わる。
| 状況 | 結果 |
|---|---|
| 各インタフェースに固有のGUA(IPv6)や管理しやすいアドレスを割り当てている | アドレスから、どの機器のどのインタフェースかを識別しやすい |
| アドレスを割り当てていない(IPv6でLLAだけ) | ほかのインタフェースのアドレスで応答するなど、どの機器かが分かりにくくなる |
| 途中の機器がICMPを返さない、遮断されている | その段は「*」と表示される |
IPv6でルータ間のネットワークにGUAを静的に割り当てる利点の1つは、traceroute6 で経路を調べたときに、各機器を識別しやすくなることである。
結果を読むときの注意
| 注意点 | 内容 |
|---|---|
| 行きの経路しかわからない | 戻りの経路は別のことがある |
| 負荷分散 | 経路が複数あると、試行ごとに違うルータが表示されることがある |
| ICMPの扱い | ICMPの応答を後回しにするルータでは、表示される時間が実際の転送の遅延より長くなることがある |
実際の試験ではここに出る!全1問
ネットワークスペシャリスト
- 午後Ⅱ