我知道,默认生存时间值是 255,每次 IPv4 数据包穿过路由器时,该值就会减 1。
但是,当我 ping 我的 adsl 路由器时,它显示 TTL 为 64
Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time=1ms TTL=64
Reply from 192.168.0.1: bytes=32 time=2ms TTL=64
Reply from 192.168.0.1: bytes=32 time=2ms TTL=64
Reply from 192.168.0.1: bytes=32 time=2ms TTL=64
从 PC 到路由器只有一跳,所以我的预期 TTL 是 254,但是为什么这里 ping 显示 TTL 为 64..
任何帮助都将不胜感激...
答案1
以下是手册页中的相关引文ping
:
TTL 详细信息 IP 数据包的 TTL 值表示数据包在被丢弃之前可以经过的最大 IP 路由器数量。在当前实践中,您可以预期互联网中的每个路由器都会将 TTL 字段减一。
TCP/IP 规范建议将 IP 数据包的 TTL 字段设置为 64,但许多系统使用较小的值(4.3BSD 使用 30,4.2BSD 使用 15)。
并引用RFC 1700:
目前建议的互联网协议 (IP) 的默认生存时间 (TTL) 为 64。
答案2
最大 TTL 为 255,但这不是默认值。如您所见,默认值取决于操作系统这里。
例如,查看 Windows 与 Linux 中对 127.0.0.1 的 ping 操作:
我的Windows 7:
我的Linux机器:
因此看起来您收到的是来自默认为 64 的机器的回复。
答案3
TTL 值由远程机器决定。例如,如果您 ping 一台 Linux 机器,其原始 TTL 值为 64。根据它跨越多少个网络才能返回给您,TTL 值会减去 1。因此,如果您 ping 8.8.8.8(即 Google 的名称服务器),它的原始值为 128。当它返回给您时,它的值可能为 121(对我来说是这样的)。这意味着它跨越了 7 个网络才到达我这里,而且它是一台 Windows 机器。
常见 TTL 值 - 路由器 - 255 Windows - 128 Linux-Mac - 64