My Traceroute (MTR) 結合了 traceroute 和 ping,用於測量網路路徑的運作狀況。
閱讀本文後,您將能夠:
複製文章連結
Traceroute 是用來診斷網路路徑中問題的工具。Traceroute 用於瞭解 IP 封包從一台電腦(來源 IP 位址)到另一台電腦(目的地 IP 位址)所採用的路徑。命令 traceroute(在 Linux 或 macOS 上)或 tracert(在 Windows 上)有助於理解:
*來回時間 (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 工具將封包傳送到目的地 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) 是結合 traceroute 和 ping 的工具,這是測試網路連線能力和速度的另一種常見方法。除了網路路徑上的躍點外,MTR 還顯示到目的地的路線中不斷更新的延遲和封包遺失資訊。這可讓您即時看到路徑上發生的情況,協助對網路問題進行疑難排解。
MTR 以與 traceroute 類似的方式探索網路路徑,然後定期傳送封包以繼續收集資訊,以提供有關網路健康情況和速度的更新檢視。
與 traceroute 一樣,MTR 可以將 ICMP 或 UDP 用於傳出封包,但依賴 ICMP 傳回 (Type 11: Time Exceeded) 封包。
以下是如何閱讀 MTR 輸出並從中得出結論的三個範例。
清潔 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,並且沒有任何一項表示發生任何封包遺失。
路徑上的封包遺失 | |||||||
---|---|---|---|---|---|---|---|
開始: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 封包,但封包能夠安全地到達目的地。
傳回路徑上的封包遺失 | |||||||
---|---|---|---|---|---|---|---|
開始: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 --help
一些常用的選項包括:
入門
關於網路層級
網路類型
網路基礎知識