My Traceroute(MTR)とは?

My Traceroute(MTR)は、tracerouteとpingを組み合わせて、ネットワークパスの健全性を測定するものです。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • 「traceroute」と「MTR」を定義する
  • tracerouteとMTRの仕組みを理解する
  • MTRの結果を読み取り、ネットワークパスの問題を診断する

記事のリンクをコピーする

トレースルートとは?

トレースルートは、ネットワーク経路の問題点を診断するために使用されるツールです。トレースルートは、あるコンピュータ(送信元IPアドレス)から別のコンピュータ(宛先IPアドレス )までにIPパケットが通過する経路を把握するために使用されます。traceroute(LinuxまたはmacOSの場合)またはtracert(Windowsの場合)というコマンドを使用して次のことを把握することが可能です:

  • パケットが通過する経路(各ルーターのIPアドレスを含む)
  • 送信元とネットワーク経路上の各ホップ(パケットが通過するルーター)間のRTT*。

*往復時間(RTT)とは、ネットワーク上のある地点と別のある地点との間でデータが行き来するのにかかる時間のことです。

以下は、1.1.1.1へのトレースルートの例です。アスタリスクのついた行(* * *)はパケットを返さなかったホップを表します。これは、ルータがtracerouteパケットを無視するように設定されている場合に起こることがあります。各行のミリ秒の時間は、各パケットの送信元からそのホップまでの往復時間です(tracerouteは結果を検証するために一回につき3つのパケットを送信します)。

トレースルートの例
traceroute to 1.1.1.1 (1.1.1.1), 64 hops max, 52 byte packets
1 myrouter (192.168.47.1) 2.755 ms 1.452 ms 1.325 ms
2 * * *
3 69.168.32.65 (69.168.32.65) 18.159 ms 18.658 ms 15.091 ms
4 * * *
5 206.126.237.30 (206.126.237.30) 30.453 ms 50.242 ms 24.342 ms
6 one.one.one.one (1.1.1.1) 29.000 ms 26.784 ms 26.017 ms

��ットワークパスとは?

ネットワークパスとは、パケットが宛先に到達するために通過するネットワークの順路のことです。

インターネットは、ルーティングによって互いに接続されたネットワークの巨大な集合体です。ほとんどのインターネットのエンドポイント(例えば、WebサイトにアクセスしようとするWebブラウザやそのWebサイトをホストするサーバーなど)は、同じネットワークに属していません。つまり、WebブラウザがWebサイトのサーバーにリクエストを送る場合、そのリクエストは途中でいくつかの中間ネットワークの間をホップする必要があります。

トレースルートの仕組みとは?

トレースルートを行うツールは、宛先IPにtime-to-live(TTL) を1に設定したパケットを送信し、パケットが最初に到達したルータがエラー(「time exceeded」)を返送するようにします。エラーが返されると、トレースルートを行うツールは最初のルーターのIDと往復時間を記録する、TTLを増やす、新しいパケットを送る、そして、1)最後のパケットが宛先IPに到達するか、2)2組のパケットがドロップされるまでこの処理を繰り返します。

こうすることで、パケットが通過する経路や各ホップまでの往復時間を把握することができ、パケットロスや遅延のトラブルシューティングを行うことができます。

トレースルートは、ICMP(Internet Control Message Protocol)プロトコルを使用します。ICMPは、エラーテストに使用されるネットワーク層のプロトコルです。ICMPには関連するトランスポートプロトコルがなく、インターネットプロトコル(IP)���で直接実行されます。トレースルートを行うツールによって送信されたパケットのTTLを超えると、ルーターはICMP Type 11(Time Exceeded Error)パケットを送り返します。

送信パケット(開始ルータから送信される)には、ICMP(MacOSおよびLinuxオペレーティングシステムのデフォルト)またはUDP(Windowsのデフォルト)を使用することができます。ネットワーク経路上のルータが特定のプロトコルのパケットをフィルタリングするように設定されている場合、送信トレースルートパケットに別のプロトコルを選択することは、より完全な結果を得るための1つの方法になります。

My Traceroute(MTR)とは?

My Traceroute(MTR)は、tracerouteと、ネットワークの接続性��速度をテストするもう一つの一般的な方法である「ping」を組み合わせたツールです。MTRは、ネットワーク経路上のホップに加え、目的地までの経路上の遅延やパケットロスなど、常に更新される情報を表示します。これは、経路上で何が起こっているかをリアルタイムで確認できるため、ネットワーク上で起きた問題のトラブルシューティングに役立ちます。

MTRは、トレースルートと同様の方法でネットワークの経路を捉え、定期的にパケットを送信して情報を収集し続け、ネットワークの健全性と速度に関する情報を表示を更新しながら提供する仕組みになっています。

トレースルートと同様に、MTRの送信パケットにはICMPやUDPを使用できますが、戻りパケット(Type 11:Time Exceeded)にはICMPを使用します。

MTRの読み方

以下に、MTRの出力の見方と、結論の出し方について3つの例を示します。

MTR #1: 正常

正常なMTR
Start: 2020-04-08T13:28:52+0100
HOST: myrouter Loss% Snt Last Avg Best Wrst StDev
1.|-- 10.10.1.1 0.0% 10 0.3 0.4 0.3 0.4 0.0
2.|-- 141.0.147.177.bcube.co.uk 0.0% 10 2.7 2.7 2.5 3.1 0.2
3.|-- 172.16.28.38 0.0% 10 2.8 6.4 2.8 22.2 6.1
4.|-- 172.17.13.76 0.0% 10 1.1 2.8 1.1 14.6 4.2
5.|-- 172.17.13.49 0.0% 10 1.4 4.0 1.3 25.0 7.4
6.|-- 172.17.13.24 0.0% 10 2.5 2.7 2.0 5.1 1.1
7.|-- one.one.one.one 0.0% 10 1.3 1.2 1.2 1.3 0.0

この例では、開始ルーターとCloudflareの1.1.1.1DNS サーバー間のネットワークパスを辿っています。MTRの出力は���の問題も示していません。1.1.1.1に到達するのに7ホップかかり、いずれもパケットロスを示していません。

MTR #2:パケットロス - 疑いあり

経路上のパケットロス
Start: 2020-04-08T12:48:28+0000
HOST: myrouter Loss% Snt Last Avg Best Wrst StDev
1.|-- 2400:cb00:207:1000::1 0.0% 10 1.1 6.0 0.6 15.7 5.9
2.|-- 2404:d400:4000:27::1 0.0% 10 0.4 0.6 0.2 2.9 0.8
3.|-- 2404:d400:0:8:: 0.0% 10 125.7 125.7 125.7 126.2 0.2
4.|-- 2001:978:2:42::e:1 50.0% 10 129.2 129.6 129.2 130.5 0.6
5.|-- be2846.ccr42.fra03.atlas.cogentco.com 80.0% 10 151.9 139.5 127.1 151.9 17.6
6.|-- be2814.ccr42.ams03.atlas.cogentco.com 80.0% 10 136.2 137.0 136.2 137.8 1.1
7.|-- be2183.ccr22.lpl01.atlas.cogentco.com 50.0% 10 146.3 146.2 145.9 146.3 0.1
8.|-- be3043.ccr22.ymq01.atlas.cogentco.com 30.0% 10 215.3 215.2 215.0 215.4 0.2
9.|-- be3260.ccr32.yyz02.atlas.cogentco.com 90.0% 10 227.8 227.8 227.8 227.8 0.0
10.|-- be2994.ccr22.cle04.atlas.cogentco.com 30.0% 10 234.9 234.9 234.5 235.1 0.2
11.|-- be2718.ccr42.ord01.atlas.cogentco.com 70.0% 10 233.7 233.8 233.7 233.9 0.1
12.|-- be2832.ccr22.mci01.atlas.cogentco.com 50.0% 10 244.8 245.1 244.8 245.5 0.3
13.|-- be3036.ccr22.den01.atlas.cogentco.com 30.0% 10 259.6 259.6 259.3 259.8 0.2
14.|-- be3038.ccr32.slc01.atlas.cogentco.com 90.0% 10 267.2 267.2 267.2 267.2 0.0
15.|-- be3110.ccr22.sfo01.atlas.cogentco.com 10.0% 10 291.0 291.1 291.0 291.4 0.1
16.|-- be3670.ccr41.sjc03.atlas.cogentco.com 30.0% 10 292.6 292.7 292.6 292.8 0.1
17.|-- 2001:550:2:1f::29:2 0.0% 10 312.3 291.5 287.0 312.3 8.6
8.6 0.0% 10 298.7 299.5 298.7 306.1 2.3
19.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
20.|-- ??? 100.0 9 0.0 0.0 0.0 0.0 0.0
21.|-- 2400:cb00:36:1008::a29e:40e2 0.0% 9 302.9 302.9 302.8 303.2 0.1

この例では、開始ルーターと2400:cb00:36:1008::a29e:40e2(IPv6アドレス)間のネットワークパスを示しています。出力は、Cogent上のすべてのホップで著しいパケットロスを示しています。しかし、最後のホップ(21)にパケットロスはありません。これは、ネットワークパスに実は問題がないことを示しています。多くの場合、起こっているのは「Control Plane Policing」と呼ばれるものです。

先に述べたように、MTRは(デフォルトでは)ICMPエコーパケットを送信し、パケットごとにTTL(Time-To-Live)を増加させることで動作します。TTLが切れると、ルーターはICMP Type 11(Time Exceeded)を返し、A地点からB地点までのホップ数を示します。

Cloudflareを含む多くのネットワーク事業者は、ルーターのコントロールプレーンに到達可能なICMPパケットの量に任意の制限を設定しています(コントロールプレーンとは、ルータの頭脳です)。ルーターのTTLを超えるパケットは、コントロールプレーンで処理されることになります。コントロールプレーンがあまりにも多くのパケットで過負荷状態になることを防ぐために、流量制限(ポリサー)が設定されています。そのため、すべての中間ホップではロスが見られますが、最終ホップでは見られません。中間ホップのルータのコントロールプレーンの流量制限値を超えていたため、その制限値を超えるトレースルートパケットに対してはType 11パケットが送り返されませんでしたが、パケットは無事に目的地に到達することができたのです。

MTR#3:実際のパケットロス

復路のパケットロス
Start: 2020-04-08T13:32:30+0000
HOST: myrouter Loss% Snt Last Avg Best Wrst StDev
1.|-- 162.158.216.129 0.0% 10 0.7 6.9 0.7 62.6 19.6
2.|-- 118.69.221.209 0.0% 10 0.2 0.3 0.2 1.3 0.3
3.|-- 118.69.252.172 0.0% 10 0.7 1.0 0.6 2.9 0.7
4.|-- 118.69.132.169 0.0% 10 11.4 11.3 11.2 11.5 0.1
5.|-- 118.69.247.64 0.0% 10 34.2 34.4 33.9 37.2 1.0
6.|-- 13335.sgw.equinix.com 50.0% 10 27.5 27.9 27.1 29.1 0.8
7.|-- 162.158.161.251 30.0% 10 26.8 26.8 26.8 26.8 0.0

この例では、開始ルータと162.158.161.251間のネットワークパスを示しています。出力は、最後の2つのホップ上のパケットロスを示しています。

その他のMTRのオプション

MTRには様々なオプションがあります。MTR のヘルプページ「mtr --help」で詳細を確認することができます。

よく使われるオプションは以下の通りです:

  • TCP MTR:ICMPパケットを使用する代わりに、TCPを使用します。オプションで宛先ポートも選択できます。
  • UDP MTR: ICMPの代わりにUDPを使用します。これは、ICMPパケットをブロックしているルータを回避するためや、特定のポートをテストする目的に使用することができます。
  • Show IPs:各ホップのレコードの横にIPアドレスを表示します。これにより、上流での問題点のレポートがより簡単になります。
  • AS Lookup:MTR内のAS番号を表示します。

ネットワーク層について