当我们将数据包从一个路由器发送到网络层上的另一个路由器并且数据包大小大于路由器的MTU(最大可传输单元)时,我们必须对数据包进行分段。我的问题是:假设我们需要在最后一个片段中添加填充位,然后我们在哪里添加填充位(在LSB或MSB中)以及目标路由器如何区分包位或填充位?
答案 0 :(得分:2)
我希望你以前考虑以下事项:
这里数据包的初始长度是2400字节,需要根据1000字节的MTU限制进行分段
片段偏移只有13位可用,偏移量是8个字节的倍数。这就是为什么第一和第二个片段中的数据字段大小为976字节(它是可被8整除的最高数字,小于1000 - 20字节)。这使得第一和第二片段的总大小为996字节。最后一个片段包含剩余的428个字节的有效载荷(总共448个字节)。
偏移量可以计算为0; 976/8 = 122和1952/8 = 244.
当这些片段到达目标主机时,需要重新组装。主机使用标识,标志和碎片偏移量来完成此任务。为了确保哪些片段属于哪个数据克,主机使用源,目标地址和标识来唯一地标识它们。 偏移值和更多片段位用于确定是否所有片段都已到达。
回答您的问题
只有非最后一个片段才需要将有效载荷除以8的倍数。使用偏移除以8的原因有助于主机识别下一个片段的起始地址。如果遇到最后一个片段,主机不需要下一个片段的地址。因此,在最后一个片段的情况下,无需担心有效载荷是8的倍数。主持人检查更多片段标志以识别最后一个片段
一些附加信息:网络层不负责保证数据克的传递。如果它遇到一个或多个片段尚未到达,它只是丢弃整个数据克。在网络层之上工作的传输层,如果使用TCP,则通过要求源重新传输数据来处理这个事情。
参考:计算机网络 - 自上而下的方法,James F. Kurose,Keith W. Ross(第五版)
答案 1 :(得分:0)
您不需要添加任何填充位。所有位都将沿着路径向下推,直到发送完整帧为止。