在Peterson和Davie的“计算机网络第五版”一书中,我发现“IP的设计者决定,碎片应该总是发生在8字节的边界上,这意味着偏移字段计数8字节块,而不是字节”。
为什么偏移字段被设计为8的倍数?我不明白这有什么意义。另外,如果MTU-偏移量不是8的倍数,会发生什么情况?(例如)如果MTU = 1502字节,头部为20个字节,数据为1482字节。在这种情况下,第二个片段中的片段偏移量(如1482年)并不是8的残缺。
发布于 2017-04-23 17:41:10
在我看来,在8字节的边界上进行碎片偏移并不一定是一个主要的设计选择。更确切地说,这是它们在主要设计选择中可以使用的位数的结果,即头应该有多大,以及其他字段需要多少位。
设计人员选择头大小为20字节,在这20字节中,考虑到如何为各个字段分配位,最终只能得到13位的片段偏移。

这就给出了2^13 = 8192个可能的偏移值。同时,总长度字段为16位,因此技术上最大有效载荷大小为2^16-20= 65516字节。
当然,碎片偏移场必须能够跨越所有可能大小的光谱,所以65536 / 8192 = 8。
发布于 2014-09-24 07:35:09
我可以想到使用8字节块的两个优点:首先,在均匀边界上对齐数据可能比使用CPU更有效。其次,在您发送的每一个IP数据包上,无论是否碎片,都要从IP报头中保存三位。
问题的第二部分的答案是,如果您发送了1482字节的数据,并且它不是最后一个数据包,那么您就没有正确地分割。相反,您将发送1480字节。
https://networkengineering.stackexchange.com/questions/11126
复制相似问题