网络路径排查工具使用/原理浅析(MTR、traceroute、tracepath、windows下besttrace)
在请求网络资源获取缓慢或者有丢包过程中。经常会使用到网络路径探测工具。linux 下最常用的有mtr、traceroute、tracepath 等。
你是否有一点疑惑,路径探测的原理到底是如何完成的,普通的ping探测和TCP、UDP 等数据包在同一个源--->目的地址之间交互链路状态为何有时会有不同现象。
原理浅析:
首先我们知道,实现数据在网络中的交互,都基于最基础的网络地址:源--->目的地址。这个地址为IP地址。为了避免无效的数据包垃圾在网络中永久存在。有8位的TTL值。
在互联网中传输过程中,IP数据包每经过一个路由器该值减一,直到为0 时将该包丢弃。
路由探测原理就是从发送TTL 值为1开始的数据包开始,每次增加1,直到该数据包能抵达目的IP地址。
未能抵达最终目的地址的数据包,当路由器将值减为0 时,会给源地址返回一个数据包告知源地址:因经过路由的数据过多,导致TTL耗尽。数据包无法到达最终目的地。工具根据中间路由节点这个数据包返回的时间戳和发出数据包时的时间戳相减,计算出中间经过的每个路由节点的耗时。并获取中间路由节点的IP地址。
IPV4数据包包头格式:https://www.cnblogs.com/zhangmingda/p/12683149.html
下面分别看下常用链路测试工具,默认发送数据包的区别。
mtr
mtr 默认使用ICMP协议发送探测数据包。
若使用TCP或者UDP 发送数据包。需另外指定指定可选项
-u
--udp
Use UDP datagrams instead of ICMP ECHO.
-T
--tcp
Use TCP SYN packets instead of ICMP ECHO. PACKETSIZE is ignored, since SYN packets can not contain data.
-P PORT
--port PORT
The target port number for TCP traces.
下图示例默认探测包:
mtr -T -P22 <IP地址>示例:
traceroute
当我们使用traceroute 不加任何参数测试路径时,默认四层使用UDP协议发送探测数据包
如果使用TCP或者ICMP协议数据包探测路径需加选项
-I --icmp Use ICMP ECHO for tracerouting
-T --tcp Use TCP SYN for tracerouting (default port is 80)
-p port --port=port Set the destination port to use. It is either initial udp port value for "default" method (incremented by each probe, default is 33434), or initial seq for "icmp" (incremented as well, default from 1), or some constant destination port for other methods (with default of 80 for "tcp", 53 for "udp", etc.)
traceroute -使用ICMP协议探测路径 -p 指定起始seq
tracepath
只支持UDP协议数据包探测路径
besttrace
posted on 2020-09-21 13:01 zhangmingda 阅读(6038) 评论(0) 编辑 收藏 举报