RFC 791 专门解释了分段和重组。请阅读Internet 协议规范 RFC。RFC 有多个部分解释示例碎片和重组。您的所有疑问和问题都在其中得到了很好的解决。
Ans 1:关于数据包的长度:原始数据包包含 4000 字节。该数据包是一个完全 IP 数据包,因此也包含 IP 标头。因此,有效载荷长度实际上是 4000 -(IP Header Length 即 20)。
实际有效载荷长度 = 4000 - 20 = 3980
现在,由于长度大于 MTU(1500 字节),数据包被分段。
因此,第一个数据包包含 1500 个字节,其中包括 IP 标头 + 有效负载部分。
1500 = 20(IP 报头)+1480(数据负载)
对于另一个数据包也是如此。
第三个数据包应包含剩余的剩余数据( 3980 - 1480 -1480 )= 1020
因此数据包的长度是 20 (IP Header) + 1020 (payload) = 1040
Ans 2:偏移量是参考原始数据有效负载的数据开始的地址或定位器。对于 IP,数据有效负载包括 IP 标头和选项标头之后的所有数据。因此,系统/路由器获取有效负载并将其分成更小的部分,并参考原始数据包跟踪偏移量,以便可以进行重组。
如RFC第 12 页中所述。
"片段偏移量字段告诉接收者片段在原始数据报中的位置。片段偏移量和长度决定了该片段覆盖的原始数据报的部分。更多片段标志指示(通过被重置)最后一个片段。这些字段为重组数据报提供了足够的信息。 ”
片段偏移量以每个 8 字节为单位进行测量。它在 IP 标头中有 13 位字段。如 RFC 第 17 页所述
"该字段指示该片段在数据报中的位置。片段偏移量以 8 个八位字节(64 位)为单位。第一个片段的偏移量为零。 "
因此,正如您在这个 8 来自哪里的问题中所问的那样,它是为 IP 协议规范定义的标准,其中 8 个八位字节被视为一个值。这也有助于我们通过它传输大数据包。
RFC 的第 28 页写道: *片段以 8 个八位字节为单位计数。分片策略的设计使得未分片的数据报具有全零分片信息(MF = 0,分片偏移量 = 0)。如果 Internet 数据报是分段的,则其数据部分必须在 8 个八位字节边界上断开。这种格式允许 2**13 = 8192 个片段,每个片段有 8 个八位字节,总共 65,536 个八位字节。注意,这与数据报总长度字段是一致的(当然,报头计入总长度而不是分片)。*