IP数据包在通信中是非常重要的,为了加深对IP数据包格式的理解,今天来看看IP数据包究竟包含哪些字段,这些字段起到什么作用。

来先看看IP包长啥样子的,请看下图

ip数据包的格式及含义(IP数据包的格式详解)(1)

从上图可看到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位,但目前只有两位有意义

片偏移:

占13位,表示相对于用户数据的起点,该片从何处开始,片偏移以8字节为偏移量,也就是说每一个分片的长度一定是8字节的整数倍。

生存时间:

占8位,生存时间常用的字段是TTL(Time To Live),表示数据报在网络中的寿命,由发出的源站点设置,目的就是防止无法交付的数据报在因特网中无限制的兜圈子,白白消耗资源。TTL字段是以跳数限制的,每经过一个路由器,在转发之前就把跳数减为1,当TTL减为0时就会丢弃这个数据报,因为数据报在因特网中最大经过的路由器是255

协议:

占8位,协议字段指数据报携带的数据是使用何种协议的,以便使目的主机的IP层知道将数据部分上交给那个处理过程。

ip数据包的格式及含义(IP数据包的格式详解)(2)

首部校验和:

占16位,这个字段只检验数据报的首部,不包括数据部分。这是因为数据报没经过一次路由器,都要重新计算一下首部校验和(因为,一些字段如生存时间、标志、片偏移等可能发生变化)

源地址和目的地址:

占32位,表示发送端和接收端的IP地址

可选字段:

占25位,该字段大小长度可变,从一字节到40字节不等

填充

占7位,前面字段加起来不是4的整数倍时,该字段填充全0补齐为4字节的倍数

,