Traceroute到底是什么?
一、简介
查看报文到达目的主机的路径。traceroute的工作原理简单:
- 发送TTL从1开始的UDP报文(win发送ICMP报文)
- 为了确定下一跳路径,TTL会加1
- 当路由器丢弃UDP报文的时候,会给发送主机回复 ICMP 超时报文
- 当到达最后路径时,会给发送主机回复 ICMP 端口不可达报文(win不会回复端口不可达报文,macos回复destination unreachable)
二、流程
-
源主机发送IP报文,设置TTL=1;第一个路由器处理报文后:
- 将TTL-1
- 将报文丢弃
- 回复源主机ICMP超时报文,在IP报文的头部,包含了 路由器 的源地址
-
同流程1, 源主机发送IP报文,设置TTL=2,得到 第二个路由器的IP地址
-
同上面的流程,直到到达最终目的地址,到达最终的目的地址后,给发送主机回复ICMP 端口不可达报文
三、抓包
3.1 LAN OUTPUT
1、win 路径查看
tracert 到内网 10.8.50.101主机
- 最多30个跃点,表示TTL=30,防止死循环
- 目的IP:10.8.50.101
- 下一跳路由器:172.19.0.1
- RTT时间:12ms, 8ms, 9ms(发送三个报文),第一个RTT时间最长(12ms),表示无172.19.0.1的ARP缓存
2、wireshark 抓包
完整数据包如下:
第一条流
- 源IP:172.19.0.4
- 目的IP:10.8.50.101
- ping request 报文:type 8, code 0,没有收到echo reply响应,记录no response found!
- 第一跳路由器:172.19.0.1,回复给 172.19.0.4 Time to live exceeded in transit
- 后面的流以此类推,直到最后一条流
- TTL值相同,全是1
- seq值+1,从12852开始
最后一条流:
- echo request报文
- TTL:都为6,说明只需要6跳即可到达最终地址
- 可以收到 echo reply,无 no response found! 报文
- seq:12868,12869,12870
3.2 WAN OUTPUT
1、Mac OS路径查看
第一行的解释:
- 目的IP:210.34.0.25
- TTL不超过:64(防止死循环)
- 报文大小:52字节
- IP头部:20字节
- UDP头部:12字节
- 用户数据:24字节,包含下列信息
- ***:每次+1
- TTL:不变
- 报文发送时间
2、wireshark抓包
每一跳发送3个包,截图所示为第一跳:
- TTL值相同,从1开始
- seq+1
- 每一个包都会计算RTT时间
如果任何一个包超过5s没有收到响应,则会打印3个星号(*)
最后一跳:
- TTL=9
- 目的Host回复:destination unreachable