traceroute 如何识别“跳”到的目的地?

网络工程 跟踪路由
2022-02-15 03:21:06

使用 traceroute 命令时。例如:

$ traceroute google.com

我得到的输出显示

hop No. | hostname (ip) | latency 1 | latency 2 | latency 3

谷歌显示以下内容:

traceroute to google.com (216.58.223.14), 64 hops max, 52 byte packets
 1  192.168.119.1 (192.168.119.1)  1.321 ms  0.980 ms  0.936 ms
 2  rtr3-c16-dc1.macrolan.co.za (41.222.225.255)  1.815 ms  1.578 ms  1.788 ms
 3  ae0.0.rtr1-ca12-tc1.macrolan.co.za (154.70.222.7)  1.861 ms  2.603 ms  1.989 ms
 4  xe-0/0/3.4000.rtr1-c3h12-tc2.macrolan.co.za (129.205.134.27)  38.447 ms  46.682 ms  21.668 ms
 5  google.ixp.joburg (196.60.8.166)  17.787 ms  18.059 ms  17.713 ms
 6  72.14.237.239 (72.14.237.239)  17.668 ms  17.882 ms  17.497 ms
 7  jnb01s07-in-f14.1e100.net (216.58.223.14)  17.528 ms  18.004 ms  17.642 ms

考虑到 TCP 请求从目的地接收 ACK,而不是单个跃点目的地,我假设 traceroute 因此必须识别单个跃点目的地,以便评估不同跃点之间的延迟。

它是否正确?如果是这样,它是如何做到的?

2个回答

Traceroute 的工作原理是向目标主机发送一个数据包,但它的生存时间字段非常小,为 1。如果途中的路由器因为 TTL 不够高而丢弃数据包,它会发送 ICMP“TTL 超出"返回给发起人的消息。然后发送一个 TTL=2 的数据包,依此类推。(实际上通常为给定的 TTL 发送三个数据包。)

这是寻找路线的一种非常近似的方法,因为

  • 路由可以从一个数据包更改为下一个数据包
  • 许多路由器不发送 ICMP TTL 超出消息
  • 许多路由器对不同类型的数据包做不同的事情

Traceroute 仅在您知道应该发生什么的您自己的网络上真正有用。Traceroute 时间特别多变。

具体到你的问题:

  • traceroute 的不同实现发送不同类型的数据包,因此可能根本不涉及 TCP
  • 即使发起方正在发送 TCP 打开,也没有建立 TCP 连接,因为 TCP 打开没有到达目标
  • 所以在收到实际主机之前没有可用的 TCP ACK