- 版本:
占4位,指IP协议版本。并且通信双方使用的版本必须一致,目前我们使用的是IPv4,IPv6也是一种版本,目前用的不多,以后会使用
- 首部长度:
占4位,表示的最大十进制数是15(注意:首部长度字段所表示的单位是32位子,一个32位字长是4字节),因此首部长度的最小值为5(即:0101),相当于5*4=20字节,最大值为15(即:1111),相当于15*4=60字节,切记当首部长度不是4的整数倍时,必须利用最后的填充字段填充
- 区分服务:
占 8位,用来获得更好的服务,一般情况下不怎么使用这个字段,只有在区分服务时使用这个字段
- 总长度:
指首部和数据之和的长度,单位为字节,总长度字段为16位,因此数据报的最大长度为2^16 - 1 = 65535
- 标识:
占16位,IP软件在存储器中维持一个计数器,每产生一个数据包,计数器加1,并将此值赋给标识字段,当数据包长度超过网络的MTU时,就要采用分片处理,分片时,这个标识字段的值就会被复制到所有的数据报切片中。最后相同的数据报标识字段的分片就会重装成为原来的数据报。
- 标志:
占3位,但目前只有两位有意义
- 标志字段中最低位记
MF
,MF=1
表示后面还有分片的数据报,MF=0
,表示这是若干数据报中的最后一个 - 中间的一位为
DF
,意思是不能分片,只有当DF=0
时才允许分片
- 片偏移:
占13位,表示相对于用户数据的起点,该片从何处开始,片偏移以8字节为偏移量,也就是说每一个分片的长度一定是8字节的整数倍
- 生存时间:
占8位,生存时间常用的字段是TTL(Time To Live),表示数据报在网络中的寿命,由发出的源站点设置,目的就是防止无法交付的数据报在因特网中无限制的兜圈子,白白消耗资源。TTL字段是以跳数限制的,每经过一个路由器,在转发之前就把跳数减为1,当TTL减为0时就会丢弃这个数据报,因为数据报在因特网中最大经过的路由器是255
- 协议:
占8位,协议字段指数据报携带的数据是使用何种协议的,以便使目的主机的IP层知道将数据部分上交给那个处理过程。
- 首部校验和:
占16位,这个字段只检验数据报的首部,不包括数据部分。这是因为数据报没经过一次路由器,都要重新计算一下首部校验和(因为,一些字段如生存时间、标志、片偏移等可能发生变化)
- 源地址和目的地址:
占32位,表示发送端和接收端的IP地址
- 可选字段:
占25位,该字段大小长度可变,从一字节到40字节不等
- 填充
占7位,前面字段加起来不是4的整数倍时,该字段填充全0补齐为4字节的倍数