概述

当客户端访问目标服务器或负载均衡,使用ping命令测试出现丢包或不通时,可以通过MTR等工具进行链路测试来判断问题来源。本文先介绍了MTR工具的基本原理,然后对测试结果进行分析,以及对测试步骤进行了说明。

详细信息

MTR基本信息

  • MTR(My traceroute)是几乎所有Linux发行版本预装的网络测试工具,此工具也有对应的Windows版本,名称为WinMTR。
  • MTR工具将ping和traceroute命令的功能并入了同一个工具中,实现更强大的功能。
  • Linux版本的mtr命令默认发送ICMP数据包进行链路探测。可以通过“-u”参数来指定使用UDP数据包用于探测。
  • 相对于traceroute命令只会做一次链路跟踪测试,mtr命令会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr命令能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。

MTR使用方法

在Linux系统上使用

用法说明

mtr [-hvrctglspni46] [-help] [-version] [-report] [-report-cycles=COUNT] [-curses] [-gtk] [-raw] [-split] [-no-dns] [-address interface] [-psize=bytes/-s bytes] [-interval=SECONDS] HOSTNAME [PACKETSIZE]

常见可选参数说明:

-r 或 -report:以报告模式显示输出。

-p 或 -split:将每次追踪的结果分别列出来。

-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):标准偏差。越大说明相应节点越不稳定。

在Windows系统上使用

WinMTR是MTR工具在Windows环境下的图形化实现,但进行了功能简化,只支持MTR部分参数的调整设置。WinMTR默认发送ICMP数据包进行探测,无法切换。WinMTR可以从其官方网站下载获取。和mtr命令一样,相比tracert,WinMTR能避免节点波动对测试结果的影响,所以测试结果更正确。所以,在WinMTR可用的情况下,建议优先使用 WinMTR 进行链路测试。

用法说明

WinMTR无需安装,直接解压运行即可,操作方法非常简单。运行程序后,在Host字段输入目标服务器域名或 IP,注意前面不要包含空格。如下图所示。

单击Start开始测试,开始测试后,相应按钮变成了Stop。运行一段时间后,单击Stop停止测试。其它选项说明:

  • 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):分别是到相应节点延迟的最小值、平均值、最大值和最后一次值。

第八列(StDev):标准偏差,越大说明相应节点越不稳定。

链路测试步骤

通常情况下,链路测试流程如下图所示。

获取本地网络对应公网IP
在客户端本地网络访问淘宝IP地址库等网站,获取本地网络对应的公网IP。

正向链路测试(PING和MTR)
从客户端向目标服务器做PING和MTR链路测试。从客户端向目标服务器域名或IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据客户端操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为目标服务器域名或IP,然后进行链路测试,记录测试结果。

反向链路测试(PING和MTR)
进入目标服务器系统内部,做反向PING和MTR链路测试。从目标服务器向客户端IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据目标服务器操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为客户端IP,然后进行链路测试,记录测试结果。

测试结果分析
参阅前述说明,对测试结果进行分析。确认异常节点后,访问淘宝IP地址库等网站查询、获取相应节点归属运营商及网络。如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。如果是运营商相关节点出现异常,则需要直接联系运营商,或联系阿里云售后技术支持向相应运营商反馈问题。

链路测试结果分析简要说明

由于mtr(WinMTR)命令有更高的准确性,本文以其测试结果为例,对链路测试结果的分析进行简要说明。后续的说明,以如下链路测试结果示例图为基础进行阐述。

对链路测试结果进行分析时,需要关注如下几点:

  • 网络区域

  • 链路负载均衡

  • 结合Avg(平均值)和 StDev(标准偏差)综合判断

  • Loss%(丢包率)的判断

  • 延迟

网络区域
正常情况下,从客户端到目标服务器的整个链路,会显著的包含如下区域:

**客户端本地网络:**本地局域网和本地网络提供商网络。如前文链路测试结果示例图中的区域A。如果该区域出现异常,如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。否则,如果是本地网络提供商网络相关节点出现异常,则需要向当地运营商反馈问题。

**运营商网络:**如前文链路测试结果示例图中的区域B。如果该区域出现异常,可以根据异常节点IP查询归属运营商,然后直接或通过阿里云售后技术支持,向相应运营商反馈问题。
目标服务器本地网络:目标主机归属网络提供商网络。如前文链路测试结果示例图中的区域C。如果该区域出现异常,则需要向目标主机归属网络提供商反馈问题。

**链路负载均衡:**如前文链路测试结果示例图中的区域D。如果中间链路某些部分启用了链路负载均衡,则mtr命令只会对首尾节点进行编号和探测统计。中间节点只会显示相应的IP或域名信息。

结合Avg(平均值)和StDev(标准偏差)综合判断
由于链路抖动或其它因素的影响,节点的Best和Worst值可能相差很大。而Avg(平均值)统计了自链路测试以来所有探测的平均值,所以能更好的反应出相应节点的网络质量。而StDev(标准偏差值)越高,则说明数据包在相应节点的延时值越不相同(越离散)。所以标准偏差值可用于协助判断Avg是否真实反应了相应节点的网络质量。例如,如果标准偏差很大,说明数据包的延迟是不确定的。可能某些数据包延迟很小(例如:25ms),而另一些延迟却很大(例如:350ms),但最终得到的平均延迟反而可能是正常的。所以此时Avg并不能很好的反应出实际的网络质量情况。

综上,建议的分析标准如下:

  • 如果StDev很高,则同步观察相应节点的Best和Wrst,来判断相应节点是否存在异常。

  • 如果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%的丢包率,同时延迟也明显陡增。但随后节点的延迟马上恢复了正常。所以判断该节点的延迟陡增及丢包是由于策略限速所致。

常见链路异常场景和测试报告分析

目标主机网络配置不当

如上图所示,在该示例中,数据包在目标地址出现了100%的丢包。乍一看是数据包没有到达,其实很有可能是目标服务器相关安全策略,例如防火墙、iptables等禁用了ICMP所致,导致目的主机无法发送任何应答。所以,该场景需要排查目标服务器的安全策略配置。

ICMP限速

如上图所示,在该示例中,数据包在目标地址出现了100%的丢包。初步看是数据包没有到达,其实很有可能是目标服务器相关安全策略,例如防火墙、iptables 、运营商策略等禁用了ICMP所致,导致目的主机无法发送任何应答。所以,该场景需要排查目标服务器的安全策略配置,或结合反向MTR综合分析。

环路

如上图所示,在该示例中数据包在第5跳之后出现了循环跳转,导致最终无法到达目标服务器。这通常是由于运营商相关节点路由配置异常所致。所以,该场景需要联系相应节点归属运营商处理。

链路中断

如上图所示,在该示例中,数据包在第4跳之后就无法收到任何反馈。这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。该场景需要联系相应节点归属运营商处理。

相关文档

RFC792

MTR工具使用说明与结果分析相关推荐

  1. Windows 2000 Resource Kit工具使用说明

    Windows 2000 Resource Kit工具使用说明 作者:无痕 概要 Resource Kit实际上是Microsoft为管理员提供的一套额外的工具集,包括了超过400个各种工具,vbs, ...

  2. 数字营销分析工具Google Analytics(分析)工作原理

    数字营销需要数据分析工具来调整.考核KOL,我在上篇文章"新一代智能Google Analytics助力营销分析"中对Google Analytics新版工具做了使用说明.今天来聊 ...

  3. app服务器端性能测试,APP性能测试工具使用说明

    APP性能测试工具使用说明 内容精选 换一换 简要介绍wrk是一个开源的简单http性能测试工具,也可以叫做http benchmark工具.语言:C一句话描述:http性能测试工具开源协议:Apac ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )

    文章目录 一.调试进程 ATTACH 附着目标进程 二.读取目标函数寄存器值并存档 1.主要操作流程 2.ptrace 函数 PTRACE_GETREGS 读取寄存器值 一.调试进程 ATTACH 附 ...

最新文章

  1. MMDetection V2.0发布!速度精度全面提升,现有检测框架最优
  2. 怎么彻底重装清空电脑_笔记本电脑怎么重装系统Win7?20分钟完成系统重装,有可能吗?...
  3. boost::histogram::axis::transform用法的测试程序
  4. 【bzoj1304】[CQOI2009]叶子的染色 树形dp
  5. 主定理(master theorem)学习小记
  6. java的for循环取出数据只是拿到最后一个_一问SQL优化就无从藏身?那只是你对原理的精髓掌握不深
  7. matplotlib在图像上方添加文字、标签
  8. rap2检测哪些接口在使用_使用四合一气体检测仪应注意哪些方面?-逸云天
  9. 关于用Sql Server 2008 搭建一个多评委多客户端的比赛打分平台的整体构想
  10. 魔兽地图编辑器使用自定义图标的方法
  11. 记虚拟机装黑苹果踩坑及步骤
  12. 计算机无法从usb启动不了,主板不能从u盘启动怎么办
  13. 路由器DNS被劫持 解决办法、dns 被劫持怎么解决
  14. 3.16√ 火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作
  15. mysql sus bench_测量性能 (Benchmarking)
  16. Android手机AP模式下本机IP
  17. 有关服务器的一些小问题
  18. 如何为几乎所有电话添加无线充电
  19. 大学生社团活动参与情况调查结果
  20. 如何解决微信中如何直接打开外部浏览器打开指定链接

热门文章

  1. 从头开始绘制一个球体
  2. 为何选择iText?java PDF开源库选择与iText发展历史
  3. android客户端测试用例,云电话Android客户端测试用例结果.xls
  4. 使用计算机打印汉字文档是什么过程,电脑打印文字字体出现乱码的解决方法
  5. php ajax传值报错,ajax传值报错之php5.5、5.6关于ajax的传值要求
  6. Thrift入门及 Java 实现简单demo
  7. 微信小程序开发实战课程之油耗计算器-耿广龙-专题视频课程
  8. 关于小米pro锁屏/睡眠后死机 只能强制关机的解决方法
  9. 分部视图 Partial View
  10. Java面试知识点大全