[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

traceroute【コマンド】

pointこの用語のポイント

pointUNIX系で使えるコマンドだよ

point通信経路を調査するよ

スポンサーリンク

簡単に書くよ

traceroute【コマンド】とは

どんな経路を通って通信相手のところまで行くか確認するときに使うコマンド
です。

image piyo

詳しく書くよ

「traceroute」コマンドは、コマンドライン上から通信相手までの通信経路(どんな道を通って相手のところまで辿り着くか)を調査するときに使うコマンドです。
例えば「あなたのコンピュータから出たデータルータAを通ってルータBを通って相手のコンピュータに到着しましたよ~」といった情報を得ることができます。

「traceroute」コマンドはUNIX系(LinuxとかMacとか)で使えます。

書き方は

traceroute [オプション] [対象のIPアドレス or ドメイン名]

です。
オプションは、あれやこれやとたくさんあります。

オプション説明
-4IPv4を使う
-6IPv6を使う
-IICMPパケットを使って調査する
-TTCPパケットを使って調査する
-UUDPパケットを使って調査する
-dデバッグ・モードで動く
-Fフラグメントするな!フラグをセットする?
Set the "Don’t Fragment" bit. This tells intermediate routers not
to fragment the packet when they find it’s too big for a network hop’s MTU.
-f最初に送るTTLの値を指定する
-g【ゲートウェイ】経由したいゲートウェイを指定する?
Tells traceroute to add an IP source routing option to the outgoing packet that tells the network to route the packet through the specified gateway. Not very useful, because most routers have disabled source routing for security reasons.
-i【インターフェイス】使用するインターフェイス(ネットワークカード名)を指定する
-m【最大TTL】TTLの最大値を指定する
-NSpecifies the number of probe packets sent out simultaneously. Sending several probes concurrently can speed up traceroute considerably. The default value is 15. Note that some routers and hosts can use ICMP rate throttling. In such a situation specifying too large number can lead to loss of some responses.
-n結果をIPアドレスで表示する
-p【ポート】パケットを送り付けるポートを指定する
-t【TOS】パケットのTOSを指定する
For IPv4, set the Type of Service (TOS) and Precedence value. Useful values are 16 (low delay) and 8 (high throughput). Note that in order to use some TOS precendence values, you have to be super user. For IPv6, set the Traffic Control value.
-l【ラベル】Use specified flow_label for IPv6 packets
-w【秒】タイムアウトと判断する時間を指定する
-q【回数】一つの経由地に対する試行回数を指定する
-rルーティングテーブルを気にしないで、指定したところに直接送り付ける
-s【ソースアドレス】Chooses an alternative source address. Note that you must select the address of one of the interfaces. By default, the address of the outgoing interface is used.
-zMinimal time interval between probes (default 0). If the value is more than 10, then it specifies a number in milliseconds, else it is a number of seconds (float point values allowed too). Useful when some routers use rate-limit for icmp messages.
-APerform AS path lookups in routing registries and print results directly after the corresponding addresses
-Vバージョン情報を表示する

などです。
オプションが多くて、げんなりしそうですね。

ですが、心配はいりません。

オプションを何も指定しないで

traceroute examle.com

のように指定すれば、ほぼ事足ります。
オプションは、調査条件を変えるものがほとんどなので、必要になってから必要な分だけ覚えれば良いと思います。

ちなみに、オプションの説明で「TTL」という用語がちょいちょい出てきましたね。
この「TTL」という用語ついて補足しておきます。
TTLが分かると「traceroute」コマンドの動きもイメージしやすいので、頑張って理解してください。

結論から書くと、TTLは

1.数字である
2.機器を一つ経由する毎に数字を1減らす
3.数字が「0」になったら、その時点で中継を止める


の特徴がある、パケット(通信用に細切れにしたデータ)にくっつく情報です。
このTTLがあることによって、パケットさんがネットワークの世界で永遠に放浪する事態が、回避されています。

例えば、何かの間違いで輪っか構造になっているネットワークがあったとしましょう。
ルータAは「ルータBに行けよ」と指示を出すし、ルータBは「ルータAに行けよ」と指示を出す状態です。
この指示に従うと、パケットさんは永遠にルータAとルータBの間をぐるぐる行き来し続けることになります。

traceroute

この状況はマズイですよね?
流れ込むパケットは増えていくのに、出て行くパケットは無いので、いずれパンクしてしまいます。

これを回避するためにあるのがTTLです。

仮に最初、TTLの値が4だったとしましょう。
ルータAに到着した時点で、TTLの値を一つ減らして3にします。

traceroute2

ルータAには「ルータBに行けよ」と言われました。
パケットさんはルータBに行きます。
そして、ルータBに到着した時点で、TTLの値を一つ減らして2にします。

traceroute3

ルータBには「ルータAに行けよ」と言われました。
おっと、何かの設定ミスで「ぐるぐる同じところを回っちゃうよ構造」になっているようです。
それでもパケットさんは、指示に従いルータAに行きます。
そして、ルータAに到着した時点で、TTLの値を一つ減らして1にします。

traceroute4

案の定、ルータAには「ルータBに行けよ」と言われました。
パケットさんは涙目になりながらルータBに行きます。
そして、ルータBに到着した時点で、TTLの値を一つ減らして0にします。

traceroute5

TTLの値が0になった時点で、パケットさんの旅は終わりです。
力尽きて倒れてしまいます。
力尽きたパケットさんを看取ったルータBさんは、パケットさんを送り出してきたコンピュータに対して「俺はルータBって、ケチな者だけどよー。あんたのところから来たパケットさん、今、力尽きたぜ」と報告のお手紙を出します。

これがTTLです。
繰り返しになりますが

1.数字である
2.機器を一つ経由する毎に数字を1減らす
3.数字が「0」になったら、その時点で中継を止める


情報です。
パケットがネットワーク上で永遠に放浪する事態になることを避けるために使われます。

よく分からない人は、パケットさんの体力ゲージだと思えば良いでしょう。
機器を経由する度に1ずつ減っていって、最終的に0になると力尽きます。
数字が大きい方が長生きできるあたりが、人間様の寿命みたいですね。
そのせいか、TTLを設定することを指して「パケットの寿命を設定する」と表現する人もいます。

さて、これでTTLが何かは、何となく分かったでしょうか。
それでは、TTLを踏まえて「traceroute」コマンドについて、もう少し突っ込んで見ていきます。

例えば、ピヨ太君のパソコンからピヨ子さんのパソコンに行くまでに、ルータA、ルータBの2つのルータを経由していたとしましょう。
「ピヨ太→ルータA→ルータB→ピヨ子」なネットワーク構成です。

traceroute6

ここでピヨ太君は、ピヨ子さんのパソコンを指定して「traceroute」コマンドを実行しました。
そうすると、ピヨ太君のパソコンからは、TTLが「1」に設定されたパケットさんが出発します。

traceroute7

TTLが「1」に設定されたパケットさんは、ルータAに到着した時点でTTLが「0」になり、力尽きます。

traceroute8

そうすると、ルータAからピヨ太君のパソコンに対して「俺はルータAって、ケチな者だけどよー。あんたのところから来たパケットさん、今、力尽きたぜ」と報告のお手紙が出されます。
お手紙を見たピヨ太君は「ふむふむ、最初の到達地点は『ルータA』ね」と頷きました。

traceroute9

次に、ピヨ太君のパソコンからは、TTLが「2」に設定されたパケットさんが出発します。

traceroute10

TTLが「2」に設定されたパケットさんは、ルータAに到着した時点でTTLが「1」になります。

traceroute11

まだ力尽きていませんね。
そこで、ルータAの案内に従い、ルータBの元に向かいます。

traceroute12

ルータBに到着したパケットさんは「1」だったTTLが「0」になり、力尽きます。

traceroute13

そうすると、ルータBからピヨ太君のパソコンに対して「俺はルータBって、ケチな者だけどよー。あんたのところから来たパケットさん、今、力尽きたぜ」と報告のお手紙が出されます。
お手紙を見たピヨ太君は「ふむふむ、ルータAの次の到達地点は『ルータB』ね」と頷きました。

traceroute14

次に、ピヨ太君のパソコンからは、TTLが「3」に設定されたパケットさんが出発します。

traceroute15

TTLが「3」に設定されたパケットさんは、ルータAに到着した時点でTTLが「2」になります。

traceroute16

まだ力尽きていませんね。
そこで、ルータAの案内に従い、ルータBの元に向かいます。

traceroute17

ルータBに到着したパケットさんは「2」だったTTLが「1」になります。

traceroute18

まだ力尽きていませんね。
そこで、ルータBの案内に従い、ピヨ子さんのパソコンの元に向かいます。

traceroute19

長旅を終えたパケットさんは、ついにピヨ子さんの元に着きました。

traceroute20

最後に、ピヨ子さんからピヨ太君に「パケットさんが届いたわよ」とお返事が出されます。

traceroute21

ここまでの情報をまとめたピヨ太君は「ふむふむ、まずはルータAに着いて、ルータAの次の到達地点はルータBで、その次がピヨ子さんのパソコンね」と頷きました。
ピヨ太君のパソコンからピヨ子さんのパソコンまでの経路が明らかになりましたね。

これが「traceroute」コマンドのやっていることです。

TTLが1のパケットを送る→到着先を控える
TTLが2のパケットを送る→到着先を控える
TTLが3のパケットを送る→到着先を控える
   ・
   ・
   ・
TTLがXのパケットを送る→目的地に到着


というように、TTLを1つ増やしたパケットを順番に送り出し、到着先の情報を履歴として控えることによって、目的地までの経路を割り出します。

仕組みまで理解しなくてもコマンド自体は使えますけどね。
覚えておくと、ちょっと自慢げな気分になれると思います。

image piyo2

一言でまとめるよ

まぁ「traceroute」ってコマンドが出てきたら「通信経路を調査するときに使うんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク