一、IP首部
- 版本字段:IPv4 0x04
- 报头长度字段:普通IP数据报(没有任何选项),该字段是5。即,20bytes
- 服务类型字段:
- 总长度字段:整个数据报的长度
- 标志字段:标识主机发送的每一份数据报,通常每发一份报文,值加1
- 段偏移字段:若一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置
- 生存期:设置数据报最多可以经过的路由器数。
- 协议字段:指明IP层所封装的上层协议类型(ICMP(1)、IGMP(2)、TCP(6)、UDP(17)等)
- 头部校验和字段:对头部中每个16比特进行二级制反码求和;
IP分片依靠标志字段和段偏移字段;
抓包分析举例:
二、IP分片
IP首部内有三个字段实现分片和重装:
- 标识字段
- 标志字段
- 偏移字段
1. 标识字段
- 对于发送的每份IP数据报,标识字段都包含一个唯一的值。该值在数据报分片时被复制到每个片中;
- 标志字段用其中1 bit表示“更多的片”;
- 除最后一片外,其他每一个组成数据报的片都要把该比特置1;
2. 标志字段
标志字段由三个1bit标志组成:
- 比特0是保留的,必须为0;
- 比特1是“不分片”(DF)标志;
- 比特2是“更多分片”(MF)标志;
即:
DF=0表示可以分片,DF=1表示不可以分片;
MF=0表示后面没有分片,MF=1表示后面有分片;
3. 片偏移字段
- 该片偏移原始数据报开始处的位置;
- 当数据报被分片后,每个片的总长度值要改为该片的长度值;
举例:
一个长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)