关于 IPv4 TTL 或 IPv6 Hop Limit 值,您需要了解的是路由器(也应该是 IPv4 的终端主机,但大多数操作系统不这样做)将减少 IPv4 TTL 或 IPv6 Hop Limit当它收到一个数据包时,如果它递减到 ,它将丢弃该数据包0
。
这意味着1
进入路由器的具有 IPv4 TTL 或 IPv6 跳数限制的数据包将导致路由器丢弃该数据包,因为它将递减为0
。
对于 IPv4,请参阅RFC 791,互联网协议:
生存时间是互联网数据报生命周期上限的指示。它由数据报的发送者设置,并在处理它的路径上的点处减少。如果 Internet 数据报到达其目的地之前生存时间达到零,则 Internet 数据报将被销毁。生存时间可以被认为是自毁时间限制。
-和-
生存时间:8 位
该字段表示允许数据报在 Internet 系统中保留的最长时间。如果该字段包含零值,则必须销毁数据报。此字段在 Internet 标头处理中被修改。时间以秒为单位,但由于每个处理数据报的模块必须将 TTL 至少减少 1,即使它在不到一秒的时间内处理数据报,因此 TTL 必须仅被认为是数据报可能存在的时间。目的是使无法传递的数据报被丢弃,并限制最大数据报生命周期。
-和-
生存时间
生存时间由发送者设置为允许数据报在互联网系统中的最长时间。如果数据报在 Internet 系统中的存在时间超过其生存时间,则必须销毁该数据报。
必须在处理 Internet 报头的每个点减少此字段,以反映处理数据报所花费的时间。即使没有关于实际花费时间的本地信息,该字段也必须减 1。时间以秒为单位测量(即值 1 表示一秒)。因此,最长存活时间为 255 秒或 4.25 分钟。由于每个处理数据报的模块都必须将 TTL 至少减少 1,即使它在不到一秒的时间内处理数据报,因此 TTL 必须仅被视为数据报可能存在时间的上限。目的是使无法传递的数据报被丢弃,并限制最大数据报生命周期。
一些更高级别的可靠连接协议基于这样的假设,即旧的重复数据报在经过一定时间后不会到达。TTL 是此类协议确保满足其假设的一种方式。
对于 IPv6,请参阅RFC 2460,互联网协议,版本 6 (IPv6) 规范:
跳数限制
8 位无符号整数。转发数据包的每个节点减 1。如果 Hop Limit 减少到零,则丢弃该数据包。
-和-
if the IPv6 Hop Limit is less than or equal to 1 {
send an ICMP Time Exceeded -- Hop Limit Exceeded in
Transit message to the Source Address and discard the
packet
}
else {
decrement the Hop Limit by 1
resubmit the packet to the IPv6 module for transmission
to the new destination
}
请注意,它说,“如果 IPv6 Hop Limit 小于或等于 1 ”,则丢弃该数据包。
-和-
8.2 最大数据包生命周期
与 IPv4 不同,IPv6 节点不需要强制执行最大数据包生命周期。这就是 IPv4 的“生存时间”字段在 IPv6 中更名为“跳数限制”的原因。实际上,很少有(如果有的话)IPv4 实现符合限制数据包生命周期的要求,因此这在实践中并没有改变。任何依赖互联网层(无论是 IPv4 还是 IPv6)来限制数据包生命周期的上层协议都应该升级以提供自己的机制来检测和丢弃过时的数据包。
编辑:
下面是一个示例,我 ping 下一跳路由器 VLAN 接口,然后我 ping 路由器 Loopback0 接口,TTL 为 1。我每次 ping 尝试都收到 ICMP 回复,但对环回的 ping 在传输过程中过期:
D:\>ping 198.18.1.1
Pinging 198.18.1.1 with 32 bytes of data:
Reply from 198.18.1.1: bytes=32 time<1ms TTL=128
Reply from 198.18.1.1: bytes=32 time<1ms TTL=128
Reply from 198.18.1.1: bytes=32 time<1ms TTL=128
Reply from 198.18.1.1: bytes=32 time<1ms TTL=128
Ping statistics for 198.18.1.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
D:\>ping -i 1 198.0.0.8
Pinging 198.0.0.8 with 32 bytes of data:
Reply from 198.18.1.1: TTL expired in transit.
Reply from 198.18.1.1: TTL expired in transit.
Reply from 198.18.1.1: TTL expired in transit.
Reply from 198.18.1.1: TTL expired in transit.
Ping statistics for 198.0.0.8:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),