全部產品
Search
文件中心

:使用ping命令丟包或不通時的鏈路測試方法

更新時間:Aug 07, 2019

免責聲明: 本文檔可能包含第三方產品資訊,該資訊僅供參考。阿里雲對第三方產品的效能、可靠性以及操作可能帶來的潛在影響,不做任何暗示或其他形式的承諾。

 

概述

當用戶端訪問目標伺服器出現ping丟包或ping不通時,可以通過tracert或mtr等工具進行鏈路測試來判斷問題根源。本文介紹如何通過工具進行鏈路測試和分析。

 

詳細資料

本文分別介紹如下內容。

 

鏈路測試載入器

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

 

Linux系統

此處簡單介紹兩個鏈路測試載入器。

 

工具一:mtr命令

mtr(My traceroute)幾乎是所有Linux發行版本預裝的網路測試載入器。其將ping和traceroute的功能合并,所以功能更強大。mtr預設發送ICMP資料包進行鏈路探測。您也可以通過“-u”參數來指定使用UDP資料包進行探測。相對於traceroute只會做一次鏈路跟蹤測試,mtr會對鏈路上的相關節點做持續探測並給出相應的統計資訊。所以,mtr能避免節點波動對測試結果的影響,所以其測試結果更正確,建議優先使用。

 

用法說明

mtr [-BfhvrwctglxspQomniuT46] [--help] [--version] [--report]
[--report-wide] [--report-cycles=COUNT] [--curses] [--gtk]
[--csv|-C] [--raw] [--xml] [--split] [--mpls] [--no-dns] [--show-ips]
[--address interface] [--filename=FILE|-F]
[--ipinfo=item_no|-y item_no]
[--aslookup|-z]
[--psize=bytes/-s bytes] [--order fields]
[--report-wide|-w] [--inet] [--inet6] [--max-ttl=NUM] [--first-ttl=NUM]
[--bitpattern=NUM] [--tos=NUM] [--udp] [--tcp] [--port=PORT] [--timeout=SECONDS]
[--interval=SECONDS] HOSTNAME

常見選擇性參數說明

  • --report:以報告模式顯示輸出。
  • --split:將每次追蹤的結果分別列出來,而非統計整個結果。
  • --psize:指定ping資料包的大小。
  • --no-dns:不對IP地址做網域名稱反解析。
  • --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 ]

常見選擇性參數說明

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

 

命令輸出樣本

 

Windows系統

此處簡單介紹兩個鏈路測試載入器。

 

工具一:WinMTR(建議優先使用)

WinMTR是mtr工具在Windows環境下的圖形化實現,但進行了功能簡化,只支援部分mtr的參數。WinMTR預設發送ICMP資料包進行探測,無法切換。和mtr一樣,相比tracert,WinMTR能避免節點波動對測試結果的影響,所以測試結果更正確。所以在WinMTR可用的情況下,建議優先使用WinMTR進行鏈路測試。

註:可以單擊此處下載WinMTR工具。

 

用法說明

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

  1. 如下圖所示,運行程式後,在 Host 欄位輸入目標伺服器網域名稱或IP,注意不要包含空格。

  2. 單擊 Start 開始測試。開始測試後,相應按鈕變成了 Stop
  3. 運行一段時間後,單擊 Stop 停止測試。
  4. 其它選項說明如下。
    • 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):分別是到相應節點延遲的最小值、平均值、最大值和最後一次值。

 

工具二:tracert命令列工具

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“逾時”訊息中包含了相應節點的資訊。

 

用法說明

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name

常見選擇性參數說明

  • -d:不要將位址解析為主機名稱(禁用DNS反解)。
  • -h:maximum_hops,指定搜尋目標地址時的最大躍點數。
  • -j: host-list,指定沿主機列表的鬆散源路由。
  • -w:timeout,等待每個回複的逾時時間(以毫秒為單位)。
  • -R:跟蹤往返行程路徑(僅適用於IPv6)。
  • -S:srcaddr,要使用的源地址(僅適用於IPv6)。
  • -4:強制使用IPv4。
  • -6:強制使用IPv6。
  • target_host:目標主機網域名稱或IP地址。

 

命令輸出樣本

C:\> tracert -d 223.5.5.5
通過最多 30 個躍點跟蹤到 223.5.5.5 的路由
1 請求逾時。
2 9 ms 3 ms 12 ms 192.168.X.X
3 4 ms 9 ms 2 ms X.X.X.X
4 9 ms 2 ms 1 ms XX.XX.XX.XX
5 11 ms 211.XX.X.XX
6 3 ms 2 ms 2 ms 2XX.XX.1XX.XX
7 2 ms 2 ms 1 ms 42.XX.2XX.1XX
8 32 ms 4 ms 3 ms 42.XX.2XX.2XX
9 請求逾時。
10 3 ms 2 ms 2 ms 223.5.5.5
跟蹤完成。

 

測試結果的簡要分析

由於mtr(WinMTR)有更高的準確性,本文以其測試結果為例,參考如下要點進行分析。此處分析時以如下樣本圖為基礎。

 

要點一:網路地區

正常情況下,從用戶端到目標伺服器的整個鏈路中會包含如下地區。

  • 用戶端本網,即本地區域網路和本網供應商網路。如上圖中的地區A。如果該地區出現異常,並且是用戶端本網中的節點出現異常,則需要對本網進行相應的排查分析。如果是本網供應商網路出現異常,則需要向當地電訊廠商反饋問題。
  • 電訊廠商骨幹網路。如上圖中的地區B。如果該地區出現異常,可以根據異常節點的IP查詢其所屬的電訊廠商,直接向對應電訊廠商進行反饋,或者通過阿里雲支援人員,向電訊廠商進行反饋。
  • 目標伺服器本網,即目標伺服器所屬供應商的網路。如上圖中的地區C。如果該地區出現異常,需要向目標伺服器所屬的網路電訊廠商反饋問題。

 

要點二:鏈路負載平衡

如上圖中的地區D。如果中間鏈路某些部分啟用了鏈路負載平衡,則mtr只會對首尾節點進行編號和探測統計。中間節點只會顯示相應的IP或網域名稱資訊。

 

要點三:結合Avg(平均值)和StDev(標準差)綜合判斷

由於鏈路抖動或其它因素的影響,節點的Best和Worst值可能相差很大。Avg統計了自鏈路測試以來所有探測的平均值,所以能更好的反應出相應節點的網路品質。而StDev越高,則說明資料包在相應節點的延時值越不相同,即越離散。所以標準差值可用於協助判斷Avg是否真實反應了相應節點的網路品質。例如,如果標準差很大,說明資料包的延遲是不確定的。可能某些資料包延遲很小,例如25ms,而另一些延遲卻很大,例如350ms,但最終得到的平均延遲反而可能是正常的。所以,此時Avg並不能很好的反應出實際的網路品質情況。

 

綜上,建議的分析標準如下。

  • 如果StDev很高,則同步觀察相應節點的Best和Worst,來判斷相應節點是否存在異常。
  • 如果StDev不高,則通過Avg來判斷相應節點是否存在異常。
    註:上述StDev高或者不高,並沒有具體的時間範圍標準。而需要根據同一節點其它列的延遲值大小來進行相對評估。比如,如果Avg為30ms,那麼,當StDev為25ms,則認為是很高的偏差。而如果Avg為325ms,則StDev同樣為25ms,反而認為是不高的偏差。

 

要點四:Loss%(丟包率)的判斷

任一節點的Loss%(丟包率)如果不為零,則說明這一跳網路可能存在問題。導致相應節點丟包的原因通常有如下兩種。

  • 電訊廠商基於安全或效能需求,限制了節點的ICMP發送速率,導致丟包。
  • 節點確實存在異常,導致丟包。

結合異常節點及其後續節點的丟包情況,並參考如下內容,判定丟包原因。

  • 如果隨後節點均沒有丟包,則通常表示異常節點丟包是由於電訊廠商策略限制所致。可以忽略相關丟包。如上圖中的第2跳所示。
  • 如果隨後節點也出現丟包,則通常說明異常節點確實存在網路異常,導致丟包。如上圖中的第5跳所示。

 另外,上述兩種情況可能同時發生,即相應節點既存在策略限速,又存在網路異常。對於這種情況,如果異常節點及其後續節點連續出現丟包,而且各節點的丟包率不同,則通常以最後幾跳的丟包率為準。如上圖所示,在第 5、6、7跳均出現了丟包。所以,最終丟包情況,以第7跳的40%作為參考。

 

要點五:關於延遲

關於延遲,有如下兩種情境。

 

情境一:延遲跳變

如果在某一跳之後延遲明顯陡增,則通常判斷該節點存在網路異常。如上圖所示,從第5跳之後的後續節點延遲明顯陡增,則推斷是第5跳節點出現了網路異常。不過,高延遲並不一定完全意味著相應節點存在異常。如上圖所示,第5跳之後,雖然後續節點延遲明顯陡增,但測試資料最終仍然正常到達了目的主機。所以,延遲大也有可能是在資料回包鏈路中引發的。所以,最好結合反向鏈路測試一併分析。

 

情境二:ICMP限速導致延遲增加

ICMP策略限速也可能會導致相應節點的延遲陡增,但後續節點通常會恢複正常。如上圖所示,第3跳有100%的丟包率,同時延遲也明顯陡增。但隨後節點的延遲馬上恢複了正常。所以判斷該節點的延遲陡增及丟包是由於策略限速所致。

 

常見的鏈路異常情境

常見的鏈路異常情境及測試報告如下。

 

情境一:目標主機網路設定不當

樣本資料如下。

[root@mycentos6 ~]# mtr —no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. ???
2. ???
3. 1XX.X.X.X 0.0% 10 521.3 90.1 2.7 521.3 211.3
4. 11X.X.X.X 0.0% 10 2.9 4.7 1.6 10.6 3.9
5. 2X.X.X.X 80.0% 10 3.0 3.0 3.0 3.0 0.0
6. 2X.XX.XX.XX 0.0% 10 1.7 7.2 1.6 34.9 13.6
7. 1XX.1XX.XX.X 0.0% 10 5.2 5.2 5.1 5.2 0.0
8. 2XX.XX.XX.XX 0.0% 10 5.3 5.2 5.1 5.3 0.1
9. 173.194.200.105 100.0% 10 0.0 0.0 0.0 0.0 0.0

在該樣本中,資料包在目標地址出現了100%的丟包。從資料上看是資料包沒有到達,其實很有可能是目標伺服器相關安全性原則(比如防火牆、iptables 等)禁用了ICMP所致,導致目的主機無法發送任何應答。所以,該情境需要排查目標伺服器的安全性原則配置。

 

情境二:ICMP限速

樣本資料如下。

[root@mycentos6 ~]# mtr --no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 63.247.X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 63.247.X.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. 72.14.233.56 60.0% 10 27.2 25.3 23.1 26.4 2.9
6. 209.85.254.247 0.0% 10 39.1 39.4 39.1 39.7 0.2
7. 64.233.174.46 0.0% 10 39.6 40.4 39.4 46.9 2.3
8. gw-in-f147.1e100.net 0.0% 10 39.6 40.5 39.5 46.7 2.2

在該樣本中,在第5跳出現了明顯的丟包,但後續節點均未見異常。所以推斷是該節點ICMP限速所致。該情境對最終用戶端到目標伺服器的資料轉送不會有影響,所以,分析的時候可以忽略。

 

情境三:環路

樣本資料如下。

[root@mycentos6 ~]# mtr —no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 63.247.7X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 63.247.6X.X 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.0
6. 72.14.233.57 0.0% 10 0.0 0.0 0.0 0.0 0.0
7. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.0
8. 72.14.233.57 0.0% 10 0.0 0.0 0.0 0.0 0.0
9 ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0

在該樣本中,資料包在第5跳之後出現了迴圈跳轉,導致最終無法到達目標伺服器。這通常是由於電訊廠商相關節點路由配置異常所致。所以,該情境需要聯絡相應節點歸屬電訊廠商處理。

 

情境四:鏈路中斷

樣本資料如下。

[root@mycentos6 ~]# mtr —no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 63.247.7X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 63.247.6X.X 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
6. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
7. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
8. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
9 ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0

在該樣本中,資料包在第4跳之後就無法收到任何反饋。這通常是由於相應節點中斷所致。建議結合反向鏈路測試做進一步確認。該情境需要聯絡相應節點歸屬電訊廠商處理。

 

鏈路測試步驟

通常情況下,鏈路測試步驟如下圖所示。

相關步驟的詳情說明如下。

 

步驟一:擷取本網對應的公網IP

在用戶端本網內訪問如下連結,擷取本網對應的公網IP地址。
http://ip.taobao.com/
系統顯示類似如下。

 

步驟二:正向鏈路測試(ping和mtr)

從用戶端向目標伺服器做如下測試。

  • 從用戶端向目標伺服器網域名稱或IP做持續的ping測試,建議至少ping 100個資料包,記錄測試結果。
  • 根據用戶端作業系統的不同,使用WinMTR或mtr,設定測試目的地址為目標伺服器網域名稱或IP,然後進行鏈路測試,記錄測試結果。

 

步驟三:反向鏈路測試(ping和mtr)

進入目標伺服器系統內部做如下測試。

  • 從目標伺服器向步驟一擷取的用戶端IP做持續的ping測試,建議至少ping 100個資料包,記錄測試結果。
  • 根據目標伺服器作業系統的不同,使用WinMTR或mtr,設定測試目的地址為用戶端的IP地址,然後進行鏈路測試,記錄測試結果。

 

步驟四:測試結果分析

參閱測試結果的簡要分析,對測試結果進行分析。確認異常節點後,訪問如下連結或其他可以查詢IP歸屬地的網站,擷取該異常節點的歸屬電訊廠商資訊。如果是用戶端本網相關節點出現異常,則需要對本網進行相應排查分析。如果是電訊廠商相關節點出現異常,則需要向電訊廠商反饋問題。
http://ip.taobao.com/
查詢結果類似如下。

 

相關文檔

 

適用於

  • Elastic Compute Service