目的と用途traceroute(Windowsではtracert)コマンドは、あるホストから別のホストまでのネットワーク経路をリスト表示するコマンドだ。ここでいう経路とは、ホスト間を接続するルーター(ゲートウェイ)のこと。tracerouteにより、経路上にどのようなルーターが位置しているかを表示する。主な用途としては、pingで相手ホストから正常な応答がなかった場合などに、ホスト自身や経路上のルーターのルーティング設定が正しいかどうかを確認するために用いられる。目的ホストまでのルーターのリストから、「設置場所が不明なホストのおおまかな場所を推測する」といった利用も行えるだろう。その他、各ルーターからのレスポンス時間などの統計値も表示されるので、経路上のボトルネックを探るなどの簡易的なネットワーク性能評価にも役立つ。ここで指定した数のルーターしかホップしない-j経由すべきゲートウェイ(ルーター)のアドレスを最大9個まで指定できる。IPv4のみ-wタイムアウト時間を指定する。単位はミリ秒-R往復のパスをトレースする。IPv6のみ-S自身ではない別のホストを送信元ホストとして指定する。結果は自身へは返ってこない。[パケットサイズ]-aBGPのAS番号を表示する-dモードで動作する-Dパケットの内容を表示する-eファイアウォール回避モード。Requestを用いる。これは-Pオプションのシノニムでもある-n出力をIPアドレスのみに抑制する(DNS逆引きを行わない)-rルーティングテーブルを無視して直接パケットを指定したホストに転送するように指示する。同一の物理ネットワーク上に目的のホストがない場合はエラーになる-Sホップごとに返答率を表示する-v詳細モード-xICMPのCheckSumの評価を行う-ABGPのAS番号を表示するとともに、指定されたASサーバを使用する-f使用するTTLの初期値を指定する-g経由すべきゲートウェイ(ルーター)のアドレスを最大8個まで指定できる-i指定されたインタフェース(バインドされたIPアドレス)を用いて実行する-M使用するTTLの初期値を指定する-m使用するTTLの最大値を指定する。この最大値のホップ数のゲートウェイまでが表示される-P使用するIPプロトコルを指定する。UDP、TCP、GRE、ICMPが指定できる-p使用するUDP/TCPパケットのポート番号を指定する(UDP/TCPパケットを使用する場合)-q1つのゲートウェイに対する試行回数を指定する。Service)を指定された値に設定する-wタイムアウト時間を指定する。Requestを用いる-lホスト名とIPアドレス両方を表示する-n出力をIPアドレスのみに抑制する(DNS逆引きを行わない)-N調査目的のため、上位レイヤーのヘッダを含まないようにする-rルーティングテーブルを無視して直接パケットを指定したホストに転送するように指示する。同一の物理ネットワーク上に目的のホストがない場合はエラーになる-UUDPパケットを用いる(デフォルト)-v詳細モード-f使用する初期ホップ数を指定する。この初期値のホップ数のみのトレースとなる-g経由すべきゲートウェイ(ルーター)のアドレスを最大8個まで指定できる-m最大ホップ数を指定する。Addressを指定する)-wタイムアウト時間を指定する。SYNパケットを用いる。デフォルトのポート番号は80-n出力をIPアドレスのみに抑制する(DNS逆引きを行わない)-rルーティングテーブルを無視して直接パケットを指定したホストに転送するように指示する。同一の物理ネットワーク上に目的のホストがない場合はエラーになる-eICMPの拡張を表示する-ABGPのAS番号を表示する-UUDPパケットを用いる。デフォルトのポート番号は33434-Vバージョン情報を表示する-f使用するTTLの初期値を指定する-g経由すべきゲートウェイ(ルーター)のアドレスを最大8個まで指定できる。routed)-i指定されたインタフェース(ネットワークカード名。バインドされたIPアドレスでも可)を用いて実行する-m使用するTTLの最大値を指定する。この最大値のホップ数のゲートウェイまでが表示される-N並列してパケットを送信する数。大きな値を指定することは推奨されない-p使用するUDP/TCPパケットのポート番号を指定する(UDP/TCPパケットを使用する場合)。ICMPパケットの場合は初期シーケンス番号を指定する-PRAWパケットを使用するためのプロトコル番号を指定する。Service)を指定された値に設定する。IPv6の場合はトラフィックコントロール値を指定する-IIPv6のフローラベルを指定する-wタイムアウト時間を指定する。デフォルトは5秒-q1つのゲートウェイに対する試行回数を指定する。Addressを指定する)-z送信パケットの間隔時間(秒)。3828)パケットを使用する-M用いるプロトコルを指定する。デフォルトは“default”(UDP)である。“icmp”または“tcp”が指定できる。-U、-Iまたは-Tオプションと同じ-O用いるプロトコルごとの拡張オプションを指定する--mtuMTUを決定するために指定する。このオプションを指定すると現在のMTU値も表示する。-Fオプションと組み合わせることで各経路でのMTUを調査できる--back復路のホップ数を表示する使用方法traceroute(Windowsではtracert)の最も簡単な使用方法は、引数として経路を調査したいホストを指定する方法である。ホスト名かIPアドレスが指定できる。93.184.216.119トレースを完了しました。上の例では、www.example.netへの経路を表示している(経路情報は一部マスクしてある)。(1)の部分は、以下の結果がこのホスト名とIPアドレスへの経路であることを示している。(2)は、最大で30個の経路情報を表示することを示している。ルーターにより、あるサブネットから別のサブネットへパケットがルーティングされることを「ホップ:Hop」と呼び、「ルーターを1つ越える」単位を“1Hop”として数えることがある。hopsは、最大30台のルーターまでをリストアップすることを意味する。このホップはTTL(後述)の最大値とも一致することになる。(3)が経路情報の一覧となる。ルーター間のレスポンス時間(試行3回分のそれぞれの結果。単位はミリ秒)」「(DNSに登録されている場合)ホスト名」「IPアドレス」を意味している。10番目の結果は指定したホスト自身であるので、経路上には9台のルーターが配置されていることが分かる。各ルーターからのレスポンス時間は、この例ではそれぞれ3回の試行結果が表示されている。これを基に、極端に時間がかかっているルーター間がボトルネックであると理解できる。この例ではどうやらルーター名から推測するに、日本—アメリカ間の接続網が最も全体のレスポンスに影響を与えているであろうことが分かる。この試行回数はオプションで変更することもできる。Linuxでの使用例(IPv6)IPv6での例も示しておこう。ms上のように基本的にはIPアドレスがIPv6形式で表示されるだけで、v4と変わらないと考えてよい。Live)の仕組みをうまく利用している。TTLとはIPパケットヘッダに指定可能な「生存時間」という意味だ。時間ではなく、「ホップ数」を意味している。そのパケットが「生存」できるホップ数を指定するのがTTLなのである。インターネットに代表されるIPネットワークはさまざまなネットワークの集合体なので、接続環境やルーティング設定についても、完全なものである保証は全くない。ルーティング設定が間違っていれば、一度発生したパケットが延々ループに陥って、いつまでもインターネット上をさまよい続けるという事態も考えられないではない。そこでIPパケットの送出時には必ずTTLを設定することになっている。TTLは最大255まで設定可能で、ルーターをホップする度に必ず1ずつ減らされる。0に達したパケットは発見したルーターが破棄することになっている。どの程度のTTLなら十分なのかは、目的ホストまでにたどり着くまでにどれだけのルーターやゲートウェイを越える可能性があるかによる。これはインターネットの「広さ」と密接に関連している。通常は30程度までとされているが、一般的なアプリケーションでは255や128など、十分な大きさを指定する場合が多いようだ。Exceeededパケットが単に破棄されたままでは送信元ホストは正しく相手のホストにパケットが届いたかどうか分からない。Exceededエラー(Type=11)を送信元ホストへ報告することになっている。この通知を受け取ることで、送信元ホストはルーティングなどに何らかの問題が発生していることを知ることができるわけだ。tracerouteコマンドでは、このTTLを1から順に増やして試行を重ねて結果を得ている。Exceededエラーを返答する。これが1台目のルーターの結果となる。次にTTLを2にして送出すれば、2台目のルーターの結果が得られる。このように、目的のホストに到達するまでTTLを増加させつつ次々にパケットを送出することで、tracerouteの結果を得ることができるというわけだ。コラム:なぜUDPパケットでも調査に使用できるのかLinuxやmacOSでは、tracerouteコマンドのためにICMPではなくUDPパケットを使用することもできる(Linuxでは逆にデフォルトがUDPとなっている)。tracerouteなどのネットワーク経路の調査にはICMPの機能を利用すると理解している人からすると違和感があるかもしれないが、上記のようなtracerouteの動作原理が分かればそれほど不思議でもなくなるはずだ。「調査の根拠となるのは往路ではなく復路のICMPパケットだ」ということである。Exceededエラーを返答してくれればよいので、往路のパケットはICMPでもUDPでも関係がなく、IPパケットであればよい。これは、ICMPがIPネットワークにおけるエラーを通知するためのプロトコルであるからだ。「主役は復路のICMPパケットである」というICMPの特性をうまく活用したコマンドである。対応していないルーターも存在するなお、調査するホストによっては次のような結果が得られることもある。Exceededに対応していないために起こる。Exceededエラーの結果を受け取らなければ結果を表示できない。この例では、3番目のルーターからエラーが返らず、tracerouteコマンドがタイムアウトをしてこのような表示になっていると考えられる。対応していないというだけでなく、ルーターによってはセキュリティ上の要件からICMPパケットをフィルタしている場合もある。ISPの管理するルーターではそうしたケースが多いようだ。メールマガジンをご購読ください。Japanスマートジャパン3Dモデラボキャリア@IT自分戦略研究所エンジニアライフディルバートアプリITmediaねとらぼねこらぼついトピ!ITmediaはアイティメディア株式会社の登録商標です。