在 ping 结果中解释 TTL

网络工程 故障排除 linux 国际会议
2021-07-09 17:32:36

我为一家 VoIP 服务提供商工作,我正在与一位拥有有线互联网连接的客户一起解决问题,这让我陷入困境。

他有一个单独的块,我们假设它是 70.141.15.0/29,网关在 .1,路由器在 .2 和 0.3。两台路由器都连接到他的电缆调制解调器,据我们所知,该调制解调器设置为电缆提供商想象的“桥接模式”。

我正在从同一个盒子同时 ping 这两个路由器,这是一个从(可能)Level(3) 连接到光纤的 linux 系统。所以不用说,地球上没有人知道这里和那里之间有多少个节点。但是请查看ping结果。

到第一个路由器:

64 bytes from 70.141.15.2: icmp_seq=2637 ttl=47 time=45.0 ms
64 bytes from 70.141.15.2: icmp_seq=2638 ttl=47 time=39.2 ms
64 bytes from 70.141.15.2: icmp_seq=2639 ttl=47 time=37.3 ms
64 bytes from 70.141.15.2: icmp_seq=2640 ttl=47 time=46.1 ms
64 bytes from 70.141.15.2: icmp_seq=2641 ttl=47 time=45.8 ms
64 bytes from 70.141.15.2: icmp_seq=2642 ttl=47 time=46.5 ms
64 bytes from 70.141.15.2: icmp_seq=2643 ttl=47 time=40.9 ms

从第二个:

64 bytes from 70.141.15.3: icmp_seq=631 ttl=239 time=54.7 ms
64 bytes from 70.141.15.3: icmp_seq=637 ttl=239 time=40.5 ms
64 bytes from 70.141.15.3: icmp_seq=638 ttl=239 time=40.3 ms
64 bytes from 70.141.15.3: icmp_seq=639 ttl=239 time=38.4 ms
64 bytes from 70.141.15.3: icmp_seq=640 ttl=239 time=44.9 ms
64 bytes from 70.141.15.3: icmp_seq=641 ttl=239 time=38.4 ms
64 bytes from 70.141.15.3: icmp_seq=642 ttl=239 time=38.8 ms

检查 TTL 值。这有意义吗?这些设备彼此直接相邻,通过单独的交换机端口插入该调制解调器。一个人怎么会看起来有将近 200 个啤酒花?通过 ping 其他站点,我得到的印象是 TTL 并没有按照我认为的方式实现。我怀疑我和 4.2.2.2 或 woot.com 之间有 200 跳,但我从这两个中得到的 TTL 结果都低于 50。

其中一台路由器(具有较高 TTL 的路由器)来自 Fortinet,而另一台是基于 Linux 的定制设备。我很确定 Forti 有一个自制的网络堆栈,而 Linux 机器使用硬件开发人员下载的源 tarball 附带的任何内容。是否有可能在其中一个上以一种奇怪的形式实现 ICMP 回声并故意发送 TTL 为 50 的所有回复?

我还注意到,我能找到的唯一一个用看起来很正常的 TTL 回复的网站之一是 slashdot,我可以想象他们的服务器和路由器可能比普通网站少一点“我们在车库里找到的东西”,这有点让我觉得我可能在最后的假设上走在正确的轨道上。

总结一下:ping 上的 TTL 是否意味着任何可靠的事情?

4个回答

所以不用说,地球上没有人知道这里和那里之间有多少个节点。

我知道有多少节点。正好有 16 个。您得到不同响应的原因是因为不同的操作系统使用不同的 TTL 起始值。一些设备使用 255,而其他设备使用 63。因此,您正在 ping 的其中一个设备发送的回复的 TTL 设置为 255。当它返回给您时,它已减少到 239。即 16 跳。

您 ping 的另一台设备将 TTL 设置为 63。因此,当它到达时,该值为 47。

255-239=63-47=16。

如果您想确定您和目标之间的跃点数,请使用 traceroute。

TTL 值由远程机器确定。例如,如果你 ping 一台 Linux 机器,它的原始 TTL 值为 64。根据它通过多少个网络返回给你,TTL 被减去 1 的值。所以如果你 ping 8.8.8.8,这是Google 的名称服务器的原始值为 128。当它返回给您时,它的值可能为 121(对我而言确实如此)。这意味着它跨越 7 个网络才能找到我,而且它是一台 Windows 机器。

常用 TTL 值

  • 路由器 - 255
  • 窗户 - 128
  • Linux-Mac - 64

128-Windows,64-大多数 Linux 和路由器,60-非常罕见,32-Windows 95。

并且没有人使用 63,它可能正在访问返回路径上的另一个路由器。

尝试“Tracert [IP ADDRESS]”以查看路由总数。

如果系统从 64 TTL 开始,那么如果您跟踪距离一跳的设备,您将获得 TTL=63。

我试过了,这就是我得到的。我总是想知道 TTL...嗯 很酷 😎