1. Introduction (简介)
在 IPv4 中,标识 (Identification, ID) 字段是一个 16 位值,用于支持数据报的分片 (fragmentation) 和重组 (reassembly)。根据当前的规范,ID 字段在具有相同源地址、目的地址和协议的数据报中,在最大生存时间 (Maximum Segment Lifetime, MSL) 内必须唯一。然而,当前的实现并未严格遵循该规范,而是将 ID 字段视为每个数据报的唯一标识符,无论该数据报是否会被分片。
在 IPv4 中,传输层和上层协议通常使用 16 位或 32 位字段来检测重复数据报,例如 TCP 的序列号 (sequence number) 或 UDP 的校验和 (checksum)。然而,IPv4 的 ID 字段仅有 16 位,这意味着在高速网络环境下,ID 字段可能会在短时间内耗尽,导致无法为新的数据报分配唯一的 ID 值。
在 IPv6 中,分片仅由源节点执行,且分片头 (Fragment Header) 包含一个 32 位的标识字段。IPv6 规范明确指出,该标识字段仅在数据报被分片时才需要唯一。相比之下,IPv4 的 ID 字段在所有数据报中都存在,无论是否分片。
本文档更新了 RFC 791、RFC 1122 和 RFC 2003 中对 IPv4 ID 字段的规范,使其更贴近当前的实践,并与 IPv6 的处理方式保持一致。具体而言,本文档明确了以下几点:
-
原子数据报 (Atomic Datagrams): 对于设置了 DF (Don't Fragment) 标志位的数据报,其 ID 字段可以设置为任意值,接收端应忽略该字段的值。
-
非原子数据报 (Non-Atomic Datagrams): 对于未设置 DF 标志位的数据报,其 ID 字段必须在重组超时期间内唯一,以确保分片能够正确重组。
-
兼容性: 本文档讨论了这些变化对现有设备和协议的影响,并提供了过渡期间的建议。
本文档使用 RFC 2119 中定义的关键词 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 来表示要求级别。
在本文档中,字符 "^" 表示逻辑非 (logical NOT),"|" 表示逻辑或 (logical OR),"&" 表示逻辑与 (logical AND)。
1.1 Terminology (术语)
本文档使用以下术语:
-
Atomic datagram (原子数据报): IPv4 数据报,其 DF (Don't Fragment) 标志位被设置为 1。原子数据报不会被中间路由器分片。
-
Non-atomic datagram (非原子数据报): IPv4 数据报,其 DF 标志位被设置为 0。非原子数据报可以被中间路由器分片。
-
Source node (源节点): 生成 IPv4 数据报的主机或设备。
-
Intermediate node (中间节点): 转发 IPv4 数据报的路由器或网关。
-
Destination node (目的节点): 接收 IPv4 数据报的主机或设备。
-
ID reuse interval (ID 重用间隔): 具有相同源地址/目的地址/协议元组的数据报之间,重用相同 ID 值的最小时间间隔。
Navigation: