\r\n\r\n
Linuxのtracerouteコマンドは、ネットワークパケットの伝送に遅いセグメントを発見し、遅いネットワーク接続のトラブルシューティングに使用することができます。その方法をお教えします!
tracerouteの仕組みを理解すると、結果を理解しやすくなります。ネットワークパケットが目的地に到達するまでの経路が複雑であればあるほど、どこで速度低下が発生するのかを判断するのは難しくなります。
小規模な組織のローカルエリアネットワーク(LAN)は、比較的シンプルである場合があります。少なくとも1台のサーバーと1~2台のルーターがある場合があります。さらに、異なる拠点間やインターネット上で通信を行うWAN(Wide Area Network)では、複雑さが増す。ネットワークパケットは、ルーターやゲートウェイなど多くのハードウェアと出会い、転送やルーティングが行われます。
パケットのメタデータのヘッダーには、パケットの長さ、どこから来たのか、どこへ行くのか、使用されているプロトコルなどが記述されています。プロトコルの仕様でヘッダが定義されています。プロトコルが特定できれば、ヘッダーの各フィールドの開始と終了を判断し、メタデータを読み取ることができる。
tracerouteは、TCP/IPプロトコルスイートを使用して、ユーザーデータグラムプロトコルのパケットを送信します。ヘッダにはTTL(Time To Live)フィールドがあり、8ビットの整数値が格納されている。名前に関係なく、持続時間ではなく、回数を表します。
パケットはルータを経由して、発信地から目的地まで移動します。パケットがルーターに到着するたびに、TTLカウンターをデクリメントします。TTL値が1になった場合、パケットを受信したルーターはその値をデクリメントし、現在0であることを記録します。パケットはドロップされ、"タイムアウト "したため、次のリープに転送されない。
ルーターはパケットの送信元にICMP(Internet Message Control Protocol)タイムアウトメッセージを送信し、パケットがタイムアウトしたことを知らせます。タイムアウトメッセージには、オリジナルのヘッダーとオリジナルパケットデータの最初の64ビットが含まれています。これは、Request for Comments 792の6ページで定義されています。
したがって、tracerouteがパケットを送信し、その後TTL値を1に設定した場合、パケットは廃棄される前に最初のルータにのみ到達することになります。ルーターからICMPタイムアウトメッセージを受信し、往復にかかった時間を記録する。
次に、TTLを2に設定した演習を繰り返しますが、これは2ホップで失敗します。tracerouteはTTLを3に増やして再試行します。このプロセスは、ターゲットまたはテストされた最大ホップ数(デフォルトでは30)に達するまで繰り返されます。
一部のルーターには脆弱性があり、TTLが0のパケットをドロップせずに転送しようとし、ICMPタイムアウトメッセージを発生させます。
Ciscoによると、一部のインターネットサービスプロバイダ(ISP)は、ルーターが中継するICMPメッセージの数を制限しているとのことです。
ICMPパケットを送信しないように設定されている機器もあります。これは通常、**urf攻撃などの分散型サービス拒否にデバイスが不用意に参加させられることがないようにするためです。
traceroute のデフォルトの応答タイムアウトは 5 秒です。この5秒以内に応答がない場合は、試行を断念する。これは、非常に遅いルーターからの応答は無視されることを意味します。
tracerouteはfedora31では既にインストールされていますが、manjaro18.1やubuntu18.04ではインストールする必要があります。Manjaroにtracerouteをインストールするには、次のコマンドを使用します。
sudo pacman -Sy tracerouteUbuntuにtracerouteをインストールするには、次のコマンドを使用します。
sudo apt-get install traceroute前述のように、tracerouteの目的は、あなたのコンピュータから目的地までの各ホップでルータから応答を得ることです。口をつぐんで何も教えない人もいれば、秘密を教えることに抵抗のない人もいるでしょう。
例えば、有名なブラーニーストーンがあるアイルランドのブラーニー城のサイトにtracerouteを実行することにします。ブラーニーストーンにキスをすると、「口づけの才能」に恵まれるという伝説がある。途中で出会うルーターが、ちゃんとおしゃべりな人であることを期待しよう。
次のようなコマンドを入力します。
traceroute www.blarneycastle.ie1行目には以下の情報が記載されています。
それ以外の行には、いずれかのリープポイントの情報が含まれています。しかし、詳細を調べる前に、私たちのコンピューターとブラーニー城のサイトとの間に11回のジャンプがあることがわかる。ジャンプ11も、目的地に到着したことを告げている。
各リープフロッグの行の形式は以下の通りです。
次のことを思い出してみよう。
あるデバイスは協力し、あるデバイスは名前を告げず、またあるデバイスは完全に匿名のままです。
しかし、目的地に到着し、往復の時間が13.773ミリ秒と14.715ミリ秒で、11ジャンプ先であることがわかったのです。
これまで見てきたように、デバイス名を含めると表示がおかしくなることがあります。データを見やすくするために、-n(マッピングなし)オプションを使用することができます。
この例で実行するには、次のように入力します。
traceroute -n blarneycastle.ieそのため、ボトルネックを示すと思われる往復のタイミングに大きな数値を選びやすくなっています。
3回目のジャンプは、ちょっと怪しく見えた。前回は2回しか反応しなかったが、今回は1回しか反応しなかった。この場合、確かに私たちにはどうしようもないことでした。
しかし、企業のネットワークを調査するのであれば、このノードをより深く研究することは価値があります。
おそらく、デフォルトのタイムアウト(5秒)を延長すれば、より多くのレスポンスが得られると思います。そのために、-w(待ち時間)オプションで7秒に変更します。(浮動小数点数であることにご注意ください)。
次のようなコマンドを入力します。
traceroute -w 7.0 blarneycastle.ieあまりインパクトがなかったので、レスが古くなっているのでしょう。匿名ホップは意図的に秘匿していたようです。
デフォルトでは、tracerouteは各リープポイントに3つのUDPパケットを送信します。q(クエリー数)オプションで上下に調整することができるのです。
tracerouteのテストを高速化するために、以下のコマンドを入力して、UDPプローブパケットの送信数を1つに絞ります。
traceroute -q 1 blarneycastle.ieこれにより、各リープポイントにプローブが送られる。
TTLの初期値を1以外の値に設定し、いくつかのジャンプを飛ばすことができるのです。通常、TTL値は、最初のテストのセットでは1、次のテストのセットでは2、といった具合に設定されます。5に設定すると、最初のテストは1から4を飛ばして5にジャンプしようとします。
このコンピュータからブラーニー城のサイトまでは11回跳ぶことが分かっているので、次のように入力すると、直接11回目の跳躍に行くことができる。
traceroute -f 11 blarneycastle.ieこれにより、ターゲット接続の状態について簡潔で良いレポートが得られます。
tracerouteは、ネットワークルーティングの研究、接続速度のチェック、ボトルネックの特定に適したツールです。Windowsには、同様の機能を持つtracertコマンドもあります。
ただし、未知のデバイスに大量のUDPパケットを浴びせることは避け、スクリプトや無人ジョブにtracerouteを含めることは慎重に行う必要があります。
ロードトラッキングルーティングは、ネットワーク性能に悪影響を与える可能性があります。今すぐ直したい」という状況でない限り、通常の勤務時間外に利用するのがよいでしょう。