mtr 網路路徑診斷 文章首圖

mtr 網路路徑診斷

mtr 網路路徑診斷:超越 ping 與 traceroute 的終極診斷工具

在 Linux 系統管理與網路排錯的日常工作中,我們經常需要判斷連線品質、延遲或封包遺失的問題所在。許多初學者習慣使用 ping 來檢查主機是否在線,或使用 traceroute 來追蹤資料包的路由路徑。然而,這兩者各有其局限性:ping 無法顯示中間節點的狀態,而傳統的 traceroute 每次只能顯示一次快照,難以觀察網路抖動的趨勢。

這時,mtr (My Traceroute) 就成為了一位強大的替代方案。它結合了 pingtraceroute 的功能,並持續更新統計數據,讓我們能即時監控網路路徑的穩定性。本文將深入介紹 mtr 的安裝、核心選項與實際應用場景。

什麼是 mtr?

mtr 是一個開源的網路診斷工具,它會向目標主機發送 ICMP 或 UDP 封包,並在每個路由節點上持續收集統計數據。與一次性執行的 traceroute 不同,mtr 會不斷輪詢,並即時顯示每個跳躍點(Hop)的丟包率、最小/平均/最大延遲時間。這對於診斷 intermittent(間歇性)網路問題至關重要。

安裝與基本使用

在 Ubuntu 22.04 或 Debian 12 系統中,安裝 mtr 非常簡單。請在終端機中執行以下指令:

sudo apt update
sudo apt install mtr

安裝完成後,你可以直接執行 mtr 並指定目標域名或 IP 地址。以下是一個基本的執行範例,目標為 Google 的公共 DNS 伺服器:

mtr 8.8.8.8

執行後,你不會立即看到完整的結果,因為 mtr 預設會持續運作以累積統計數據。通常建議設定一個計時器或停止條件。例如,執行 10 次循環後自動停止:

mtr -r -c 10 8.8.8.8

這裡的 -r 代表 report(報告模式),執行完畢後會輸出整潔的表格;-c 代表 count(計數),指定循環次數。

核心選項解析

為了更靈活地進行診斷,了解幾個關鍵選項是必不可少的:

  1. -r (Report):以報表格式輸出結果,適合記錄或分享。
  2. -c (Count):指定發送封包的次數。若不指定,mtr 會無限期執行。
  3. -i (Interval):設定發送封包的間隔時間(秒)。預設為 0.1 秒,對於快速網路診斷可能太快,可調高至 1 或 2 秒以減輕伺服器負擔。
  4. -n (Numeric):僅顯示 IP 地址,不進行 DNS 反解。這能顯著加快啟動速度,避免 DNS 查詢造成的延遲。
  5. -T (TCP):使用 TCP 封包而非預設的 ICMP。這對於繞過防火牆限制或模擬真實網頁連線(HTTP/HTTPS)非常有用。

實際診斷範例

場景一:快速檢查網路延遲

假設你懷疑連線到某個網站的延遲過高,但不想等待長時間的統計累積。使用 -n-c 可以快速獲得結果:

mtr -n -c 5 -r example.com

輸出結果類似如下:

Host                    Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. 192.168.1.1         0.0%     5     1.2   1.1   1.0   1.3   0.1
  2. 10.0.0.1            0.0%     5     2.1   2.0   1.9   2.2   0.1
  3. 203.0.113.1         0.0%     5     5.5   5.4   5.3   5.6   0.1
  4. 198.51.100.1        0.0%     5     10.2  10.1  9.9   10.3  0.1
  5. 93.184.216.34       0.0%     5     12.1  12.0  11.8  12.2  0.1

從中可以看出,每個節點的 Loss% 均為 0,且 Avg(平均延遲)穩定在 12ms,表示連線品質良好。

場景二:使用 TCP 模式繞過防火牆

某些網路環境可能會阻擋 ICMP 封包,導致 mtr 無法正確顯示路由。此時可以使用 -T 選項模擬 HTTP 連線:

mtr -n -T -c 10 example.com

這會向目標主機的 80 端口發送 TCP SYN 封包,更真實地反映瀏覽器訪問網站時的網路路徑狀況。

常見問題與解決方案

Q1: mtr 顯示 "Unknown host" 或 DNS 解析失敗?

這通常是因為系統 DNS 設定問題或網路不通所致。建議先使用 -n 選項強制使用 IP 地址進行測試,以排除 DNS 干擾。若 IP 地址仍無法連線,則問題可能出在路由或防火牆設定。

*Q2: 為什麼某些節點顯示為 " "?**

當節點顯示為星號時,表示該節點未回應封包。這常見於兩種情況:一是該路由器配置為不回應 ICMP(安全策略),二是網路 congested(擁塞)導致封包遺失。若僅是偶爾出現星號,通常無需擔心;若連續多個節點均為星號,則可能表示該段網路存在嚴重問題或路由黑洞。

小結

mtr 是 Linux 系統管理員不可或缺的工具,它提供了比傳統 ping 和 traceroute 更豐富、更實時的網路診斷資訊。通過熟練掌握其選項,特別是 -r-c-n,你可以快速定位網路瓶頸,並為後續的排錯工作提供有力的數據支持。下次遇到網路問題時,不妨試試看 mtr,它或許能為你揭開網路迷霧。