Appendix A. Duplicate Detectability (附录 A: 重复检测能力)
本附录讨论了 IPv4 ID 字段在重复数据报检测中的作用,以及本文档提出的更新对重复检测能力的影响。
A.1 Background on Duplicate Detection (重复检测的背景)
在网络通信中,重复数据报 (duplicate datagrams) 可能由多种原因产生:
-
链路层重传: 链路层协议 (如以太网、Wi-Fi) 可能会重传丢失的帧,导致同一数据报被多次传输。
-
路由环路: 网络配置错误或路由协议故障可能导致数据报在路由器之间循环。
-
负载均衡: 某些负载均衡机制可能会将同一数据报复制到多个路径。
-
恶意攻击: 攻击者可能故意发送重复的数据报来发起拒绝服务攻击。
传统上,IPv4 ID 字段被认为可以用于检测重复数据报。然而,由于 ID 字段仅有 16 位,在高速网络环境下,ID 字段可能会快速重复使用,从而降低其作为重复检测机制的有效性。
A.2 Limitations of IPv4 ID for Duplicate Detection (IPv4 ID 用于重复检测的局限性)
IPv4 ID 字段作为重复检测机制存在以下局限性:
A.2.1 有限的 ID 空间 (Limited ID Space)
16 位的 ID 字段最多只能表示 65,536 个不同的值。在高速网络环境下,这个空间可能在短时间内耗尽。例如:
-
10 Gbps 链路: 假设平均数据报大小为 1,500 字节,每秒可以传输约 833,333 个数据报,ID 空间将在约 0.079 秒内耗尽。
-
100 Gbps 链路: 在相同假设下,ID 空间将在约 0.0079 秒内耗尽。
这意味着在高速网络环境下,依赖 IPv4 ID 字段进行重复检测是不可靠的。
A.2.2 ID 生成算法的多样性 (Diversity of ID Generation Algorithms)
不同的设备和操作系统可能使用不同的 ID 生成算法:
- 全局计数器: 所有数据报共享一个全局计数器。
- 每流计数器: 每个 (源地址, 目的地址, 协议) 元组维护独立的计数器。
- 随机值: 为每个数据报生成随机的 ID 值。
这种多样性使得接收端难以依赖 ID 字段来可靠地检测重复数据报。
A.2.3 分片的影响 (Impact of Fragmentation)
当数据报被分片时,所有分片共享相同的 ID 值。这意味着:
- 接收端无法仅通过 ID 字段来区分来自同一数据报的不同分片和来自不同数据报的分片。
- 如果两个不同的数据报使用了相同的 ID 值,并且它们都被分片,接收端可能会错误地将来自不同数据报的分片组合在一起。
A.3 Impact of RFC 6864 Updates (RFC 6864 更新的影响)
本文档提出的更新对重复检测能力的影响如下:
A.3.1 原子数据报 (Atomic Datagrams)
对于原子数据报 (DF=1):
- 发送端: 可以将 ID 字段设置为任意值,包括固定值、简单计数器或随机值。
- 接收端: 必须忽略 ID 字段的值,不应依赖 ID 字段进行重复检测。
这意味着对于原子数据报,IPv4 ID 字段不再提供任何重复检测能力。接收端必须依赖传输层协议 (如 TCP 序列号、UDP 校验和) 或应用层机制来检测重复数据报。
A.3.2 非原子数据报 (Non-Atomic Datagrams)
对于非原子数据报 (DF=0):
- 发送端: 必须确保 ID 字段在重组超时期间内唯一。
- 接收端: 必须使用 ID 字段来重组分片。
然而,即使对于非原子数据报,ID 字段的主要用途仍然是支持分片和重组,而不是重复检测。接收端不应依赖 ID 字段作为主要的重复检测机制。
A.4 Recommended Duplicate Detection Mechanisms (推荐的重复检测机制)
由于 IPv4 ID 字段在重复检测方面的局限性,本文档建议使用以下机制来检测重复数据报:
A.4.1 传输层机制 (Transport Layer Mechanisms)
TCP (Transmission Control Protocol):
- TCP 使用 32 位的序列号 (sequence number) 来唯一标识每个字节的数据。
- 接收端可以通过检查序列号来检测重复的 TCP 段。
- TCP 的确认机制 (acknowledgment) 也有助于检测和处理重复。
UDP (User Datagram Protocol):
- UDP 本身不提供重复检测机制。
- 应用层协议应实现自己的重复检测机制,例如使用序列号、时间戳或唯一标识符。
SCTP (Stream Control Transmission Protocol):
- SCTP 使用传输序列号 (Transmission Sequence Number, TSN) 来检测重复数据块。
A.4.2 应用层机制 (Application Layer Mechanisms)
应用层协议可以实现以下重复检测机制:
- 序列号: 为每个消息分配唯一的序列号。
- 时间戳: 在消息中包含时间戳,接收端可以根据时间戳来检测重复。
- 消息 ID: 为每个消息生成唯一的标识符 (如 UUID)。
- 幂等性设计: 设计应用协议使其操作是幂等的,即重复执行相同的操作不会产生副作用。
A.4.3 网络层机制 (Network Layer Mechanisms)
IPsec (IP Security):
- IPsec 的 ESP (Encapsulating Security Payload) 和 AH (Authentication Header) 协议包含序列号字段。
- 接收端可以使用 IPsec 序列号来检测重放攻击 (replay attacks) 和重复数据报。
A.5 Conclusion (结论)
IPv4 ID 字段的主要用途是支持数据报的分片和重组,而不是重复检测。由于 ID 字段的有限性和高速网络环境下的快速重复使用,依赖 IPv4 ID 字段进行重复检测是不可靠的。
本文档的更新进一步明确了这一点,特别是对于原子数据报 (DF=1),接收端必须忽略 ID 字段的值。应用和协议设计者应依赖传输层或应用层的机制来检测重复数据报,而不应依赖 IPv4 ID 字段。
这种方法与 IPv6 的设计理念一致,IPv6 中的标识字段仅在分片时使用,不用于重复检测。
Navigation: