我正在 Linux 系统上运行 ping。我检查了系统上的默认 TTL:
i@cloudshell:~$ sudo sysctl -a | grep ttl
net.ipv4.ip_default_ttl = 64
我尝试 ping 1.1.1.1,一切正常:
i@cloudshell:~$ ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=54 time=7.75 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=54 time=7.26 ms
但是当我尝试 ping 8.8.8.8 时,我得到的 TTL 大于我的默认 TTL:
i@cloudshell:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=1.15 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=1.36 ms
我正在考虑中间的任何路由器,可以增加 TTL 吗?那可能吗?据我所知,路由器应该始终减少 TTL,而不是增加。
答案1
我思考ping 向您显示从服务器返回的响应数据包的 TTL。 Ping 不仅仅是回显,您 ping 的服务器会读取 ping 请求并发回匹配的响应,该响应是具有新 TTL 的新数据包。
默认情况下,路由器会将每个数据包的 TTL 减 1,并丢弃任何达到 0 的数据包。这就是 TTL 的全部意义。
理论上路由器可以增加 TTL,但我不知道有任何硬件可以真正做到这一点。它确实可以通过创建无限路由循环来破坏事情。
因此,您在这里看到的是 google DNS (8.8.8.8) 和 cloudflare (1.1.1.1) 的 TTL 设置减去中间的任何路由器。