云服務器使用ping命令丟包或不通時的鏈路測試方法

概述

當客戶端訪問目標服務器出現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%的丟包率,同時延遲也明顯陡增。但隨后節點的延遲馬上恢復了正常。所以判斷該節點的延遲陡增及丟包是由于策略限速所致。

 

常見的鏈路異常場景

常見的鏈路異常場景及測試報告如下。

 

場景一:目標主機網絡配置不當

示例數據如下。

[[email protected] ~]# 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限速

示例數據如下。

[[email protected] ~]# 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限速所致。該場景對最終客戶端到目標服務器的數據傳輸不會有影響,所以,分析的時候可以忽略。

 

場景三:環路

示例數據如下。

[[email protected] ~]# 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跳之后出現了循環跳轉,導致最終無法到達目標服務器。這通常是由于運營商相關節點路由配置異常所致。所以,該場景需要聯系相應節點歸屬運營商處理。

 

場景四:鏈路中斷

示例數據如下。

[[email protected] ~]# 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/
查詢結果類似如下。

本文來源:阿里云

人已贊賞
好經驗

今日頭條站長平臺:搜索蜘蛛爬蟲spider介紹

2019-12-27 12:34:48

好經驗

百度對教學式文章有新展現方式

2019-12-30 11:48:10

0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
個人中心
購物車
優惠劵
今日簽到
有新私信 私信列表
有新消息 消息中心
搜索
2019年开奖记录,手机版