3. Updates to the IPv4 ID Specification (IPv4 ID 规范的更新)
本章节详细说明了对 IPv4 ID 字段规范的更新。这些更新旨在解决高速网络环境下 ID 字段耗尽的问题,并使 IPv4 的处理方式与 IPv6 保持一致。
3.1 IPv4 ID for Atomic Datagrams (原子数据报的 IPv4 ID)
原子数据报 (atomic datagram) 是指设置了 DF (Don't Fragment) 标志位的 IPv4 数据报。由于这些数据报不会被中间路由器分片,因此其 ID 字段不需要用于重组。
3.1.1 发送端行为 (Sender Behavior)
对于原子数据报,发送端 可以 (MAY) 将 ID 字段设置为任意值。具体而言:
-
固定值: 发送端可以将所有原子数据报的 ID 字段设置为相同的固定值 (例如 0)。
-
简单计数器: 发送端可以使用简单的计数器来生成 ID 值,而无需考虑 ID 的唯一性。
-
随机值: 发送端可以为每个原子数据报生成随机的 ID 值。
这种灵活性允许发送端简化 ID 字段的生成逻辑,从而提高性能并减少资源消耗。
3.1.2 接收端行为 (Receiver Behavior)
对于原子数据报,接收端 必须 (MUST) 忽略 ID 字段的值。具体而言:
-
接收端不应使用 ID 字段来检测重复数据报。
-
接收端不应假设原子数据报的 ID 字段具有任何特定的含义或顺序。
-
接收端应依赖传输层协议 (如 TCP 的序列号) 来检测重复数据报。
3.1.3 中间节点行为 (Intermediate Node Behavior)
中间节点 (如路由器) 在转发原子数据报时:
-
不得 (MUST NOT) 修改 ID 字段的值,除非执行 IP-in-IP 封装或类似操作。
-
不得 (MUST NOT) 对原子数据报进行分片。如果数据报的大小超过了下一跳链路的 MTU,中间节点应丢弃该数据报并向源节点发送 ICMP "Fragmentation Needed" 消息。
3.2 IPv4 ID for Non-Atomic Datagrams (非原子数据报的 IPv4 ID)
非原子数据报 (non-atomic datagram) 是指未设置 DF 标志位的 IPv4 数据报。这些数据报可以被中间路由器分片,因此其 ID 字段必须用于支持分片和重组。
3.2.1 发送端行为 (Sender Behavior)
对于非原子数据报,发送端 必须 (MUST) 确保 ID 字段在重组超时期间内唯一。具体而言:
-
对于具有相同源地址、目的地址和协议的数据报,其 ID 字段在重组超时期间内不得重复。
-
重组超时期间通常设置为 60-120 秒,具体取决于实现。
-
发送端应使用能够确保 ID 唯一性的算法,例如:
- 全局计数器: 为所有数据报维护一个全局计数器。
- 每流计数器: 为每个 (源地址, 目的地址, 协议) 元组维护一个独立的计数器。
- 基于时间的算法: 使用时间戳或其他基于时间的机制来生成 ID 值。
3.2.2 接收端行为 (Receiver Behavior)
对于非原子数据报的分片,接收端 必须 (MUST) 使用 ID 字段来进行重组。具体而言:
-
接收端应将具有相同源地址、目的地址、协议和 ID 值的分片组合在一起。
-
接收端应在重组超时期间内保留未完成的分片。如果在超时期间内未能接收到所有分片,接收端应丢弃已接收的分片。
-
接收端不应假设非原子数据报的 ID 字段具有任何特定的顺序或模式。
3.2.3 中间节点行为 (Intermediate Node Behavior)
中间节点在处理非原子数据报时:
-
可以 (MAY) 对数据报进行分片,如果数据报的大小超过了下一跳链路的 MTU。
-
必须 (MUST) 保留原始数据报的 ID 字段值,以便目的节点能够正确重组分片。
-
不得 (MUST NOT) 修改 ID 字段的值,除非执行 IP-in-IP 封装或类似操作。
3.3 Retaining IPv4 ID Behavior (保留 IPv4 ID 行为)
在某些情况下,设备可能需要保留传统的 IPv4 ID 行为,即为所有数据报 (无论是否设置 DF 标志位) 生成唯一的 ID 值。这种情况包括:
-
兼容性要求: 与不支持本文档更新的旧设备进行互操作。
-
特殊应用: 某些应用可能依赖 ID 字段的唯一性来进行调试或监控。
-
安全考虑: 某些安全机制可能依赖 ID 字段的随机性或唯一性。
在这些情况下,设备 可以 (MAY) 选择为所有数据报生成唯一的 ID 值,而不区分原子数据报和非原子数据报。然而,这种做法可能会导致性能下降,特别是在高速网络环境下。
3.3.1 过渡期建议 (Transition Recommendations)
为了确保平滑过渡,本文档建议:
-
新设备: 新设备应实现本文档中描述的更新行为,即区分原子数据报和非原子数据报。
-
现有设备: 现有设备可以通过软件更新来实现新的行为。在更新之前,这些设备应继续使用传统的 ID 生成算法。
-
互操作性测试: 设备制造商应进行互操作性测试,以确保新旧设备能够正确互操作。
-
文档和配置: 设备应提供清晰的文档和配置选项,说明其 ID 字段的生成策略。
Navigation: