天天看點

ping 丢包或不通時鍊路測試說明鍊路測試工具介紹鍊路測試結果分析簡要說明常見鍊路異常場景和測試報告鍊路測試步驟工單送出須知更多資源

當用戶端通路目标伺服器出現 ping 丢包或 ping 不通時,可以通過 tracert 或 mtr 等工具進行鍊路測試來判斷問題來源。本文先介紹了進行鍊路測試的相關工具,然後對測試結果分析及測試步驟進行了說明。

根據作業系統類型的不同,鍊路測試所使用的工具也有所不同。分别簡要介紹如下。

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#windows%20%e7%8e%af%e5%a2%83%e4%b8%8b%e9%93%be%e8%b7%af%e6%b5%8b%e8%af%95%e5%b7%a5%e5%85%b7%e4%bb%8b%e7%bb%8d">windows 環境下鍊路測試工具介紹</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#traceroute%20%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7">traceroute 指令行工具</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#mtr%20%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7%ef%bc%88%e5%bb%ba%e8%ae%ae%e4%bc%98%e5%85%88%e4%bd%bf%e7%94%a8%ef%bc%89">mtr 指令行工具(建議優先使用)</a>

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 資料包用于探測。

用法說明:

示例輸出:

常見可選參數說明:

-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 開啟或關閉資料包的正确性檢驗。

mtr (my traceroute)也是幾乎所有 linux 發行版本預裝的網絡測試工具。他把 ping和 traceroute 的功能并入了同一個工具中,是以功能更強大。

mtr 預設發送 icmp 資料包進行鍊路探測。可以通過 -u 參數來指定使用 udp 資料包用于探測。

相對于 traceroute 隻會做一次鍊路跟蹤測試,mtr 會對鍊路上的相關節點做持續探測并給出相應的統計資訊。是以,mtr能避免節點波動對測試結果的影響,是以其測試結果更正确,建議優先使用。

-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):标準偏差。越大說明相應節點越不穩定。

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#tracert%20%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7">tracert 指令行工具</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#winmtr%20%e5%b7%a5%e5%85%b7%ef%bc%88%e5%bb%ba%e8%ae%ae%e4%bc%98%e5%85%88%e4%bd%bf%e7%94%a8%ef%bc%89">winmtr 工具(建議優先使用)</a>

tracert (trace route) 是 windows 自帶的網絡診斷指令行實用程式,用于跟蹤 internet 協定 (ip) 資料包傳送到目标位址時經過的路徑。 

tracert 通過向目标位址發送 icmp 資料包來确定到目标位址的路由。在這些資料包中,tracert 使用了不同的 ip“生存期”(ttl) 值。由于要求沿途的路由器在轉發資料包前至少必須将 ttl 減少 1,是以 ttl 實際上相當于一個躍點計數器 (hop counter)。當某個資料包的 ttl 達到零 (0) 時,相應節點就會向源計算機發送一個 icmp“逾時”的消息。 

tracert 第一次發送 ttl 為 1 的資料包,并在每次後續傳輸時将 ttl 增加 1,直到目标位址響應或達到 ttl 的最大值。中間路由器發送回來的 icmp“逾時”消息中包含了相應節點的資訊。

-d:指定不将位址解析為主機名(禁用 dns 反解)。

-h:maximum_hops,指定搜尋目标位址時的最大躍點數。

-j: host-list,指定沿主機清單的松散源路由。

-w:timeout,由每個回複的 timeout 指定的等待毫秒數。

-r:跟蹤往返行程路徑(僅适用于 ipv6)。

-s:srcaddr,要使用的源位址(僅适用于 ipv6)。

-4:強制使用 ipv4。

-6:強制使用 ipv6。

target_host:目标主機域名或 ip 位址。

winmtr 是 mtr 工具在 windows 環境下的圖形化實作,但進行了功能簡化,隻支援 mtr部分參數的調整設定。winmtr 預設發送icmp 資料包進行探測,無法切換。

和 mtr 一樣,相比 tracert,winmtr 能避免節點波動對測試結果的影響,是以測試結果更正确。是以,在 winmtr 可用的情況下,建議優先使用 winmtr進行鍊路測試。

winmtr 無需安裝,直接解壓運作即可。操作方法非常簡單,說明如下:

如下圖所示,運作程式後,在 host 字段輸入目标伺服器域名或 ip(注意前面不要包含空格)。

ping 丢包或不通時鍊路測試說明鍊路測試工具介紹鍊路測試結果分析簡要說明常見鍊路異常場景和測試報告鍊路測試步驟工單送出須知更多資源

點選 start 開始測試(開始測試後,相應按鈕變成了 stop)。

運作一段時間後,點選 stop 停止測試。

其它選項說明:

copy text to clipboard:将測試結果以文本格式複制到粘貼闆。

copy html to clipboard:将測試結果以 html 格式複制到粘貼闆。

export text:将測試結果以文本格式導出到指定檔案。

export html:将測試結果以 html 格式導出到指定檔案。

options:可選參數,包括:

interval(sec):每次探測的間隔(過期)時間。預設為 1 秒。

ping size(bytes): ping 探測所使用的資料包大小,預設為 64 位元組。、

max hosts in lru list: lru 清單支援的最大主機數,預設值為 128。

resolve names:通過反查 ip 以域名顯示相關節點。

第一列(hostname):節點 ip 或域名。

第二列(nr):節點編号。

第三列(loss%):節點丢包率。

第四列(sent):已發送的資料包數量。

第五列(recv):已成功接收的資料包數量。

第六、七、八、九列(best 、avg、worst、last):分别是到相應節點延遲的最小值、平均值、最大值和最後一次值。

由于 mtr(winmtr)有更高的準确性。本文以其測試結果為例,對鍊路測試結果的分析進行簡要說明。

ping 丢包或不通時鍊路測試說明鍊路測試工具介紹鍊路測試結果分析簡要說明常見鍊路異常場景和測試報告鍊路測試步驟工單送出須知更多資源

對鍊路測試結果進行分析時,需要關注如下要點:

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e7%bd%91%e7%bb%9c%e5%8c%ba%e5%9f%9f">網絡區域</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e9%93%be%e8%b7%af%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1">鍊路負載均衡</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e7%bb%93%e5%90%88avg%ef%bc%88%e5%b9%b3%e5%9d%87%e5%80%bc%ef%bc%89%e5%92%8c%20stdev%ef%bc%88%e6%a0%87%e5%87%86%e5%81%8f%e5%b7%ae%ef%bc%89%e7%bb%bc%e5%90%88%e5%88%a4%e6%96%ad">結合avg(平均值)和 stdev(标準偏差)綜合判斷</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#loss%25%ef%bc%88%e4%b8%a2%e5%8c%85%e7%8e%87%ef%bc%89%e7%9a%84%e5%88%a4%e6%96%ad">loss%(丢包率)的判斷</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e5%85%b3%e4%ba%8e%e5%bb%b6%e8%bf%9f">關于延遲</a>

正常情況下,從用戶端到目标伺服器的整個鍊路,會顯著的包含如下區域:

由于鍊路抖動或其它因素的影響,節點的 best 和 worst 值可能相差很大。而 avg(平均值) 統計了自鍊路測試以來所有探測的平均值,是以能更好的反應出相應節點的網絡品質。

而 stdev(标準偏內插補點)越高,則說明資料包在相應節點的延時值越不相同(越離散)。是以,标準偏內插補點可用于協助判斷 avg 是否真實反應了相應節點的網絡品質。例如,如果标準偏差很大,說明資料包的延遲是不确定的。可能某些資料包延遲很小(例如:25ms),而另一些延遲卻很大(例如:350ms),但最終得到的平均延遲反而可能是正常的。是以,此時 avg 并不能很好的反應出實際的網絡品質情況。

綜上,建議的分析标準是:

如果 stdev 很高,則同步觀察相應節點的 best 和 wrst,來判斷相應節點是否存在異常。

如果 stdev 不高,則通過 avg來判斷相應節點是否存在異常。

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

任一節點的 loss%(丢包率)如果不為零,則說明這一跳網絡可能存在問題。導緻相應節點丢包的原因通常有兩種:

營運商基于安全或性能需求,人為限制了節點的 icmp 發送速率,導緻丢包。

節點确實存在異常,導緻丢包。

可以結合異常節點及其後續節點的丢包情況,來判定丢包原因:

常見的鍊路異常場景及測試報告執行個體如下所示:

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e7%9b%ae%e6%a0%87%e4%b8%bb%e6%9c%ba%e7%bd%91%e7%bb%9c%e9%85%8d%e7%bd%ae%e4%b8%8d%e5%bd%93">目标主機網絡配置不當</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#icmp%20%e9%99%90%e9%80%9f">icmp 限速</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e7%8e%af%e8%b7%af">環路</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e9%93%be%e8%b7%af%e4%b8%ad%e6%96%ad">鍊路中斷</a>

示例資料:

在該示例中,資料包在目标位址出現了 100% 的丢包。乍一看是資料包沒有到達,其實很有可能是目标伺服器相關安全政策(比如防火牆、iptables 等)禁用了 icmp 所緻,導緻目的主機無法發送任何應答。

是以,該場景需要排查目标伺服器的安全政策配置。

在該示例中,在第 5 跳出現了明顯的丢包,但後續節點均未見異常。是以推斷是該節點 icmp 限速所緻。

該場景對最終用戶端到目标伺服器的資料傳輸不會有影響,是以,分析的時候可以忽略。

在該示例中,資料包在第 5 跳之後出現了循環跳轉,導緻最終無法到達目标伺服器。這通常是由于營運商相關節點路由配置異常所緻。

是以,該場景需要聯系相應節點歸屬營運商處理。

在該示例中,資料包在第 4 跳之後就無法收到任何回報。這通常是由于相應節點中斷所緻。建議結合反向鍊路測試做進一步确認。

該場景需要聯系相應節點歸屬營運商處理。

ping 丢包或不通時鍊路測試說明鍊路測試工具介紹鍊路測試結果分析簡要說明常見鍊路異常場景和測試報告鍊路測試步驟工單送出須知更多資源

相關步驟詳細說明如下:

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e8%8e%b7%e5%8f%96%e6%9c%ac%e5%9c%b0%e7%bd%91%e7%bb%9c%e5%af%b9%e5%ba%94%e5%85%ac%e7%bd%91%20ip">擷取本地網絡對應公網 ip</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e6%ad%a3%e5%90%91%e9%93%be%e8%b7%af%e6%b5%8b%e8%af%95%ef%bc%88ping%20%e5%92%8c%20mtr%ef%bc%89">正向鍊路測試(ping 和 mtr)</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e5%8f%8d%e5%90%91%e9%93%be%e8%b7%af%e6%b5%8b%e8%af%95%ef%bc%88ping%20%e5%92%8c%20mtr%ef%bc%89">反向鍊路測試(ping 和 mtr)</a>

<a href="https://help.aliyun.com/knowledge_detail/13390527.html#%e6%b5%8b%e8%af%95%e7%bb%93%e6%9e%9c%e5%88%86%e6%9e%90">測試結果分析</a>

在用戶端本地網絡通路 ip.taobao.com 等網站,如下圖,擷取本地網絡對應的公網 ip。

ping 丢包或不通時鍊路測試說明鍊路測試工具介紹鍊路測試結果分析簡要說明常見鍊路異常場景和測試報告鍊路測試步驟工單送出須知更多資源

從用戶端向目标伺服器做 ping 和 mtr 鍊路測試:

從用戶端向目标伺服器域名或 ip 做持續的 ping 測試(建議至少 ping 100 個資料包),記錄測試結果。

根據用戶端作業系統環境的不同,使用 winmtr 或 mtr,設定測試目的位址為目标伺服器域名或ip,然後進行鍊路測試,記錄測試結果。

進入目标伺服器系統内部,做反向 ping 和 mtr 鍊路測試

從目标伺服器向前述步驟 1 擷取的用戶端 ip做持續的 ping 測試(建議至少 ping 100 個資料包),記錄測試結果。

根據目标伺服器作業系統環境的不同,使用 winmtr 或 mtr,設定測試目的位址為前述步驟 1 擷取的用戶端 ip,然後進行鍊路測試,記錄測試結果。

繼續閱讀