2015-09-27 99 views
1

当我们从一个路由器发送数据包到网络层上的另一个路由器,并且数据包大小大于路由器的MTU(最大可传输单元)时,我们必须对数据包进行分段。我的问题是:假设我们需要在最后一个片段中添加填充位,那么我们在哪里添加填充位(在LSB或MSB中)以及目标路由器如何区分包位或填充位?网络层局域网

+1

这些位应该不相关,因为每个包都指定了特定的帧大小。因此,对于网络层以上的任何实际上有意义的东西,附加位都是可见的。 – arkascha

+0

如果最后一帧不是8的倍数比我们增加填充位和其他侧面路由器的数据是8的倍数,并且它如何计算最后一帧的实际大小 – PDP

+0

如上所述:它明确指定在包内。采取网络嗅探器,几个包裹,并自己看看。 – arkascha

回答

0

您不需要添加任何填充位。所有比特将沿着路线推进,直到完整帧被发送。

2

我要你之前要考虑以下几点:在由数据链路协议强加IP数据克的最大尺寸

  • 限制。
  • IP是在路由器和主机上实现的最高层协议。
  • 重新组装原始数据块只能在目标主机上完成。这需要网络核心中存在的路由器需要完成的额外工作。

我将使用下面的图像的信息,以帮助您用一个例子答案。
enter image description here

这里数据包的初始长度是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(第五版)