概述
當網站訪問很慢或無法訪問時,若已經排除顯著的問題,而使用ping命令檢測到有明顯丟包時,建議您做鏈路測試。Linux環境下,推薦優先使用mtr命令行工具測試,或使用traceroute命令行工具進行鏈路測試來判斷問題來源。通常情況下,鏈路測試步驟如下。
- 利用鏈路測試工具探測網絡狀況和服務器狀態。
-
根據鏈路測試結果分析處理。
詳細信息
阿里云提醒您:
- 如果您對實例或數據有修改、變更等風險操作,務必注意實例的容災、容錯能力,確保數據安全。
- 如果您對實例(包括但不限于ECS、RDS)等進行配置與數據修改,建議提前創建快照或開啟RDS日志備份等功能。
- 如果您在阿里云平臺授權或者提交過登錄賬號、密碼等安全信息,建議您及時修改。
如下分別介紹mtr命令行工具和tracert命令行工具的使用方法及如何分析鏈路測試結果。
mtr命令行工具
mtr(My traceroute)幾乎是所有Linux發行版本預裝的網絡測試工具,集成了tracert與ping這兩個命令的圖形界面,功能十分強大。ping與tracert通常被用來檢測網絡狀況和服務器狀態,具體說明如下。
命令名稱 | 具體說明 |
---|---|
ping | 送出封包到指定的服務器。如果服務器有回應就會傳送回封包,并附帶返回封包來回的時間。 |
tracert | 返回從用戶的電腦到指定的服務器中間經過的所有節點(路由)以及每個節點的回應速度。 |
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.X.X.20 0.0% 7 13.1 5.6 2.1 14.7 5.7
3. 111.X.X.41 0.0% 7 3.0 99.2 2.7 632.1 235.4
4. 111.X.X.197 0.0% 7 1.8 2.0 1.2 2.9 0.6
5. 211.X.X.25 0.0% 6 0.9 4.7 0.9 13.9 5.8
6. 211.X.X.70 0.0% 6 1.8 22.8 1.8 50.8 23.6
211.X.X.134
211.X.X.2
211.X.X.66
7. 42.X.X.186 0.0% 6 1.4 1.6 1.3 1.8 0.2
42.X.X.198
8. 42.X.X.246 0.0% 6 2.8 2.9 2.6 3.2 0.2
42.X.X.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、Worst):分別是探測延遲的平均值、最小值和最大值。
- 第八列(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.X.X.20 (192.X.X.20) 3.965 ms 4.252 ms 4.531 ms
3 111.X.X.41 (111.X.X.41) 6.109 ms 6.574 ms 6.996 ms
4 111.X.X.197 (111.X.X.197) 2.407 ms 2.451 ms 2.533 ms
5 211.X.X.25 (211.X.X.25) 1.321 ms 1.285 ms 1.304 ms
6 211.X.X.70 (211.X.X.70) 2.417 ms 211.138.114.66 (211.X.X.66) 1.857 ms 211.X.X.70 (211.X.X.70) 2.002 ms
7 42.X.X.194 (42.X.X.194) 2.570 ms 2.536 ms 42.X.X.186 (42.X.X.186) 1.585 ms
8 42.X.X.246 (42.X.X.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:開啟或關閉數據包的正確性檢驗。
分析鏈路測試結果
以如下鏈路測試結果示例圖為基礎進行闡述。
- 判斷各區域是否存在異常,并根據各區域的情況分別處理。
-
區域A:客戶端本地網絡,即本地局域網和本地網絡提供商網絡。針對該區域異常,客戶端本地網絡相關節點問題,請對本地網絡進行排查分析。本地網絡提供商網絡相關節點問題,請向當地運營商反饋。
-
區域B:運營商網絡。針對該區域異常,可根據異常節點IP查詢歸屬運營商,然后直接或通過阿里云售后技術支持,向相應運營商反饋問題。
-
區域C:目標服務器本地網絡,即目標主機歸屬網絡提供商網絡。針對該區域異常,需要向目標主機歸屬網絡提供商反饋問題。
-
-
結合Avg(平均值)和StDev(標準偏差),判斷各節點是否存在異常。
- 若StDev很高,則同步觀察相應節點的Best和Worst,來判斷相應節點是否存在異常。
- 若StDev不高,則通過Avg來判斷相應節點是否存在異常。
注意:上述StDev高或者不高,并沒有具體的時間范圍標準。而需要根據同一節點其它列的延遲值大小來進行相對評估。比如,如果Avg為30ms,那么,當StDev為25ms,則認為是很高的偏差。而如果Avg為325ms,則同樣的StDev為25ms,反而認為是不高的偏差。
-
查看節點丟包率,若“Loss%”不為零,則說明這一跳路由的網絡可能存在問題。導致節點丟包的原因通常有兩種。
- 人為限制了節點的ICMP發送速率,導致丟包。
- 節點確實存在異常,導致丟包。
-
確定當前異常節點的丟包原因。
-
若隨后節點均沒有丟包,說明當前節點丟包是由于運營商策略限制所致,可以忽略。如前文鏈路測試結果示例圖中的第2跳路由的網絡所示。
-
若隨后節點也出現丟包,說明當前節點存在網絡異常,導致丟包。如前文鏈路測試結果示例圖中的第5跳路由的網絡所示。
說明:前述兩種情況可能同時發生,即相應節點既存在策略限速,又存在網絡異常。對于這種情況,若當前節點及其后續節點連續出現丟包,而且各節點的丟包率不同,則通常以最后幾跳路由的網絡的丟包率為準。如前文鏈路測試結果示例圖所示,在第5、6、7跳路由的網絡均出現了丟包。所以,最終丟包情況,以第7跳路由的網絡的40%作為參考。
-
-
通過查看是否有明顯的延遲,來確認節點是否存在異常。通過如下兩個方面進行分析。
-
若某一跳路由的網絡之后延遲明顯陡增,則通常判斷該節點存在網絡異常。如前文鏈路測試結果示例圖所示,從第5跳路由的網絡之后的后續節點延遲明顯陡增,則推斷是第5跳路由的網絡節點出現了網絡異常。
說明:高延遲并不一定完全意味著相應節點存在異常,延遲大也有可能是在數據回包鏈路中引發的,建議結合反向鏈路測試一并分析。
-
ICMP策略限速也可能會導致相應節點的延遲陡增,但后續節點通常會恢復正常。如前文鏈路測試結果示例圖所示,第3跳路由的網絡有100%的丟包率,同時延遲也明顯陡增。但隨后節點的延遲馬上恢復了正常。所以判斷該節點的延遲陡增及丟包是由于策略限速所致。
-
操作建議
- 若數據包在目標地址出現了100%的丟包,建議對目標服務器的安全策略配置進行排查。
- 若數據包出現循環跳轉,導致無法到達目標服務器,建議聯系相應節點歸屬運營商處理。
- 若數據包在跳轉后無法收到任何反饋,建議結合反向鏈路測試做進一步確認,并聯系相應節點歸屬運營商進行處理。
- 阿里云中國內地機房和其他國家或地區機房有網絡通信的專線,為降低通信時候的丟包率,推薦使用高速通道。
- 若主機掉包和延遲非常高,建議做mtr雙向測試,即本地到服務器的和服務器到本地的測試。無法遠程登錄時,請通過管理終端進行登錄。
適用于
- 云服務器 ECS