当IP数据包被多次分段时,“更多片段”位的值

时间:2012-11-07 12:20:53

标签: networking tcp ip fragmentation

假设我有两个主机,主机A和主机B,主机A向B发送一个1500字节的数据包,它们之间有两个路由器,第一个链路的MTU为800字节,MTU为500字节。他们之间的第二个联系。

据我所知,数据包必须两次分段。数据包必须分成3个数据包(2个大小相同的数据包和1个较小的数据包)。

然后,当我们点击第二个路由器时,我们将使前两个分段数据包中的每一个再次分段。前两个原始片段将产生1个较大的片段(接近500个字节)和一个较小的片段。

这是我感到困惑的地方。

我知道所有前3个片段的'More Fragment'位应该设置为1,除了最后一个,表明数据包是片段的一部分,包括下一个包含'More Fragment'的数据包但是,对于第二组片段,我不太确定。如果这是第一次将数据包分段,最后一个片段的“More Fragment”为0,但由于这实际上只是原始消息中间的某个片段,我觉得它应该是1。

我希望有更多经验的人可以为我阐明这一点。重组时是否使用了“更多碎片”位?如果是这样,我会想象当片段碎片化时,我们不会将最后一个片段设置为0.

所以算法会:

If fragmenting a packet with 'More Fragment' set to 0, 
    then set 'More Fragment' to 1 in all fragmented packets except the last.
Else If fragmenting a packet with 'More Fragment' set to 1, 
    then set 'More Fragment' to 1 in all of the fragmented packets.

我的假设在这里是否正确?

1 个答案:

答案 0 :(得分:5)

你或多或少是对的。除了添加MF(更多片段)标志之外的路由器正在进行更多处理:

  

对长的互联网数据包进行分段/分段,路由器(图中的R1)   下面)创建一个新的IP数据包并复制IP的内容   从长数据包到新IP头的头字段。的数据   然后将长数据包分成8个字节(64位)的两个部分   边界,使第一个数据包小于MTU   外出的界面。第一个数据包中的片段标志(MF)越多   设置为1(表示此数据包的更多片段如下)。   如果已经存在,则可以在该分组中设置更多标志   被另一个系统支离破碎。转发此数据包。

     

然后处理第二个创建的新数据包。包头   字段与原始数据包的字段相同(包括相同的字段)   数据包ID的值,总长度字段,更多片段   标志(MF)和原始数据包中的片段偏移字段)。该   通过添加,使用新的偏移字段更新包头字段   第一个片段中发送的有效负载字节数。如果是这个新包   如果大于允许的链路MTU,则数据包将再次分段。

因此简而言之,对于已经分段的数据包,整个IP报头被复制到新的数据包(片段的较小片段)。这意味着如果IP数据包具有MF设置,则它也将被复制到最后的分段数据包。由于更改偏移和数据包ID主机接收碎片数据包将能够重新组装它们。