我为一家 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 是否意味着任何可靠的事情?