IP分离报头与有效载荷的方法与TCP是一模一样的,当IP从底层获取到一个报文后,虽然IP不知道报头的具体长度,但IP报文的前20个字节是IP的基本报头,并且这20字节当中涵盖4位首部长度。
因此IP是这样分离报头与有效载荷的:
当IP从底层获取到一个报文后,首先读取报文的前20个字节,并从中提取出4位的首部长度,此时便获得了IP报头的大小s i z e sizesize。
如果s i z e sizesize的值大于20字节,则需要继续从报文当中读取s i z e − 20 size-20size−20字节的数据,这部分数据就是IP报头当中的选项字段。
读取完IP的基本报头和选项字段后,剩下的就是有效载荷了。
IP就是通过这种“定长报头+自描述字段”的方式进行报头和有效载荷的分离的。但需要注意的是,IP报头当中的4位首部长度描述的基本单位与TCP报头当中的4位首部长度一样,都是以4字节为单位进行描述的,这也恰好是报文的宽度。
4位二进制的取值范围是0000 ~ 1111,因此IP报头的大长度为15 × 4 = 60 15\times 4=6015×4=60字节,因为基本报头的长度是20字节,所以IP报头中选项字段的长度是40字节。如果IP报头当中不携带选项字段,那么IP报头的长度就是20字节,此时报头当中的4位首部长度字段所填的值就是20 ÷ 4 = 5 20\div 4=520÷4=5,即0101。
————————————————
版权声明:本文为CSDN博主「2021dragon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chenlong_cxy/article/details/125837340