IPv4 标头中的标识字段

网络工程 ipv4
2021-07-21 00:19:44

Ipv4 报头中的标识字段为 16 位。这意味着我们可以一次从单个主机获得 $2^16$ 的唯一数据报。此外,每个数据报的总长度为 $2^16$ 字节。

那么发件人一次只能发送 $2^32$ 或 4GB 的数据吗?如果他发送更多数据,识别号会环绕吗?

1个回答

rfc6864 - IPv4的ID字段的更新的规范正好解决这个问题。

从此rfc中摘录:

  1. 介绍

在 IPv4 中,标识 (ID) 字段是一个 16 位值,
对于给定的源地址、目标
地址和协议的每个数据报来说都是唯一的,因此它不会在
最大数据报生命周期 (MDL) [RFC791]内重复[RFC1122]。正如当前
规定的,给定
协议的源和目标之间的所有数据报必须在此 MDL 的一段时间内具有唯一的 IPv4 ID 值,
这通常解释为两分钟,并与
推荐的重组超时 [RFC1122] 相关。
当前为所有数据报指定了这种唯一性,而不管碎片设置如何。

高速设备通常会违反 IPv4 ID 的唯一性;如果严格执行,它会将两个 IP 端点之间的单个协议的速度限制为 6.4 Mbps,典型 MTU 为 1500 字节(假设 MDL 为 2 分钟,使用 [RFC4963] 中提供的分析)。单个连接的运行速度远远超过这些速率是很常见的,这强烈表明指定的 IPv4 ID 的唯一性已经没有实际意义。此外,一些来源多年来一直在生成不变的 IPv4 ID(例如,手机),这导致在 RObust 标头压缩 (ROHC) [RFC5225] 中支持此类。

4.1. IPv4 ID 仅用于分段

尽管 RFC 1122 建议 IPv4 ID 字段有其他用途,
包括数据报重复数据删除,但此类用途已经无法
与不改变
其 ID 的已知源实现互操作因此,本文档仅针对
分段和重组定义了该字段的值

>> IPv4 ID 字段不得用于分段和重组以外的目的。

对于不存在 ID 字段的情况(IPv6 未分段数据报),仍然可以使用基于哈希的重复检测来完成数据报重复数据删除,这也可以应用于 IPv4 原子数据报而不使用 ID 字段 [RFC6621]。

(强调我的)