假设我有两台主机,主机 A 和主机 B,主机 A 向 B 发送一个 1500 字节的数据包,它们之间有两个路由器,第一条链路的 MTU 为 800 字节,第二条链路的 MTU 为 500 字节他们。
据我了解,数据包必须两次都被分段。数据包必须被分成 3 个数据包(2 个大小相同的数据包和一个较小的数据包)。
然后,当我们点击第二个路由器时,我们将再次对前两个分段数据包中的每一个进行分段。前两个原始片段将产生 1 个较大的片段(接近 500 字节)和一个较小的片段。
这就是我感到困惑的地方。
我知道前 3 个片段的“更多片段”位应该设置为 1,除了最后一个片段表示数据包是片段的一部分,直到并包括下一个“更多片段”设置为 0 的数据包。但是,对于第二组片段我不太确定。如果这是第一次对数据包进行分段,则最后一个分段的“更多分段”为 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.
我的假设在这里正确吗?