トレースルートとは

Pingコマンドと並んでICMPを利用したエンドツーエンド通信の確認のためによく利用するコマンドがトレースルートです。トレースルートは、指定したIPアドレスまでにどんなルータを経由するかという通信経路の確認を行うためのコマンドです。

図 トレースルートの概要

トレースルートは通信「経路」の確認と解説されることが多いです。IPでのデータ転送における「経路」とは具体的には、経由するルータです。

トレースルートの仕組み(Cisco)

トレースルートの仕組みは、ICMP時間超過メッセージを利用して、通信経路上のルータのIPアドレスを調べます。

宛先IPアドレスを指定して、トレースルートを実行するとまずTTL=1としてIPパケットを送信します。すると、最初のルータでTTL=0となりIPパケットは破棄されます。破棄したルータはICMP時間超過メッセージを送信します。これにより、宛先までの経路上の最初のルータのIPアドレスがわかります。

図 トレースルート その1

次にTTL=2で宛先にIPパケットを送信すると、経路上の2番目のルータからICMP時間超過メッセージが送られてきます。こうして、TTLの値を増やして、宛先IPアドレスへIPパケットを送信することで経路上のルータのIPアドレスがわかるようになります。

図 トレースルート その2
図 トレースルート その3

Ciscoの実装では、トレースルートにUDPデータグラムを利用します。宛先ポート番号を33434としてIPヘッダのTTLを徐々に増やしながら目的のIPアドレスまでの経路を確認することができます。途中の経路上のルータは、TTLが0になりパケットを破棄すると、トレースルートを実行したデバイスにICMP時間超過メッセージを送信します。最終的なトレースルートの宛先では、UDPポート33434を使っていないためパケットを破棄します。そして、ICMP到達不能メッセージのPort Unreachableを送信元のデバイスに送信します。

図 トレースルート その4

UDPデータグラムには必ずIPヘッダが付き、IPパケットとなります。関連記事 「階層ごとのデータの呼び方」

Windowsでは、トレースルートのためにUDPデータグラムではなくICMPエコー要求メッセージを送信します。トレースルートの最終的な宛先からはICMPエコー応答メッセージが返ってきます。

トレースルートのコマンド(Windows)

Windows OSではコマンドプロンプトで以下のコマンドを入力すると、トレースルートを実行できます。

トレースルート Windows tracertコマンド

C:\tracert <IPアドレス または ホスト名>

以下は、GoogleのWebサーバまでのトレースルートを実行した結果の例です。

図 トレースルートの例 (Windows)
C:\Users\gene>tracert www.google.co.jp

www.google.co.jp [216.58.220.131] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1    <1 ms    <1 ms    <1 ms  192.168.1.1
  2     1 ms    <1 ms    <1 ms  172.31.1.1
  3     5 ms     3 ms     3 ms  ike-bbrt10.transix.jp [14.0.9.153]
  4     5 ms     5 ms     4 ms  72.14.214.173
  5     5 ms     4 ms     3 ms  142.251.233.137
  6     6 ms     4 ms     4 ms  108.170.237.93
  7     4 ms     3 ms     3 ms  nrt20s17-in-f3.1e100.net [216.58.220.131]

トレースを完了しました。

この例では、トレースルート(tracertコマンド)によって、コマンドを実行したPCからGoogleのWebサーバまで6台のルータを経由していることがわかります。

トレースルートはデフォルトで3つずつパケットを送信します。

GoogleのWebサーバのIPアドレスは記事執筆時点のものです。IPアドレスは変更される可能性があります。

トレースルートのコマンド(Cisco)

Cisco機器のトレースルートは次のコマンドを利用します。

トレースルート Cisco IOS

#traceroute <ip-address|hostname>

Ciscoのtracerouteコマンドのサンプルは以下です。

R6#traceroute 181.1.0.1

Type escape sequence to abort.
Tracing the route to 181.1.0.1

  1 160.1.26.2 32 msec 36 msec 32 msec
  2 160.1.12.1 36 msec 32 msec *

tracerouteコマンドの表示結果と意味は次の表のようになります。

表示結果意味
nn msec 経路上の各ホストに対してのmsec単位のラウンドトリップ時間
* プローブタイムアウト
A アクセスリストなどで管理上禁止されている
Q 送信先がビジーなため送信元抑制メッセージを受信した
U ポートに到達できない
H ホストに到達できない
N ネットワークに到達できない
P プロトコルに到達できない
? 不明なエラー
表 tracerouteコマンドの表示結果(Cisco)

拡張tracerouteコマンドで、tracerouteを行うときのパケットのパラメータを柔軟に指定することができます。IPアドレスやホスト名を指定せずにtracerouteコマンドを実行することで拡張tracerouteとなります。

以下は、拡張tracerouteコマンドの実行例です。

R2#traceroute
Protocol [ip]:
Target IP address: 10.3.3.3
Source address:
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 10.3.3.3

  1 192.168.23.3 20 msec *  16 msec

拡張tracerouteコマンドで指定するパラメータの概要をまとめると、次の表のようになります。

パラメータ概要
Protocol [ip] レイヤ3プロトコル
Target IP address 宛先IPアドレス
Source address 送信元IPアドレスまたはインタフェース
Numeric display [n] IPアドレスのみの表示
Timeout in seconds [3] タイムアウトの秒数
Probe count [3] Tracerouteで送信するプローブ(探索)パケット数
Minimum Time to Live [1] TTLの最小値
Maximum Time to Live [30] TTLの最大値
Port Number [33434] UDPプローブパケットのポート番号
Loose,Strict, Record, Timestamp, Verbose [none] IPヘッダのオプションの指定
表 拡張tracerouteコマンドのパラメータ

[]内はデフォルトの値

この表にあるように拡張tracerouteコマンドでは、送信元IPアドレスやインタフェース、TTLの値などを指定できます。

TCP/IP