traceroute和tracert原理

2022-11-08 16:30:55 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

一、Traceroute

traceroute 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 路由器收到TTL为1的包文减1后直接丢弃,然后回复 ICMP(type=11,code=0,TTL equals 0 during transit——传输期间生存时间为0)。 目标主机收到traceroute 的UDP探测包回复ICMP(type=3,code = 3,端口不可达)。Linux上称之为 traceroute,Windos类似的功能为tracert。

linux 上 traceroute 运行过程: traceroute 连续发送TTL从1开始递增的UDP包,目标端口 30000 ,相同的目标地址,每个TTL相同的UDP包默认发送三个,端口依次递增。当收到目标地址回的 ICMP包(端口不可达),traceroute 停止发包,否则继续发送,默认最多发送 30 个,每个包大小 60Byte(IP UDP Data)。

代码语言:javascript复制
[root@localhost sbc]# traceroute 10.228.90.70
traceroute to 10.228.90.70 (10.228.90.70), 30 hops max, 60 byte packets
1  10.228.113.1 (10.228.113.1)  1.513 ms  2.367 ms  3.182 ms
2  10.228.2.173 (10.228.2.173)  1.709 ms  2.584 ms  3.338 ms
3  10.228.1.37 (10.228.1.37)  1.533 ms  2.233 ms  3.057 ms
4  10.228.1.26 (10.228.1.26)  1.870 ms  2.652 ms  3.477 ms
5  10.228.3.162 (10.228.3.162)  1.909 ms  2.728 ms  3.756 ms
6  10.228.90.70 (10.228.90.70)  0.292 ms  0.266 ms  0.261 ms

流程分析: 1.连续发送 UDP 包,从seq69到到seq83连续15个报文,每三个包TTL增加1,总共发送五跳网元的探测报文,从上面截图可以看端口是逐渐加1。

2.发送seq84包的时候,TTL是6,立马收到ICMP seq85的包,端口不可达响应。但是后面继续发送两个TTL为6的包,仍然收到ICMP的响应。

3.针对前面发送的15个探测包,全部收到ICMP的响应包,TTL超期。

二、Tracert

通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。

Tracert 先发送 TTL 为 1 的回应数据包,并随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到。

Tracert 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,traceroute 给TTL记数器加1,继续进行。

报文监测如下:

1、从10.40.140.97 到 10.43.85.162 经过 3 跳,第 4 跳到达目标主机。

2、PC机依次发送ICMP请求信息(Type=8,Echo request——回显请求[Ping请求]),收到目标主机的ICMP回的应答信息(type=0,Echo Reply——回显应答[Ping应答])后,停止发送请求信息,注意是三个应答信息都收到之后,才停止发送

3、当超出设定的跳数,源主机也会停止发送ICMP请求,如下所示设置跳数为3

3、小结 tracert 和 traceroute虽然都是路由跟踪,但是两者探测方法及探测的数据类型不同。默认情况下,traceroute是向目的地址的某个端口(大于30000)发送UDP数据报,tracert是向目的地址发出ICMP请求回显数据包。 当出现了tracert可达,但是traceroute不可达时,需要考虑路径的路由器是否对UDP进行了过滤,或者端口限制。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

0 人点赞