1
3

More than 5 years have passed since last update.

tracerouteコマンドの動きについて

Last updated at Posted at 2018-01-06

概要

ネットワークのトラブルシューティングの際、必ず使うコマンドの一つ。

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;
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3