我目前正在浏览我的网络幻灯片,想知道是否有人可以帮助我了解分段和重组的概念。
我理解它是如何工作的,即数据报是如何被分割成更小的 block 的,因为网络链路有一个 MTU。然而,图片中的例子让我感到困惑。
所以前两节显示长度为 1500,因为这是 MSU,但这不应该意味着最后一个应该有 1000(总共 4000 字节)而不是 1040?这些额外的 40 个字节从何而来?我的猜测是因为前两个片段都有 20 字节的 header ,这额外的 40 字节数据需要去某个地方,所以它会到达最后一个片段?
Fragflag 本质上意味着还有另一个片段,所以除了最后一个片段为零之外,所有片段的 Fragflag 都为 1。但是我不明白什么是偏移量或它是如何计算的。为什么第一个偏移量为零?为什么我们将数据字段 (1480) 中的字节除以 8 以获得第二个偏移量?这个8是哪里来的?除此之外,我假设每个片段偏移量只会增加这个值?
例如,第一个片段的偏移量为 0,第二个 185,第三个 370,第四个 555? (370+185)
感谢您的帮助!
最佳答案
每个数据包中有一个 20 字节的 header 。所以原始数据包包含 3,980 字节的数据。这些片段包含 1480、1480 和 1020 字节的数据。 1480 + 1480 + 1020 = 3980
header 中的每一位都是宝贵的。将偏移量除以 8 使其适合 13 位而不是 16 位。这意味着除了最后一个数据包之外的每个数据包都必须包含一些数据字节,这些数据字节是 8 的倍数,这不是问题。
关于networking - IP分片和重组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999739/