本篇介紹如何在 Linux 中使用 MTR 這個網路診斷工具,檢測網路連線相關的問題。

MTR 是一個跨平台、簡單易用的命令列網路檢測工具,其結合了 pingtraceroute 兩個指令的功能,並提供了更詳細的資訊,讓管理者在使用上更為方便。

MTR 運作原理

MTR 在一開始會針對指定的主機,以 traceroute 找出中間的每一個網路節點(閘道器、路由器、橋接器等),然後使用 ping 去檢查每一個節點的網路連線狀況,即時更新在輸出的報表中,讓管理者一目了然。

安裝 MTR

大部份的 Linux 發行版中預設都會安裝 MTR 這個工具,如果您的系統沒有安裝的話,亦可透過內建的套件來安裝,以下是各種不同的套件管理系統的安裝方式:

# 使用 apt 安裝
sudo apt install mtr

# 使用 yum 安裝
sudo yum install mtr

# 使用 dnf 安裝
sudo dnf install mtr

使用 MTR

MTR 最簡單的使用方式就是執行 mtr 指令並指定遠端主機的網域名稱(domain name)或 IP 位址,例如:

mtr www.google.com.tw

使用 MTR 檢測網路連線

若要離開 MTR 的畫面,可以按下 q 鍵,或是按下 Ctrl + c 也可以。

以 IP 位址表示節點

MTR 會自動透過 DNS 查詢各個網路節點的網域名稱,如果想要統一以 IP 位址來表示,可以加上 -n 參數:

# 以 IP 位址表示節點
mtr -n www.google.com.tw

以 IP 位址來表示節點

同時以網域名稱與 IP 位址表示節點

如果想要同時顯示各節點的網域名稱以及 IP 位址,可以改用 -b 參數:

# 同時顯示網域名稱與 IP 位址
mtr -b www.google.com.tw

同時顯示網路名稱與 IP 位址

指定 Ping 上限

MTR 預設會不斷地持續發送 ping 封包,直到使用者按下 qCtrl + c 離開為止。

若要指定 MTR 發送 ping(ICMP ECHO)封包的上限,可以使用 -c 來指定上限值:

# 指定 ICMP ECHO 發送上限數為 5
mtr -c 5 www.google.com.tw

這樣當 MTR 發送的 ping 封包達到上限值的時候就會停止,並且自動離開 MTR 的畫面。

產生報表

如果想要將 MTR 的測試結果輸出為報表,可以使用 -r 參數,例如:

# 輸出報表
mtr -c 5 -r www.google.com.tw > output.txt

輸出的 output.txt 內容會類似這樣:

Start: Tue Jul 17 20:08:50 2018
HOST: gtwang-pc                   Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.0.1                0.0%     5    2.3   6.3   2.3  10.5   3.6
  2.|-- h254.s98.ts.hinet.net      0.0%     5    9.0  10.6   8.4  16.8   3.4
  3.|-- hymd-3302.hinet.net        0.0%     5    8.0   8.8   8.0  10.5   0.7
  4.|-- tne1-3012.hinet.net        0.0%     5   17.1  17.3  16.0  19.1   1.1
  5.|-- pcpd-3212.hinet.net        0.0%     5   15.9  14.9  14.0  15.9   0.7
  6.|-- pcpd-3211.hinet.net        0.0%     5   17.9  16.8  14.3  18.4   1.7
  7.|-- 72.14.218.142              0.0%     5   13.1  22.3  13.1  41.5  11.9
  8.|-- 108.170.244.65             0.0%     5   16.1  15.8  15.2  16.1   0.0
  9.|-- 209.85.245.253             0.0%     5   14.8  14.9  14.5  15.7   0.0
 10.|-- tsa01s08-in-f3.1e100.net   0.0%     5   13.0  17.9  13.0  35.1   9.6

如果有些太長的節點網域名稱會被截斷的話,可以改用 -w 參數,以寬格式輸出報表:

# 以寬格式輸出報表
mtr -c 5 -w www.google.com.tw > output.txt

自訂欄位

若想要改變 MTR 輸出的表格欄位,可以使用 -o 自行指定資料的欄位與順序,例如:

# 自訂輸出欄位
mtr -o "LSDR NBAW JMXI" www.google.com.tw

自訂欄位

以下是各個英文字母所代表的欄位:

  • L:封包遺失率(Loss ratio)。
  • D:封包遺失數(Dropped packets)。
  • R:封包接收數(Received packets)。
  • S:封包發送數(Sent Packets)。
  • N:最新的 RTT(Newest RTT,單位為 ms)。
  • B:最佳的 RTT(Min/Best RTT,單位為 ms)。
  • A:平均的 RTT(Average RTT,單位為 ms)。
  • W:最差的 RTT(Max/Worst RTT,單位為 ms)。
  • V:標準差(Standard Deviation)。
  • G:幾何平均(Geometric Mean)。
  • J:目前的 Jitter 值(Current Jitter)。
  • M:平均的 Jitter 值(Jitter Mean/Avg.)。
  • X:最差的 Jitter 值(Worst Jitter)。
  • I:Interarrival Jitter

指定 Ping 封包發送間隔

MTR 預設會每秒發送一個 ping(ICMP ECHO)封包,若要改變發送封包的間隔時間,可以使用 -i 參數指定間隔的秒數:

# 每隔 2 秒發送一個 ICMP ECHO 封包
mtr -i 2 www.google.com.tw

使用 TCP 或 UDP 封包

MTR 也可以使用 TCP SYN 封包或是 UDP 的封包來替代預設的 ICMP ECHO 封包,進行網路連線的測試:

# 使用 TCP 封包測試網路連線
mtr --tcp www.google.com.tw

# 使用 UDP 封包測試網路連線
mtr --udp www.google.com.tw

指定最大節點數

MTR 預設的最大節點數是 30,若要改變這個設定,可以使用 -m 參數指定新的設定值:

# 設定最大節點數為 35
mtr -m 35 www.google.com.tw

指定封包大小

如果想要指定 ICMP 的封包大小,可以使用 -s 參數來指定:

# 設定封包大小為 256
mtr -s 256 www.google.com.tw

如果將封包大小指定為負數,則 MTR 在每次發送封包時,就會自動隨機產生該數值以下的亂數值,作為封包大小:

# 產生 256 以下的亂數,作為封包大小
mtr -s -256 www.google.com.tw

參考資料:Tecmint