接続がたどるルートを知りたいシナリオがあります。ここでのルートとは、すべての転送エンティティ (間のルーターなど) の IP アドレスを意味します。
接続のすべてのパケットでルートが同じままであるという保証はありませんが、通常は同じです。このルート関連の情報は、ネットワーク関連の問題をデバッグする際に非常に便利です。
traceroute ユーティリティは、特定の宛先への完全なルートを出力します。この記事では、traceroute がどのように機能するかについて説明し、実際の例をいくつか見ていきます。
Traceroute の仕組み
例を始める前に、traceroute が機能する概念を理解しましょう。
Traceroute ユーティリティは、IP ヘッダーの TTL フィールドを使用して操作を実行します。 TTL フィールドを初めて使用するユーザーの場合、このフィールドは、ネットワーク上を移動中に特定のパケットがどれだけホップするかを示します。
したがって、これはネットワーク上のパケットの有効期間を効果的に概説します。通常、このフィールドは 32 または 64 に設定されます。パケットが中間ルーターに保持されるたびに、TTL 値が 1 ずつ減少します。ルーターが受信パケットで TTL 値 1 を検出すると、そのパケットは転送されず、代わりに
パケットを破棄した後、ルーターはパケットの生成元に「時間超過」という ICMP エラー メッセージを返します。送り返される ICMP パケットには、ルーターの IP アドレスが含まれています。
これで、traceroute が TTL 値が 1 から始まり、毎回 1 ずつ増加するパケットを送信することによって動作することが簡単に理解できます。ルータはパケットを受信するたびに TTL フィールドをチェックし、TTL フィールドが 1 の場合はパケットを破棄し、IP アドレスを含む ICMP エラー パケットを送信します。これは traceroute が必要とするものです。そのため、traceroute は送信元と送信先の間のすべてのルーターの IP を段階的に取得します。
少し前に説明した IP ヘッダー フィールドについても理解する必要があります。
トレースルートの例
1. traceroute の実行方法
$ traceroute <server-name>
上記の server-name は宛先名または IP アドレスです。たとえば、traceroute は、私のマシンから google.com へのネットワーク パスを見つけるために使用されます:
$ traceroute google.com traceroute to google.com (74.125.236.132), 30 hops max, 60 byte packets 1 220.224.141.129 (220.224.141.129) 89.174 ms 89.094 ms 89.054 ms 2 115.255.239.65 (115.255.239.65) 109.037 ms 108.994 ms 108.963 ms 3 124.124.251.245 (124.124.251.245) 108.937 ms 121.322 ms 121.300 ms 4 * 115.255.239.45 (115.255.239.45) 113.754 ms 113.692 ms 5 72.14.212.118 (72.14.212.118) 123.585 ms 123.558 ms 123.527 ms 6 72.14.232.202 (72.14.232.202) 123.499 ms 123.475 ms 143.523 ms 7 216.239.48.179 (216.239.48.179) 143.503 ms 95.106 ms 95.026 ms 8 bom03s02-in-f4.1e100.net (74.125.236.132) 94.980 ms 104.989 ms 104.954 ms
各行は、遭遇した各ルーターとの相互作用の詳細を示します。したがって、traceroute は中間ルーターの IP アドレスを提供するだけでなく、各ルーターに対して traceroute コマンドが 3 つのパケットを送信するため、その特定のルーターについて 3 回のラウンド トリップ時間を提供することがわかります。
出力の「*」フィールド
出力に値ではなく「*」が含まれる場合があります。これは、必須フィールドを取得できなかったことを示しています。その理由は、リバース DNS ルックアップの失敗から、パケットがターゲット ルーターに到達しないこと、パケットが戻る途中で失われることなど、さまざまです。そのため、多くの理由が考えられることがわかりますが、これらすべてのタイプのケースに対して、traceroute ユーティリティは出力に * を提供します。
2. IP アドレスとホスト名のマッピングを無効にする
traceroute は、IP アドレスとホスト名のマッピング (traceroute が試行する) を無効にするオプションを提供します。これを行うためのオプションは「-n」です。次の例はこれを示しています:
$ traceroute google.com -n traceroute to google.com (173.194.36.7), 30 hops max, 60 byte packets 1 220.224.141.129 109.352 ms 109.280 ms 109.248 ms 2 115.255.239.65 131.633 ms 131.598 ms 131.573 ms 3 124.124.251.245 131.554 ms 131.529 ms 131.502 ms 4 115.255.239.45 131.478 ms 131.464 ms 199.741 ms 5 72.14.212.118 199.674 ms 199.637 ms 199.603 ms 6 209.85.241.52 199.578 ms 199.549 ms 209.838 ms 7 209.85.241.187 199.488 ms 177.264 ms 177.196 ms 8 173.194.36.7 177.159 ms 187.463 ms 187.434 ms
そのため、出力にホスト名が表示されていないことがわかります。
3.応答待ち時間の設定
プローブの発行後に traceroute ユーティリティが待機する時間も構成できます。これは、提供される「-w」オプションを使用して実行できます。 -w オプションは、ユーティリティが待機する応答時間として使用する値を想定しています。この例では、待機時間は 0.1 秒で、traceroute ユーティリティは応答を待つことができず、すべての * を出力しました。
$ traceroute google.com -w 0.1 traceroute to google.com (74.125.236.101), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 * * * .. 26 * * * 27 * * * 28 * * * 29 * * * 30 * * *
したがって、traceroute が 30 回の試行 (最大ホップ試行) を試みた後、0.1 秒以内に ICMP パケットを受信しなかったため断念したことがわかります。
4.ホップあたりのクエリ数を構成する
すでに説明したように、traceroute ユーティリティはホップごとに 3 つのパケットを送信して、3 回の往復時間を提供します。このデフォルト値の 3 は、オプション「-q」を使用して構成できます。このオプションは、ホップあたりのプローブ数の新しい値として設定する整数を想定しています。
$ traceroute google.com -q 5 traceroute to google.com (173.194.36.46), 30 hops max, 60 byte packets 1 220.224.141.129 (220.224.141.129) 91.579 ms 91.497 ms 91.458 ms 91.422 ms 91.385 ms 2 115.255.239.65 (115.255.239.65) 91.356 ms 91.325 ms 98.868 ms 98.848 ms 98.829 ms 3 124.124.251.245 (124.124.251.245) 94.581 ms 107.083 ms 107.044 ms 107.017 ms 106.981 ms 4 115.255.239.45 (115.255.239.45) 106.948 ms 106.918 ms 144.432 ms 144.412 ms 144.392 ms 5 72.14.212.118 (72.14.212.118) 115.565 ms 115.485 ms 115.446 ms 115.408 ms 115.381 ms 6 72.14.232.202 (72.14.232.202) 115.351 ms 87.232 ms 117.157 ms 117.123 ms 117.049 ms 7 209.85.241.189 (209.85.241.189) 126.998 ms 126.973 ms 126.950 ms 126.929 ms 126.912 ms 8 bom04s02-in-f14.1e100.net (173.194.36.46) 126.889 ms 95.526 ms 95.450 ms 95.418 ms 105.392 ms
したがって、プローブの数を 5 に設定した後、出力はホップごとに 5 回の往復時間を示し始めたことがわかります。
5.開始する TTL 値を構成します
Traceroute ユーティリティは、ユーザーがユーティリティを開始したい TTL 値を受け入れるのに十分柔軟です。デフォルトでは、その値は 1 です。これは、パス内の最初のルーターから開始することを意味しますが、「-f」オプション (TTL の新しい値を想定) を使用すると、TTL フィールドの新しい値を設定できます。たとえば、通常の traceroute 操作を試してから、別の TTL 値で traceroute を試しました。
$ traceroute google.com traceroute to google.com (74.125.236.132), 30 hops max, 60 byte packets 1 220.224.141.129 (220.224.141.129) 89.181 ms 101.540 ms 101.503 ms 2 115.255.239.65 (115.255.239.65) 101.468 ms 101.431 ms 101.324 ms 3 124.124.251.245 (124.124.251.245) 121.373 ms 121.350 ms 158.694 ms 4 115.255.239.45 (115.255.239.45) 101.223 ms 141.135 ms 123.932 ms 5 72.14.212.118 (72.14.212.118) 123.867 ms 123.832 ms 123.802 ms 6 72.14.232.202 (72.14.232.202) 123.773 ms 123.742 ms 587.812 ms 7 216.239.48.179 (216.239.48.179) 587.723 ms 587.681 ms 587.642 ms 8 bom03s02-in-f4.1e100.net (74.125.236.132) 577.548 ms 577.524 ms 587.512 ms $ traceroute google.com -f 8 traceroute to google.com (74.125.236.129), 30 hops max, 60 byte packets 8 bom03s02-in-f1.1e100.net (74.125.236.129) 96.961 ms 96.886 ms 96.849 ms
したがって、値 8 で -f オプションを使用した後、前の出力の最後の (8 番目の) 行のみが表示されていることがわかります。