关于数据包分片总长度字段的计算和MF标志位的判断
若路由器向MTU=800B的链路转发一个总长度为1580B的IP数据报(首部长度为20B)时,进行了分片,且每个分片尽可能大,则第2个分片的总长度字段和MF标志位的值分别是( )
A.796,0 B.796,1 C.800,0 D.800,1
由题可知,路由器是向一个MTU为800B的链路转发一个IP数据报,那么首先我们需要知道,什么是MTU?
MTU(Maximum Transmission Unit)最大传输单元
是指在网络链路层中,能够传输的最大数据包大小,通常以字节为单位。
不同的网络介质有不同的默认MTU值
以太网的默认MTU值通常为1500字节
ADSL接入的MTU值一般为1492字节
可以手动设置合适的MTU值,以确保其与网络的MTU值一致,从而提高网络性能。
①理想情况下,本地MTU值应等于网络MTU值,以充分利用网络的传输能力。
②如果本地MTU值大于网络MTU值,即当发送的数据包大小超过链路的MTU时,路由器会将数据包分割成多个较小的片段进行传输,网络会进行拆包,也就是数据包会被分片,这会导致数据包数量增多,从而增加网络延迟和降低传输效率。
由题知,该IP数据报总长度为1580B,其中的首部长度为20B,故
其该IP数据报的数据长度占1580B-20B=1560B
因为是路由器向MTU=800B的链路转发一个总长度为1580B的IP数据报(首部长度为20B)
故在该链路层中,能够传输的最大数据包大小MTU为800B,即每个分片的长度为800B,每一个分片先减去首部得出每一个分片的数据长度为800B-20B=780B
而要让该MTU=800B的链路来转发一个总长度为1580B的IP数据报(首部长度为20B),这里面就涉及到一个片偏移的知识:
片偏移
是指在数据传输中,当前IP分片的起始位置相对于原始数据的起始位置的偏移量。用于记录每个分片在整个数据报中的位置,以便于在接收端正确重组数据。
每个分片的偏移量必须是8字节的整数倍,以便于数据的正确重组。
因为片偏移每个分片的偏移量必须是8字节的整数倍,又每一个分片的数据长度为780B,故
8Bx<780B
x<97.5
即x必须小于97.5,取整数为97
故最大的IP分片的数据部分长度为97*8B=776B
因为1560B÷776B=2.010309....,所以向上取整为3,即路由器向MTU=800B的链路转发一个总长度为1580B的IP数据报(首部长度为20B)时需要分为3片。
如下,每片都是带有一个20B大小的首部。
故第2个分片加上首部长度后的总长度字段为
776B+20B=796B
然后,我们需要求第2个分片的MF标志位的值,那么什么是【MF标志位】呢?
【MF标志位】(More Fragment)
位于IP数据报头的Flags字段中,具体是第2比特位,用于数据包分片时指示数据报是否还有后续分片,从而确保接收方能够正确地重组数据包。
与【DF标志位】(Don't Fragment)和一个保留位共同组成3比特的Flags控制字段。
当接收方收到一个分片时,会检查MF标志位。
如果MF=1,
表示后续还有更多的分片,接收方需要等待后续分片的到来从而进行接收。
如果MF=0,
表示当前分片是最后一个分片,以指示数据的结束,接收方可以开始将所有收到的分片进行重组,即重组数据包。
如果在分片过程中缺失了MF=0的最后一个分片,接收方可能会超时并丢弃所有已接收的分片,这会导致数据传输失败。
回到这张图,

因为问的是第2个分片,后面还有第3个分片,即后续还有分片等待接收,故该MF标志位的值=1。
故选B。
