天天看点

Traceroute到底是什么?

一、简介

查看报文到达目的主机的路径。traceroute的工作原理简单:

  • 发送TTL从1开始的UDP报文(win发送ICMP报文)
  • 为了确定下一跳路径,TTL会加1
  • 当路由器丢弃UDP报文的时候,会给发送主机回复 ICMP 超时报文
  • 当到达最后路径时,会给发送主机回复 ICMP 端口不可达报文(win不会回复端口不可达报文,macos回复destination unreachable)

二、流程

  1. 源主机发送IP报文,设置TTL=1;第一个路由器处理报文后:
    1. 将TTL-1
    2. 将报文丢弃
    3. 回复源主机ICMP超时报文,在IP报文的头部,包含了 路由器 的源地址
  2. 同流程1, 源主机发送IP报文,设置TTL=2,得到 第二个路由器的IP地址
  3. 同上面的流程,直到到达最终目的地址,到达最终的目的地址后,给发送主机回复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缓存
Traceroute到底是什么?

2、wireshark 抓包

完整数据包如下:

Traceroute到底是什么?

第一条流

  • 源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开始
Traceroute到底是什么?

最后一条流:

  • echo request报文
    • TTL:都为6,说明只需要6跳即可到达最终地址
    • 可以收到 echo reply,无 no response found! 报文
  • seq:12868,12869,12870
Traceroute到底是什么?

3.2 WAN OUTPUT

1、Mac OS路径查看

Traceroute到底是什么?

第一行的解释:

  • 目的IP:210.34.0.25
  • TTL不超过:64(防止死循环)
  • 报文大小:52字节
    • IP头部:20字节
    • UDP头部:12字节
    • 用户数据:24字节,包含下列信息
      • 序列号:每次+1
      • TTL:不变
      • 报文发送时间

2、wireshark抓包

每一跳发送3个包,截图所示为第一跳:

  • TTL值相同,从1开始
  • seq+1
  • 每一个包都会计算RTT时间
Traceroute到底是什么?

如果任何一个包超过5s没有收到响应,则会打印3个星号(*)

Traceroute到底是什么?

最后一跳:

  • TTL=9
  • 目的Host回复:destination unreachable
Traceroute到底是什么?

继续阅读