网络层的数据报需要借助数据链路层来完运输,但是数据链路层的MTU(最大报文传输单元)有限制,一般是1500
但是网络层的数据包可不止这么大,最大有65535B这么大,因此,必然会涉及到数据包的分片技术
分片主要借助标识(16位),标志(3位|DF|MF)和片偏移(13位)三个数据来完成。
如何使用三个数据来完成数据包分片:
标识告诉接收端,是不是同一个数据包。DF=0表示可以分片,DF=1表示不可以分片 (don't flag)
MF=0表示后面没有分片,MF=1表示后面有分片(more flag)
片偏移告诉接收端这个分片在原来IP数据包的位置
看下面这个例子
一个长4000B的IP数据报,数据部分3980B,到达了一个路由,需要转发到一个MTU为1500B的链路上,这样就得分片了。分片数目是3片。每个片都是一个数据报。假设标识是777,那么数据报分片结果是
分片一:标识:777,MF=1,DF=0, 片偏移=0, 有效数据:1480B(编号0~1479)
分片二:标识:777,MF=1, DF=0, 片偏移=185,185*8=1480 有效数据:1480B(编号1480~2959)
分片三:标识:777,MF=0, DF=0, 片偏移=370, 370*8=2960 有效数据:1020B(编号2960~3979)