什麼是 My Traceroute (MTR)?

My Traceroute (MTR) 結合了 traceroute 和 ping,用於測量網路路徑的運作狀況。

學習目標

閱讀本文後,您將能夠:

  • 定義「traceroute」和「MTR」
  • 瞭解 traceroute 和 MTR 的運作方式
  • 讀取 MTR 結果以診斷網路路徑中的問題

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是 Traceroute?

Traceroute 是用來診斷網路路徑中問題的工具。Traceroute 用於瞭解 IP 封包從一台電腦(來源 IP 位址)到另一台電腦(目的地 IP 位址)所採用的路徑。命令 traceroute(在 Linux 或 macOS 上)或 tracert(在 Windows 上)有助於理解:

  • 您的封包正在採取的路徑(包括每個路由器的 IP 位址)
  • 來源與網路路徑中每個躍點(或封包通過的路由器)之間的 RTT*

*來回時間 (RTT) 是資料往返於網路上某個點所需的時間。

下面是到 1.1.1.1 的範例 traceroute。帶有星號 (* * *) 的行代表未傳回封包的躍點;當路由器設定為忽略 traceroute 封包時,可能會發生這種情況。每一行的毫秒數是每個封包從來源到該躍點的往返時間(traceroute 一次傳送三個封包以驗證結果)。

Traceroute 範例
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 瀏覽器向網站的伺服器傳送請求,則該請求在傳送過程中可能必須在幾個中繼網路之間跳轉。

traceroute 如何運作?

traceroute 工具將封包傳送到目的地 IP,並將存留時間 (TTL) 設定為 1,這樣封包到達的第一個路由器將傳回錯誤(「超出時間」)。當錯誤傳回時,traceroute 工具會記錄第一個路由器的識別和來回時間、遞增 TTL,並傳送新封包、重複此過程,直到:1) 最後一個封包到達目的地 IP;或 2) 兩組封包被捨棄。

這樣,此工具可讓您瞭解封包所採取的路徑以及每個躍點的來回時間,以便您能夠對封包遺失和延遲進行疑難排解。

Traceroute 依賴 ICMP(網際網路控制訊息通訊協定)通訊協定。ICMP 是用於錯誤測試的網路層通訊協定。它沒有關聯的傳輸通訊協定,直接在網際網路通訊協定 (IP) 上執行。當超過 traceroute 工具傳送封包的 TTL 時,路由器會傳回 ICMP Type 11 (Time Exceeded Error) 封包。

傳出封包(從起始路由器傳送)可以使用 ICMP(macOS 和 Linux 作業系統上的預設值)或 UDP(Windows 上的預設值)。如果網路路徑上的路由器設定為篩選掉特定通訊協定的封包,則為傳出的 traceroute 封包選擇不同的通訊協定可獲得更完整的結果。

什麼是 My Traceroute (MTR)?

My Traceroute (MTR) 是結合 traceroute 和 ping 的工具,這是測試網路連線能力和速度的另一種常見方法。除了網路路徑上的躍點外,MTR 還顯示到目的地的路線中不斷更新的延遲和封包遺失資訊。這可讓您即時看到路徑上發生的情況,協助對網路問題進行疑難排解。

MTR 以與 traceroute 類似的方式探索網路路徑,然後定期傳送封包以繼續收集資訊,以提供有關網路健康情況和速度的更新檢視。

與 traceroute 一樣,MTR 可以將 ICMP 或 UDP 用於傳出封包,但依賴 ICMP 傳回 (Type 11: Time Exceeded) 封包。

如何閱讀 MTR

以下是如何閱讀 MTR 輸出並從中得出結論的三個範例。

MTR #1:全部清潔

清潔 MTR
開始:2020-04-08T13:28:52+0100
主機:myrouter 封包遺失率 SNT 最後的值 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.1 DNS 伺服器之間的網路路徑。MTR 輸出沒有表明任何問題—— 需要 7 次跳躍才能到達 1.1.1.1,並且沒有任何一項表示發生任何封包遺失。

MTR #2:是否出現了封包遺失?

路徑上的封包遺失
開始:2020-04-08T12:48:28+0000
主機:myrouter 封包遺失率 SNT 最後的值 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) 上沒有封包遺失。這表明網路路徑實際上沒有問題。正在發生的事情通常被稱為「控制平面監管」。

如前所述,MTR 透過傳送(預設情況下)ICMP 回應封包來工作,每個封包具有遞增的 TTL(存留時間)。當 TTL 過期時,路由器會傳回一個 ICMP Type 11 (Time Exceeded),表示從 A 點到 B 點有多少個躍點。

許多網路營運者(包括 Cloudflare)對允許到達路由器控制平面的 ICMP 封包數量設定了任意限制。(控制平面是路由器的大腦。)超過路由器 TTL 的封包必須由控制平面處理。為了防止控制平面被過多的此類封包淹沒,設定了速率限制(或監管器),這就是為什麼我們看到所有封包遺失都發生在中繼躍點上,而不是在最後一個躍點上:中繼躍點上的路由器的控制平面速率限制被超過,因此對於超過這些限制的 traceroute 封包不會傳回 Type 11 封包,但封包能夠安全地到達目的地。

MTR #3:實際封包遺失

傳回路徑上的封包遺失
開始:2020-04-08T13:32:30+0000
主機:myrouter 封包遺失率 SNT 最後的值 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:使用 TCP 而非 ICMP 封包。您也可以選擇一個目的地連接埠。
  • UDP MTR:使用 UDP 而非 ICMP。這可用於規避封鎖 ICMP 封包的路由器,或用於測試一個特定的連接埠。
  • 顯示 IP:在每一個躍點的記錄旁邊顯示 IP 位址。這使得向上游報告問題更加簡單。
  • AS 查閱:顯示 MTR 中的 AS 號碼