为什么IP分片必须是8字节的倍数?

15
在《计算机网络》(第五版)James F.Kurose中,第4章提到IP片段必须是8字节的倍数,因为IP头中的“标志”占用3位。我不明白为什么IP分段必须是8字节的倍数。
5个回答

15

除了最后一个分段外,每个分段必须包含8字节的数据的倍数。

分段偏移可以容纳8192(2^13)个单位,但数据报的大小不能达到8192 * 8 = 65536字节,因为IP头部的"总长度"字段记录了包括头部和数据在内的总大小。

IP头部至少有20字节长,因此"分段偏移"的最大值被限制为8189,这样就为最后一个分段留出3个字节的空间。

希望这会有所帮助。


3
感谢@Wayne Shears的回答。正如您所说,Fragment Offset可以容纳8192个单位[这里的“单位”是指什么?您是不是指字节?],但数据报的大小不能为8192 * 8 = 65536字节 [为什么?],因为IP头部的“Total Length”字段记录了总大小,包括头部和数据[我只知道其中totallength = header size + payload,而total length是16位,所以该值将增加到2^16,即65536。我有什么想法错误吗?]。 - user991482

7

我并没有从其他答案中获得太多好处。它们似乎只是在次要地解释另一个他们看到的问题,而不是真正的问题。这里是真正的答案:

消息长度字段中的比特数与片段字段中的比特数不同。

[        Length        ] <-- 16 bits
[ Flag ][   Fragment   ] <-- 3 bits + 13 bits

消息长度字段测量整个消息,跨越该消息的所有片段

当发送大数据包时,它会被分成多个片段,所以您需要标记片段并跟踪该片段中消息的部分,并在所有片段到达时将其按顺序放回。您有13位来描述片段的顺序。长度是一个16位整数,因此其容量(16位)为2^16-1 = 65536-1 = 65535。这给您提供了65535个不同的字节,因此IP消息最多可以长达65535个字节。

片段偏移量是字节的度量单位,但无法适应消息中的字节数

理想情况下,我们希望以与长度相同的单位度量片段,即字节

但是片段只有13位!

他们希望保持片段偏移量的度量单位为字节,因此他们必须想办法将16位装入13位中。他们发明了一种奇怪的位映射方法:

奇怪的位映射

他们意识到,对于每少一个用于表示其最大数字的比特的数字(例如,从16位减少到15位,例如),您可以拥有的唯一索引数量除以2。 15位只能表示2^15-1 = 32768-1 = 32767个唯一位置。14位 -> 再除以2; 13位 -> 再除以2。为了能够跟踪相同总字节数,它必须跳过某些字节并仅对每个2 ^ n字节进行索引,其中n是从片段偏移值中去除的比特数。由于片段偏移量必须使用13,因此它会取走3位,因此它只能索引每8字节(2^3),因此索引是针对8字节块的。因此,8 *片段偏移量用于计算每个片段的实际字节偏移量。

考虑事项

片段值是从第一个片段的第一个字节开始的偏移量。由于字节需要比索引更多的数据,因此出于某种奇怪的原因,他们决定以字节为度量单位而不是片段数量--即使字节需要比索引更多的数据。让片段偏移量成为index value(片段编号)可能更明智--但他们没有这样做!


只是好奇为什么我们在计算时要减一? - MusicalChicken

5
请注意,IP数据包的片偏移字段以8字节为单位表示,而不是以字节为单位表示。这就是为什么每个分段中的有效载荷大小(除了最后一个分段)必须是8字节的倍数的原因。
片偏移字段被编码成13位,因此其范围在0和8191个8字节单元之间。然而,由于总长度也考虑了IP头部,因此片偏移的最大限制实际上是8189个单位,而不是8191个单位,见下文:
总长度被编码为16位,这意味着它最多只能达到65535个字节。然后,由于IP头至少为20个字节,因此有效载荷最大限制为65535个字节- 20个字节= 65515个字节。将这些65515个字节分成8字节的单元,最多有8189个单元,因此片偏移的最大限制是8189个单位。
将片偏移值设置为8189的IP分段,最多可以具有3个字节的有效载荷。
最大65535个字节-最小20个字节-(8189个单位*每个单位8字节)=最多3个字节。
Rurre

2

0
Wayne所说的加上事实,偏移量实际上在终端主机中被使用,以便它们可以高效地存储内存中的片段,也就是说,按行存储。偏移量显示片段相对于整个数据报的位置。这就是为什么偏移量必须是IP片段的字节数的倍数,因为你实际上所做的是右移3位(因此有13位)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接