美文网首页
Traceroute 工作原理

Traceroute 工作原理

作者: 今夜秋风和 | 来源:发表于2023-11-12 21:27 被阅读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 其他用法
      traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
      -d 使用Socket层级的排错功能。
      -f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
      -F 设置勿离断位。
      -g<网关> 设置来源路由网关,最多可设置8个。
      -i<网络界面> 使用指定的网络界面送出数据包。
      -I 使用ICMP回应取代UDP资料信息。
      -m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
      -n 直接使用IP地址而非主机名称。
      -p<通信端口> 设置UDP传输协议的通信端口。
      -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
      -s<来源地址> 设置本地主机送出数据包的IP地址。
      -t<服务类型> 设置检测数据包的TOS数值。
      -v 详细显示指令的执行过程。
      -w<超时秒数> 设置等待远端主机回包的时间。
      -x 开启或关闭数据包的正确性检验。

    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 发现机制

    • 如果在发送IP数据包过程中,设置了不允许分片标记,那么在遇到接口的MTU值< 当前发送的IP数据包长度时,接口将不能对报文进行转发,此时,会返回一个ICMP 不可达差错,需要进行分片的报文,那么,我们就需要知道链路中最小的MTU是多少?
    • Traceroute程序在进行MTU探测时,在发送第一个分组时使用接口MTU值1500,在遇到ICMP 不能分片差错报文后,需要使用ICMP 差错报文的MTU值进行发送; 如下图,R1 IP层接收到UDP层传递下来的数据包为1500 字节,开始使用1500 字节的MTU进行发送,当R2接口2 收到报文后,并且接口3 不允许进行分片,R2 在返回的差错报文中标记接口3的MTU1200,R1 收到后,使用MTU为1200 字节的分组发送报文,这样在通过R2 接口3 转发后继续后面的路由器MTU值的探测,经过这个过程,我们就可以确定链路中最小的MTU值;
    截屏2023-11-13 下午9.26.06.png

    相关文章

      网友评论

          本文标题:Traceroute 工作原理

          本文链接:https://www.haomeiwen.com/subject/tjoqnrtx.html