IP数据包在通信中是非常重要的,为了加深对IP数据包格式的理解,今天来看看IP数据包究竟包含哪些字段,这些字段起到什么作用。
来先看看IP包长啥样子的,请看下图
从上图可看到IP包的包头是20个字节。看看IP包头包含哪些信息
版本:占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字节的倍数
,