当我们在网络层从一台路由器向另一台路由器发送数据包时,如果数据包的大小大于路由器的最大可传输单位(maximum transferable,MTU ),我们就必须对数据包进行分段。我的问题是:假设我们需要在最后一个片段中添加填充比特,那么我们在哪里添加填充比特(在LSB或MSB中),目的路由器如何区分数据包比特或填充比特?
发布于 2016-09-22 22:39:26
在此之前,我希望您考虑以下几点:
我将使用下图中的信息通过一个示例来帮助您找到答案。
这里数据包的初始长度是2400字节,需要根据1000字节的MTU限制进行分段。
只有13位可用于片段偏移量,并且偏移量被给出为8字节的倍数。这就是为什么第一个和第二个片段中的数据字段具有976字节的大小(它是可被8整除的最高数字,它小于1000 - 20字节)。这使得第一个和第二个片段的总大小为996字节。最后一个片段包含剩余的428字节的有效载荷(总共448字节)。
偏移可以计算为0;976/8 = 122和1952/8 = 244。
当这些片段到达目的主机时,需要进行重组。主机使用标识、标志和碎片偏移量来执行此任务。为了确定哪些片段属于哪个数据报,主机使用源地址、目的地址和标识来唯一地标识它们。使用偏移值和更多片段位来确定是否所有片段都已到达。
对您问题的回答
仅对于非最后的片段,需要将有效负载划分为8的倍数。使用偏移量除以8的原因有助于主机识别下一个片段的起始地址。如果主机遇到最后一个片段,则它不需要下一个片段的地址。因此,在最后一个片段的情况下,不需要担心有效负载是8的倍数。主机检查更多片段标志以识别最后一个片段。
补充一点信息:保证数据报文的传送不是网络层的责任。如果它遇到一个或多个片段尚未到达,则它简单地丢弃整个数据报。传输层工作在网络层之上,如果它使用TCP,将通过请求源重新传输数据来处理这件事。
参考: Computer Networking-A Top Down Approach,James F. Kurose,Keith W. Ross (第五版)
发布于 2016-01-19 23:22:37
您不需要添加任何填充比特。所有比特都将沿着路由向下推送,直到发送完整个帧。
https://stackoverflow.com/questions/32810595
复制相似问题