计算机网络协议系列 - 网络层 IP 协议篇:IP 报文首部格式
- 1 min 计算机网络协议系列(七)
有了前面介绍的 IP 地址和路由控制基础理论,今天带大家来看下 IP 报文首部(有的地方称之为报文头)的格式,看看前面介绍的原理如何落实到具体的数据结构上。
我们整个网络协议分享还是以 IPv4 为主,所以我们主要来看下 IPv4 报文首部的格式。
通过 IP 协议进行网络通信时,需要在数据前面加上 IP 首部信息(有的地方称之为 IP 头,一个意思),IP 首部中包含着基于 IP 协议进行发包控制时所有的必要信息:
下面我们看具体看下每个字段表示的含义:
- 版本:用于标识 IP 首部的版本号,IPv4 的版本号即4,关于 IP 首部的版本信息可以参考这里:https://www.iana.org/assignments/version-numbers/version-numbers.xhtml。
- 首部长度:IP首部的大小,单位为4字节。
- 区分服务(TOS):用来表示服务质量,IP 协议本身是一种尽力服务的协议,无法保证通信质量,但是近年来随着音视频服务对实时性要求的提高,在使用 IP 通信过程当中保证服务质量的技术也有了蓬勃发展。DSCP 字段用于在通过 DiffServ 控制网络质量的时候设置包的优先级;ECN 则主要用于网络通信中的显式拥塞通知。
- 总长度:IP首部与数据部分结合起来的总字节数,最大长度是65535。
- 标识:用于 IP 包分片重组,不同分片标识值不同。
- 标志:表示包被分片的相关信息。
- 片偏移:用来标识被分片的每一个分段相对于原始数据的位置。以上三个字段用于 IP 包的分片与重组。
- 生存时间:最初设计为网络包的有效时间,实际用于可以中转多少个路由器,每经过一个路由器,TTL值减1,直到为0则丢弃该包。
- 协议:标识 IP 首部的上一层首部隶属于哪个协议,比如 TCP 或 UDP,具体支持的协议信息请参考这里:https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml。
- 首部校验和:只校验数据报的首部,不校验数据部分,主要用来确保 IP 数据报不被破坏。
- 源地址:发送端 IP 地址。
- 目标地址:接收端 IP 地址。
- 可选项:通常在实验或诊断时才使用。
- 填充:在有可选项的情况下,首部长度可能不是32位的整数倍,通过向该字段填充0,将其调整为32位整数倍,以方便计算机进行处理。
- 数据:传输的具体数据(并不是首部的一部分)。
感兴趣的话,可以试试通过 WireShark 对网络请求进行抓包,就可以看到对应的 IP 首部信息了:
可以看到,和我们上面介绍的 IP 头格式完全一致,只是没有可选字段和填充项。
在实际通信中,仅凭 IP 协议还不够,还要借助众多支持 IP 协议的相关技术才能更好地实现最终通信。下一篇开始我们将就 IP 协议的相关技术展开讨论。