用語辞典・コマンド・確認ツール

traceroute

tracerouteとは

traceroute(トレースルート)は、宛先までに通過するルーターをTTLまたはHop Limitの変化で調べるUnix系コマンドです。小さな上限値を持つ試験通信パケットを送り、途中のルーターから返るICMPエラーを手掛かりに、送信元側から見える経路を一段ずつ並べます。

IPv4ではTTL、IPv6ではHop Limit(ホップ・リミット)がルーターを通るたびに減ります。値がゼロになるとルーターはパケットを破棄し、通常はICMP Time Exceeded(アイシーエムピー・タイム・エクシーデッド)を返します。この応答元を「その上限で到達したホップ」として記録します。

tracerouteが直接見るのは、試験通信へ応答したルーターインターフェースと送信元からの往復時間です。Internet上の完全な配線図や、通常通信が常に通る唯一の経路を取得するものではありません。

ホップ上限を一つずつ増やし、破棄したルーターのICMP応答を送信元へ集める進む試験通信と戻る通知、各試験通信のRTT、見えないホップを分けて読む
送信元から複数ルーターを経てサーバーへ向かう経路に対し、一段ずつ遠くまで試験通信を送り、期限切れになったルーターから通知が戻り、各段で複数の時計を測り、無応答と負荷分散経路も示すピクトグラム図解
図1各行の時間は送信元からその応答元までの往復です。隣接する二つのルーター間だけの所要時間ではありません。

一段ずつ経路を伸ばす

Resolve宛先名をIPへ解決

ホスト名を指定した場合は、試験通信送信前にIPv4またはIPv6の宛先アドレスを選びます。

First試験通信上限を最小値にする

最初のルーターで上限が尽きる値を設定し、Time Exceededの返答元を待ちます。

Increment上限を一つ増やす

次の試験通信は一段先まで進み、次のルーターが破棄してICMP通知を返します。

Repeat同じホップへ複数回送る

通常は各上限で複数試験通信を送り、応答アドレスとRTTを個別に表示します。

Destination宛先到達の応答を受ける

UDP・ICMP・TCPなど試験通信方式に応じた終端応答で、宛先へ届いたと判断します。

Limit最大ホップまたは時間で終了

宛先応答がなくても設定した最大上限へ達すれば探索を止めます。

Unix系でも試験通信方式は一つではない

伝統的なtracerouteは、宛先で使われていない可能性が高いUDPポートへ試験通信を送り、途中ではTime Exceeded、宛先ではICMP Port Unreachableが返ることで終端を知ります。Linuxの実装ではICMP EchoやTCP SYNなど別方式も選べます。

方式を変えるとファイアウォールや負荷分散装置での扱いが変わり、見えるホップも変わる場合があります。「UDPで見えないがTCPでは見える」は経路そのものが必ず違うという意味ではなく、試験通信のプロトコル・ポートに対する応答方針の差かもしれません。macOS、BSD、Linuxで利用できる選択肢や既定方式も同一とは限りません。

一行は一台のルーターとは限らない

一般的な出力では先頭にホップ上限、その後に返答元アドレスと各試験通信のRTTが並びます。同じ上限の三回が別アドレスから返れば、per-flowやper-packetの負荷分散、経路変化、複数インターフェースのいずれかが考えられます。

表示アドレスはルーター全体を一意に表す番号ではなく、ICMP通知を返したインターフェースのアドレスです。同じルーターが別方向では別アドレスを使うことも、複数ホップがプライベートアドレスや同じ装置のインターフェースとして見えることもあります。MPLSなど下位の中継が通常のIPホップとして出ない場合もあります。

アスタリスクは「そこにルーターがない」ではない

待ち時間内に対応する応答が届かない試験通信は、通常*で表示されます。ルーターがTime Exceededを返さない、ICMPをレート制限する、戻り経路で失われる、試験通信だけがフィルターされるなど原因は複数あります。

途中が無応答でも、その先や宛先が表示されることがあります。これは該当ルーターが転送は行う一方、自身宛てのICMP応答を返さない、または優先度を下げているためです。無応答の一行だけで障害地点と断定しません。

RTTの増加を区間遅延へそのまま変換しない

各時間は送信元から応答インターフェースまでの往復です。ホップの差を引けば隣接区間の遅延になるように見えますが、各応答は復路が異なり、ルーターのICMP生成優先度も違うため、単純な差は安定した区間測定になりません。

あるホップだけ大きく、次のホップは小さい場合、前のルーターがICMP応答を遅く処理した可能性があります。大きな遅延や損失がその後の複数ホップと宛先まで継続するかを見て、時刻を変えた測定やping、アプリケーションの応答と照合します。

往路を調べても復路は分からない

試験通信は送信元から宛先へ進み、ICMP通知は各ルーターから送信元へ戻ります。Internetの経路制御は方向ごとに独立しており、戻りのパケットが同じルーター列を逆順に通る保証はありません。

さらに、tracerouteを実行した場所から見える往路です。利用者宅からサーバーへの結果と、サーバーから利用者宅への結果は別です。片側の測定だけで相手側からの経路を推定しません。

名前表示は逆引きDNSによる補助

intermediateアドレスをホスト名へ変換すると、事業者名やルーターの場所らしい文字が見えることがあります。ただしPTRレコードは管理者が付けた名前で、現在地や所有者を保証しません。名前解決の待ち時間が測定表示を遅らせることもあります。

経路とRTTを先に見るときは数値表示選択肢を使い、必要なアドレスだけ後からDNSやWHOISで調べます。名前解決に失敗しても、数値アドレスとRTTが得られていれば経路試験通信自体が失敗したとは限りません。

tracerouteはTTL・Hop Limitを利用し、送信元側から応答したIPホップを並べる観測です。試験通信方式、応答制限、負荷分散、非対称経路を含むため、表示行を固定された物理経路や障害責任の一覧として扱いません。

Linux tracerouteのTTL探索、既定probe、ICMP・TCP方式、出力記号:traceroute(8) manual page

関連用語