Traceroute 工作原理

2023-11-12  本文已影响0人  今夜秋风和

Traceroute 背景和作用

最开始时在Ip 数据报文中有一个选项字段(IP记录路由选项),用于记录数据包在网络中的路由路径,当网络包在网络中每经过一台路由器,路由器会将自己的IP地址添加到数据包的选项字段中。这样,当数据包到达目的地时,就可以提取出整个路由路径。但是因为并不是所有路由器都支持记录路由选项,因此在一些路径中并不能使用;
还有一个最重要的原因是IP首部中留给选项空间有限,不能存放太多的路径,对于现在的网络来说,是远远不够的;
基于此,实现了Traceroute 程序。在日常实际工作中,主要用于测试数据包到达网络主机所经过的路径和每一跳的延迟,帮助排查网络故障和优化网络性能;

基本使用

  1. www.baidu.com 经DNS 解析后,访问 110.242.68.4,网络中一个IP数据包一共最大64 跳,如果超过64 跳还没到达目的主机,则进行丢弃,避免在网络中无休无止的进行包转发,产生死循环现象;一个包的大小为52 byte,由 20 byte IP 首部+ 8 byte UDP 首部+24 byte UDP 数据组成;
localhost:~ xiaolin.zhang$ traceroute www.baidu.com
traceroute: Warning: www.baidu.com has multiple addresses; using 110.242.68.4
traceroute to www.a.shifen.com (110.242.68.4), 64 hops max, 52 byte packets
  1. 后面行的第一列代表当前 TTL,接下来是中间路由器或主机的IP 地址,针对每个TTL,会发送三份udp 数据包, 每接收一份ICMP 报文,计算往返时间;
 1  192.168.1.1 (192.168.1.1)  7.320 ms  1.792 ms  1.944 ms
 2  10.70.0.1 (10.70.0.1)  4.953 ms * *
 3  125.34.174.17 (125.34.174.17)  15.450 ms
    125.34.172.137 (125.34.172.137)  10.051 ms
    221.223.116.217 (221.223.116.217)  5.685 ms
 4  * 125.33.186.237 (125.33.186.237)  7.111 ms *
 5  219.158.118.50 (219.158.118.50)  11.111 ms *  44.058 ms
 6  110.242.66.162 (110.242.66.162)  12.751 ms
    110.242.66.190 (110.242.66.190)  11.558 ms
    110.242.66.170 (110.242.66.170)  13.702 ms
 7  221.194.45.134 (221.194.45.134)  24.503 ms
    221.194.45.130 (221.194.45.130)  20.673 ms
    221.194.45.134 (221.194.45.134)  29.088 ms
 8  * * *
 省略号...
 64  * * *

以TTL=1 来抓包观察,客户端发送了3份UDP 数据包,目的端口不断进行递增(客户端发送的第一个UDP报文目的端口为33435,第二个报文目的端口为33436,第三个报文目的端口为33437,后面的TTL跳数目的端口逐步加1),第一个网关192.168.1.1收到数据包后,分别向客户端192.168.1.3 发送3份ICMP 超时数据包;

截屏2023-11-05 下午6.48.28.png

3.从第8跳开始出现很多*, 标识ICMP 响应报文可能超时,或者可能因为有些中间节点不能支持对UDP 协议的响应或者不支持返回ICMP 差错报文,通过traceroute -I www.baidu.com 使用ICMP 协议(echo request ,echo reply)进行响应;

截屏2023-11-05 下午7.12.22.png

Traceroute 工作过程

截屏2023-11-05 下午7.16.11.png
  1. 主机A发送一份TTL 字段为1 的IP 数据包给目的主机,处理数据包的路由器1将TTL值减1,并丢弃该数据包,并发送回一份ICMP超时的报文,此时客户端就获取到了第一个路由器1的IP地址;
    2.主机A发送TTL字段为2的IP数据包给目的主机,经过路由器1,路由器2后,TTL 值为0,于是将数据包丢弃,并返回ICMP超时的报文,此时客户端就获取到了第二个路由器2的IP地址;
    3.主机A发送TTL字段为3的IP数据包给目的地址,经过路由器1,路由器2,到达主机Server,那么在Traceroute程序中应该如何判断到达目的主机呢?Traceroute使用一个不可能的值作为UDP 端口(大于30000),目的主机的所有应用程序都不会使用该端口,当数据包到达目的Server 时,IP 层发现是给自己的报文,并返回一个ICMP 端口不可达的报文给主机A;
    4.主机A接收到该ICMP端口不可达报文后,就知道已经到达目的主机了,后面不用在继续探测了,于是结束程序;

MTU 发现机制

截屏2023-11-13 下午9.26.06.png
上一篇下一篇

猜你喜欢

热点阅读