我正在学习低级网络协议中的 TTL(生存时间字段)示例,例如 ICMP 数据包(ping/traceroute 数据包)中使用的 TTL。
我经常看到 ICMP TTL 被称为时间测量,但它们不只是索引/计数器吗?
路由器网络不能被编程为不减少 ICMP 数据包中的 TTL,从而允许数据包无限期地存在吗?
它们实际上是为了表示时间单位而设计的吗?或者这就是这些字段的解释方式?
我正在学习低级网络协议中的 TTL(生存时间字段)示例,例如 ICMP 数据包(ping/traceroute 数据包)中使用的 TTL。
我经常看到 ICMP TTL 被称为时间测量,但它们不只是索引/计数器吗?
路由器网络不能被编程为不减少 ICMP 数据包中的 TTL,从而允许数据包无限期地存在吗?
它们实际上是为了表示时间单位而设计的吗?或者这就是这些字段的解释方式?
ICMP 在其自己的层没有 TTL,因此您的问题实际上归结为 IPv4 TTL。
请注意,IPv4 并没有真正得到更多的研究,因为它正在慢慢被 IPv6 取代。IPv6 有一个“跳数限制”字段而不是 TTL 字段,并且跳数限制字段明确地是一个跳数计数器,而不是秒数。
未能减少 TTL 字段确实会允许数据包永远存在于网络中,这会杀死网络,因为路由循环是比任何人都希望发生的更频繁的事情。它还会破坏一些更高层的协议,例如 TCP 的 TIME_WAIT 状态,这些协议的工作假设是您可以等待几分钟以确保来自给定流的任何仍被网络捕获的散乱数据包都将被丢弃。
IPv4 TTL 于 1981 年在RFC 791中定义,我没有看到任何证据表明它从那时起被重新定义。以下是 RFC 第 30 页关于 TTL 的说明:
该 RFC 还建议,在第 28 页的分段数据报重组过程示例中,在重组分段 IP 数据报期间,应将 TTL 用作实际的基于秒的计时器,告诉接收主机要保持不完整的时间,部分重组的数据报,同时等待接收任何剩余的片段。
因此,最初的设计师在几秒钟内想到了它,承认在许多情况下它可能更像一个跳数计数器,但有一个例子表明将它用作秒是有意义的。显然,这些事实并没有引起任何问题,因此没有人认为需要废弃 RFC 791 只是为了消除最初的概念,即名义上是秒。但是当 IPv6 被开发为 IPv4 的继任者时,该字段变成了明确的跳数限制,而不是以秒为单位的实际 TTL。