本文在介绍Linux 环境下如何通过 mtr 命令行工具进行链路测试的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。
Linux实例网站访问丢包延时高
当网站访问很慢或无法访问时,若排除其它显著问题,而检测到 ping 有明显丢包时,建议您作链路测试。Linux 环境下,您可以通过 mtr 命令行工具(优先使用) 或 traceroute 命令行工具进行链路测试来判断问题来源。
通常情况下,请依照下述步骤进行处理:
利用链路测试工具探测网络状况和服务器状态。
根据链路测试结果分析处理。
mtr 命令行工具(优先使用)
mtr (My traceroute)几乎是所有 Linux 发行版本预装的网络测试工具,集成了 tracert 与 ping 这两个命令的图形界面,功能十分强大。
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.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.5 traceroute 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 開啟或關閉資料包的正確性檢定。
分析鏈路測試結果
以如下鏈路測試結果範例圖為基礎進行闡述:
操作步驟
判斷各區域是否有異常,並依照各區域的情況分別處理。
區域 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% 的丟包率,同時延遲也明顯陡增。但隨後節點的延遲馬上恢復正常了。所以判斷該節點的延遲陡增及丟包是由於策略限速所致。
以上是Linux 環境下如何透過 mtr 命令列工具進行連結測試的詳細內容。更多資訊請關注PHP中文網其他相關文章!