IP首部内有三个字段实现分片和重装:标识字段(ip_id)、标志字段(ip_off的3个高位比特)和偏移字段(ip_off的13个低位
比特)。标志字段由3个1bit标志组成。比特0是保留的必须为0,;比特1是“不分片”(DF)标志;比特2是“更多分片”(MF)标志。
Net/3中,标志和偏移字段结合起来,由ip_off访问,如下图所示:
ip_off的其他13bit指出在原始数据报内分片的位置,以8字节为单位计算。因此,除最后一个分片外,其他的分片都希望是一个
8字节倍数的数据,从而使后面的分片从8字节边界开始。下图显示了在原始数据报内的字节偏移关系,以及在分片的IP首部内
分片的偏移。
除最后一个分片外,设置了其余分片的MF比特。
ip_id唯一地标识某个特定数据报的分片。源系统用相同的源地址(ip_src)、目的地址(ip_dst)和协议(ip_p)值,作为
数据报在互联网上生命期的值,把每个数据报的ip_id设置成一个唯一的值。
1.分片
在ip_output函数(IP:网际协议章节)中,如果分组正好适合选定出接口的MTU,就在一个链路级帧中发送它。否则,必须对
分组分片,并在多个帧中将其发送,分组可以是一个完整的数据报或者它自己也是前边系统创建的分片。分片的代码主要
分三部分:
1.确定分片大小