Linux 環境下如何通過 mtr 命令行工具進行鏈路測試

本文在介紹linux 環境下如何通過 mtr 命令行工具進行鏈路測試的基礎上,重點探討了其具體步驟,本文內容緊湊,希望大家可以有所收獲。

linux實例網站訪問丟包延時高

當網站訪問很慢或無法訪問時,若排除其它顯著問題,而檢測到 ping 有明顯丟包時,建議您作鏈路測試。Linux 環境下,您可以通過 mtr 命令行工具(優先使用) 或 traceroute 命令行工具進行鏈路測試來判斷問題來源。

通常情況下,請依照下述步驟進行處理:

利用鏈路測試工具探測網絡狀況和服務器狀態。

根據鏈路測試結果分析處理。

mtr 命令行工具(優先使用)

mtr (My traceroute)幾乎是所有 Linux 發行版本預裝的網絡測試工具,集成了 tracert 與 ping 這兩個命令的圖形界面,功能十分強大。

ping 與 tracert 通常被用來檢測網絡狀況和服務器狀態,具體說明如下:

Linux 環境下如何通過 mtr 命令行工具進行鏈路測試

mtr 默認發送 ICMP 數據包進行鏈路探測,通過 -u 參數來指定 udp 數據包用于探測。相對于 traceroute 只作一次鏈路跟蹤測試,mtr 會對鏈路上的相關節點做持續探測并給出相應的統計信息。mtr 能避免節點波動對測試結果的影響,所以其測試結果更正確,建議優先使用。

用法說明

mtr?[-hvrctglspni46]?[--help]?[--version]?[--report] ????????????????[--report-cycles=COUNT]?[--curses]?[--gtk] ????????????????[--raw]?[--split]?[--no-dns]?[--address?interface] ????????????????[--psize=bytes/-s?bytes] ????????????????[--interval=SECONDS]?HOSTNAME?[PACKETSIZE]

示例輸出

[root@centos?~]#?mtr?223.5.5.5 ??????????????????????????????????My?traceroute??[v0.75] mycentos6.6?(0.0.0.0)?????????????????????????????????????????????Wed?Jun?15?23:16:27?2016 Keys:??Help???Display?mode???Restart?statistics???Order?of?fields???quit ??????????????????????????????????????????????????Packets???????????????Pings ?Host???????????????????????????????????????????Loss%???Snt???Last???Avg??Best??Wrst?StDev ?1.???? ?2.?192.168.17.20????????????????????????????????0.0%?????7???13.1???5.6???2.1??14.7???5.7 ?3.?111.1.20.41??????????????????????????????????0.0%?????7????3.0??99.2???2.7?632.1?235.4 ?4.?111.1.34.197?????????????????????????????????0.0%?????7????1.8???2.0???1.2???2.9???0.6 ?5.?211.138.114.25???????????????????????????????0.0%?????6????0.9???4.7???0.9??13.9???5.8 ?6.?211.138.114.70???????????????????????????????0.0%?????6????1.8??22.8???1.8??50.8??23.6 ????211.138.128.134 ????211.138.114.2 ????211.138.114.66 ?7.?42.120.244.186???????????????????????????????0.0%?????6????1.4???1.6???1.3???1.8???0.2 ????42.120.244.198 ?8.?42.120.244.246???????????????????????????????0.0%?????6????2.8???2.9???2.6???3.2???0.2 ????42.120.244.242 ?9.???? 10.?223.5.5.5????????????????????????????????????0.0%?????6????2.7???2.7???2.5???3.2???0.3

常見可選參數說明

-r 或 —report:以報告模式顯示輸出。

-p 或 —split:將每次追蹤的結果分別列出來,而非如 —report 統計整個結果。

-s 或 —psize:指定 ping 數據包的大小。

-n 或 —no-dns:不對 IP 地址做域名反解析。

-a 或 —address:設置發送數據包的 IP 地址。用于主機有多個 IP 時。

-4:只使用 IPv4 協議。

-6:只使用 IPv6 協議。

在 mtr 運行過程中,您也可以輸入相應字母來快速切換模式,各字母的含義如下:

? 或 h:顯示幫助菜單。

d:切換顯示模式。

n:切換啟用或禁用 DNS 域名解析。

u:切換使用 ICMP 或 UDP 數據包進行探測。

返回結果說明

默認配置下,返回結果中各數據列的說明如下:

第一列(Host):節點 IP 地址和域名。如前面所示,按 n 鍵可以切換顯示。

第二列(Loss%):節點丟包率。

第三列(Snt):每秒發送數據包數。默認值是 10,可以通過參數 -c 指定。

第四列(Last):最近一次的探測延遲值。

第五、六、七列(Avg、Best、Wrst):分別是探測延遲的平均值、最小值和最大值。

第八列(StDev):標準偏差。越大說明相應節點越不穩定。

traceroute 命令行工具

traceroute 是幾乎所有 Linux 發行版本預裝的網絡測試工具,用于跟蹤 Internet 協議(IP)數據包傳送到目標地址時經過的路徑。

traceroute 先發送具有小的最大存活時間值(Max_TTL)的 UDP 探測數據包,然后偵聽從網關開始的整個鏈路上的 ICMP TIME_EXCEEDED 響應。探測從 TTL=1 開始,TTL 值逐步增加,直至接收到 ICMP PORT_UNREACHABLE 消息。ICMP PORT_UNREACHABLE 消息用于標識目標主機已經被定位,或命令已經達到允許跟蹤的最大 TTL 值。

traceroute 默認發送 UDP 數據包進行鏈路探測。可以通過 -I 參數來指定發送 ICMP 數據包用于探測。

用法說明

traceroute?[-I]?[?-m?Max_ttl?]?[?-n?]?[?-p?Port?]?[?-q?Nqueries?]?[?-r?]? [?-s?SRC_Addr?]?[??-t?TypeOfService?]?[?-f?flow?]?[?-v?]?[??-w?WaitTime?]?Host?[?PacketSize?]

示例輸出

[root@centos?~]#?traceroute?-I?223.5.5.5 traceroute?to?223.5.5.5?(223.5.5.5),?30?hops?max,?60?byte?packets ?1??*?*?* ?2??192.168.17.20?(192.168.17.20)??3.965?ms??4.252?ms??4.531?ms ?3??111.1.20.41?(111.1.20.41)??6.109?ms??6.574?ms??6.996?ms ?4??111.1.34.197?(111.1.34.197)??2.407?ms??2.451?ms??2.533?ms ?5??211.138.114.25?(211.138.114.25)??1.321?ms??1.285?ms??1.304?ms ?6??211.138.114.70?(211.138.114.70)??2.417?ms?211.138.114.66?(211.138.114.66)?? ?1.857?ms?211.138.114.70?(211.138.114.70)??2.002?ms ?7??42.120.244.194?(42.120.244.194)??2.570?ms??2.536?ms?42.120.244.186?(42.120.244.186)??1.585?ms ?8??42.120.244.246?(42.120.244.246)??2.706?ms??2.666?ms??2.437?ms ?9??*?*?* 10??public1.alidns.com?(223.5.5.5)??2.817?ms??2.676?ms??2.401?ms

常見可選參數說明

-d 使用 Socket 層級的排錯功能。

-f 設置第一個檢測數據包的存活數值 TTL 的大小。

-F 設置不要分段標識。

-g 設置來源路由網關,最多可設置 8 個。

-i 使用指定的網卡送出數據包。用于主機有多個網卡時。

-I 使用 ICMP 數據包替代 UDP 數據包進行探測。

-m 設置檢測數據包的最大存活數值 TTL 的大小。

-n 直接使用 IP 地址而非主機名稱(禁用 DNS 反查)。

-p 設置 UDP 傳輸協議的通信端口。

-r 忽略普通的 Routing table,直接將數據包送到遠端主機上。

-s 設置本地主機送出數據包的 IP 地址。

-t 設置檢測數據包的 TOS 數值。

-v 詳細顯示指令的執行過程。

-w 設置等待遠端主機回包時間。

-x 開啟或關閉數據包的正確性檢驗。

分析鏈路測試結果

以如下鏈路測試結果示例圖為基礎進行闡述:

Linux 環境下如何通過 mtr 命令行工具進行鏈路測試

操作步驟

判斷各區域是否存在異常,并根據各區域的情況分別處理。

區域 A:客戶端本地網絡,即本地局域網和本地網絡提供商網絡。針對該區域異常,客戶端本地網絡相關節點問題,請對本地網絡進行排查分析;本地網絡提供商網絡相關節點問題,請向當地運營商反饋。

區域 B:運營商骨干網絡。針對該區域異常,可根據異常節點 IP 查詢歸屬運營商,然后直接或通過阿里云售后技術支持,向相應運營商反饋問題。

區域 C:目標服務器本地網絡,即目標主機歸屬網絡提供商網絡。針對該區域異常,需要向目標主機歸屬網絡提供商反饋問題。

結合 Avg(平均值)和 StDev(標準偏差),判斷各節點是否存在異常。

若 StDev 很高,則同步觀察相應節點的 Best 和 Wrst,來判斷相應節點是否存在異常。

若 StDev 不高,則通過 Avg 來判斷相應節點是否存在異常。

注意:上述 StDev 高 或者 不高,并沒有具體的時間范圍標準。而需要根據同一節點其它列的延遲值大小來進行相對評估。比如,如果 Avg 為 30 ms,那么,當 StDev 為 25 ms,則認為是很高的偏差。而如果 Avg 為 325 ms,則同樣的 StDev(25 ms),反而認為是不高的偏差。

查看節點丟包率,若 Loss% 不為零,則說明這一跳網絡可能存在問題。

導致節點丟包的原因通常有兩種:

人為限制了節點的 ICMP 發送速率,導致丟包。

節點確實存在異常,導致丟包。

確定當前異常節點的丟包原因。

若隨后節點均沒有丟包,說明當前節點丟包是由于運營商策略限制所致,可以忽略。如前文鏈路測試結果示例圖中的第 2 跳所示。

若隨后節點也出現丟包,說明當前節點存在網絡異常,導致丟包。如前文鏈路測試結果示例圖中的第 5 跳所示。

說明:前述兩種情況可能同時發生,即相應節點既存在策略限速,又存在網絡異常。對于這種情況,若當前節點及其后續節點連續出現丟包,而且各節點的丟包率不同,則通常以最后幾跳的丟包率為準。如前文鏈路測試結果示例圖所示,在第 5、6、7跳均出現了丟包。所以,最終丟包情況,以第 7 跳的 40% 作為參考。

通過查看是否有明顯的延遲,來確認節點是否存在異常。通過如下兩個方面進行分析:

若某一跳之后延遲明顯陡增,則通常判斷該節點存在網絡異常。如前文鏈路測試結果示例圖所示,從第 5 跳之后的后續節點延遲明顯陡增,則推斷是第 5 跳節點出現了網絡異常。

注意:高延遲并不一定完全意味著相應節點存在異常,延遲大也有可能是在數據回包鏈路中引發的,建議結合 反向鏈路測試 一并分析。

ICMP 策略限速 也可能會導致相應節點的延遲陡增,但后續節點通常會恢復正常。如前文鏈路測試結果示例圖所示,第 3 跳有 100% 的丟包率,同時延遲也明顯陡增。但隨后節點的延遲馬上恢復了正常。所以判斷該節點的延遲陡增及丟包是由于策略限速所致。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享