本篇介紹如何在 Linux 中使用 MTR 這個網路診斷工具,檢測網路連線相關的問題。
MTR 是一個跨平台、簡單易用的命令列網路檢測工具,其結合了 ping
與 traceroute
兩個指令的功能,並提供了更詳細的資訊,讓管理者在使用上更為方便。
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 的畫面,可以按下 q
鍵,或是按下 Ctrl
+ c
也可以。
以 IP 位址表示節點
MTR 會自動透過 DNS 查詢各個網路節點的網域名稱,如果想要統一以 IP 位址來表示,可以加上 -n
參數:
# 以 IP 位址表示節點 mtr -n www.google.com.tw
同時以網域名稱與 IP 位址表示節點
如果想要同時顯示各節點的網域名稱以及 IP 位址,可以改用 -b
參數:
# 同時顯示網域名稱與 IP 位址 mtr -b www.google.com.tw
指定 Ping 上限
MTR 預設會不斷地持續發送 ping
封包,直到使用者按下 q
或 Ctrl
+ 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