在 Windows 中,默认 TTL 为 128,而在 Ubuntu 中为 64。
我一直在问这个问题,这些值是根据什么原则选择的,而不是例如 255?
答案1
我一直在问这个问题,这些值是根据什么原则选择的,而不是例如 255?
总结:
在大多数操作系统上,TTL 的默认值小于其最大可能值 (255),因为它减少了等待无法到达目的地的数据包的开销,从而将 TTL 减少到 0。除了出于诊断目的之外,使用 255 的 TTL 没有任何意义。
让我们来看看TTL 是什么第一的:
生存时间 (TTL) 或跳数限制是一种限制计算机或网络中数据寿命或生命周期的机制。
TTL 字段由数据报的发送方设置,并由到达目的地途中的每个路由器减少。
在当今时代,数据包到达大多数目的地只需 10-15 跳。这是因为世界网络就是这样构建的。大多数互联网服务提供商的路由表中都有许多其他 ISP 的网络,数据包大多通过最短或最快的路线发送到目的地。这要归功于外部路由协议,例如BGP(边界网关协议)。
由于这个原因,IETF(互联网工程任务组)发布了建议的生存时间默认值,即64在他们的RFC 1700:分配编号。
根本没有理由将 TTL 设置为 255。如果数据包能够找到目的地,它们将以不超过(大多数情况下) 10-15 个跳数到达目的地。极少数情况下数据包会经过超过 20 个跳数。
因此,如果数据包无法到达目的地,它将继续重试,直到其 TTL 降至 0。如果默认 TTL 值设置为 255,则数据包将在重试 255 次后被丢弃。如果设置为 64,则数据包将在重试 64 次后被丢弃。如果数据包在 64 次跳转后仍未到达目的地,则很可能永远不会到达目的地。因此,为了减少数据包超时时的开销和 I/O,建议降低 TTL 值,以便它能够到达ICMP 超时错误消息速度更快并被丢弃,因此将不再被处理。
不同的操作系统对 TTL 设置的默认值不同。大多数操作系统倾向于遵循 IETF 对默认值的建议64(这是很好的做法),但是其他人根据自己的信仰设定了不同的价值观。这是一个选择的问题。这里您可以看到大多数操作系统的默认 TTL 值。有些是 30,有些甚至有 128(例如 Windows)。