首頁  >  文章  >  運維  >  Linux 環境下如何透過 mtr 命令列工具進行連結測試

Linux 環境下如何透過 mtr 命令列工具進行連結測試

坏嘻嘻
坏嘻嘻原創
2018-09-28 14:44:407460瀏覽

本文在介绍Linux 环境下如何通过 mtr 命令行工具进行链路测试的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。

Linux实例网站访问丢包延时高

当网站访问很慢或无法访问时,若排除其它显著问题,而检测到 ping 有明显丢包时,建议您作链路测试。Linux 环境下,您可以通过 mtr 命令行工具(优先使用) 或 traceroute 命令行工具进行链路测试来判断问题来源。

通常情况下,请依照下述步骤进行处理:

利用链路测试工具探测网络状况和服务器状态。

根据链路测试结果分析处理。

mtr 命令行工具(优先使用)

mtr (My traceroute)几乎是所有 Linux 发行版本预装的网络测试工具,集成了 tracert 与 ping 这两个命令的图形界面,功能十分强大。

ping 与 tracert 通常被用來检测网络状况和服务器状态,具体说明如下:

Linux 環境下如何透過 mtr 命令列工具進行連結測試

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

分析鏈路測試結果

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

Linux 環境下如何透過 mtr 命令列工具進行連結測試

操作步驟

判斷各區域是否有異常,並依照各區域的情況分別處理。

區域 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn