概要
ネットワークのトラブルシューティングの際、必ず使うコマンドの一つ。
http://itpro.nikkeibp.co.jp/article/COLUMN/20100225/344989/
によると
通信のあて先となるホスト(サーバーやネットワーク機器など)までの通信経路を表示するコマンドである
どのIPが出力されるか。
ネットワークが切り替わるタイミング、
つまり経由したレイヤー3のルーター等を経由した時にのみ出力される。
レイヤー2以下、スイッチや、無線LANのアクセスポイントを経由した場合は記録されないので、
レイヤー2以下の経路についてはこのコマンドで直接調べられない。
記録されるのは往路のみ。
復路の結果を知りたい場合、対向側から同様にtracerouteを実施してもらう必要がある。
tracerouteコマンドの仕組み
パケットのTTLを利用している。
TTLはルーターを経由するごとに1づつ減る。
宛先に到達する前にTTLが0になると、[ICMP time exceeded]というメッセージが送られる。
TTLを意図的に小さくしてパケットを送ることで途中経路のルーターの存在を知ることができる。
950 for (ttl = first_ttl; ttl <= max_ttl; ++ttl) {
951 u_int32_t lastaddr = 0;
952 int gotlastaddr = 0;
953 int got_there = 0;
954 int unreachable = 0;
955 int sentfirst = 0;
956 int loss;
957
958 Printf("%2d ", ttl);
959 for (probe = 0, loss = 0; probe < nprobes; ++probe) {
960 register int cc;
961 struct timeval t1, t2;
962 register struct ip *ip;
963 struct outdata outdata;