網絡延時分析

轉自:https://help.aliyun.com/knowledge_detail/52997.html?spm=a2c4g.11186631.2.6.no3Dv2


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

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

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

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

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 2016Keys:  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.5traceroute 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 開啓或關閉數據包的正確性檢驗。

分析鏈路測試結果

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

1

操作步驟

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

  • 區域 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% 的丟包率,同時延遲也明顯陡增。但隨後節點的延遲馬上恢復了正常。所以判斷該節點的延遲陡增及丟包是由於策略限速所致。

    其它建議

    • 若數據包在目標地址出現了 100% 的丟包,建議對目標服務器的 安全策略配置 進行排查。

    • 若數據包出現了 循環跳轉,導致無法到達目標服務器,建議聯繫相應節點歸屬運營商處理。

    • 若數據包在跳轉後 無法收到任何反饋,建議結合反向鏈路測試作進一步確認,並聯系相應節點歸屬運營商進行處理。

    • 阿里雲中國大陸機房和其他國家或地區機房有網絡通信的專線,爲降低通信時候的丟包率,推薦使用高速通道

    • 若主機掉包和延遲非常高,建議作 mtr 雙向測試,即本地到服務器的和服務器到本地的測試。無法遠程登錄時,請通過管理終端進行登錄。



    通過上述排查後,若網絡訪問仍存在丟包延時高的問題,請您記錄前述的排查結果,然後聯繫售後進行處理。


    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章