IPv4的数据报的首部格式
一、IP数据报的首部格式图
注意和TCP数据报首部格式的对比,这样也好记忆
- 两者相同的地方是:
- 固定部分都是20字节,可变部分都是最大40字节
- IPv4头部中的
首部长度
字段和TCP头部中的数据偏移
字段表达的含义一样,都是说该头部的长度,且单位都是4字节 - 都需要进行填充,将头部长度补齐为
4的倍数
个字节
二、具体的IPv4数据报头部格式详解
-
版本(4bit):指明了IP协议的版本,IPv4还是IPv6;通信双方的版本要一致
-
首部长度(4bit):指明了IP数据报头部的长度,以4字节为单位(和TCP数据报中的
数据偏移
字段类似) -
可选字段(1~40字节):可增加一些拓展功能,但很少使用,该字段的拓展直接影响了
首部长度
字段 -
填充字段:IP数据报头部的长度要求是4的整数倍,因此需要该字段填充补0,使头部满足要求
-
区分服务(1字节):一般不使用,用于提供不同等级的服务质量
-
总长度(2字节):指明了整个IP数据报的长度,以字节为单位,
首部长度
换算成字节后,总长度 - 首部长度 = 数据载荷的长度
-
标识、标志、片偏移:这三个字段共同说明了IP的分片情况
标识
:16bit,就是一个数字;属于同一个IP数据报的子分片有相同的标识;IP协议栈维持一个计数器,每产生一个数据报,就将标识值加1,然后赋值给标识字段标志
:3bit,分别是DF
、MF
、保留位
- DF:
DF=1
表示不允许分片,DF=0
表示允许分片 - MF:
MF=1
表示后边还有分片,MF=0
表示后边没有分片,这就是最后一个分片 - 保留位:暂不使用,为0
- DF:
片偏移
:13bit,以8字节为单位,这也就要求:如果要分片,只要不是最后一个IP片,其数据载荷长度都必须是8的倍数;该字段指明了分片数据报载荷部分首字节相对于其原始数据报偏移了多少字节,如第一个IP分片的数据报为原始数据载荷的0~800,那该IP分片的片偏移为0/8=0;第二个分片的片偏移就是800/8=100;
-
生存时间TTL(Time To Live)(8bit):指明了IP数据报的生存时间还有多少
- 当前是以
跳数
为单位,路由器转发IP数据报时,先将该字段减1,若不为0则转发;若为0,则表示其生存时间无了,也就是该数据包失效了,就不转发 - 主要是为了避免发生路由环路时,IP数据报在环路内永久兜圈
- 当前是以
-
协议字段(8bit):指明了IP数据包的数据载荷部分包装的是何种协议数据单元PDU,该字段是网络层与运输层之间的
接口
,通过该字段的标识,可以将IP数据报正确的交给运输层的某个协议模块处理ICMP IGMP UDP TCP IPv6 OSPF 1 2 6 17 41 89 -
首部检验和(16bit):用于在IP报的转发、发送过程中
校验IP头部
。因为IP头部是动态变化的,所以该校验和也是动态变化的。这一点与TCP的校验和不同(TCP校验的是头部和数据载荷也即整个TCP报文段
,且转发途中不会动态变化) -
源IP地址和目的IP地址(各占32bit,4字节):用于标识发送方的IP地址和接收方的IP地址,可以说是最重要的字段存在了
如果本文对您有用,可以点赞、收藏本文哦,下次用到时就好找多了
如果能关注作者就太好了,作者将持续学习,持续输出,持续分享!谢谢鼓励!