Skip to content

IP

约 709 字大约 2 分钟

2026-02-27

格式

image

版本

用于标识 IP 通信协议双方的版本,版本必须一致。对于 IPV4,该字段的值必须是 4

头部长度

用于标识 IP 头部的大小,从而确定数据的偏移量,这就是头部长度 (internet header length, IHL) 头部长度的单位为[[TCP#^3549ed|32 位字]],因此可以推断出 IP 头部的最大为 60 字节,其中选项部分为 40字节

区分服务

只有在使用区分服务时,这个字段才起作用。例如:需要实时数据流的 VoIP

显示拥塞通告

允许在不丢包的同时通知对方网络拥塞的发生

全长

占 16 位,理论上最大的 IP 可以达到 65535 字节,若 IP 包的长度大于 MTU 时需要进行分片,即拆分为多个包 全长(Total Lenth)与头部长度不同,直接以字节为单位,而不是 32-bit 字,因此可表述的长度为 2161=655352^{16} - 1 = 65535 字节

标识符

占 16 位,用于唯一标识一个包的所有分片。因为分片的 IP 包不一定能够按先后顺序到达,因此需要一个标识符标定所属的 IP 包,用于相同 IP 包的重组

标志

占 3 位

  1. 保留,必须为 0
  2. 禁止分片(don’t fragmentDF),只有该位为 0 时才允许分片
  3. 更多分片(more fragmentMF),该位为 1 时表示后面还有分片,为 0 表示已经是最后一个分片

分片偏移

表示一个分片相对于原始 IP 包开头的偏移量

存活时间

(time to liveTTL),避免 IP 包因陷入路由环路而永远存在。在实际实现中设定为跳数计数器,IP 包每经过一个路由器,TTL 减一,若 TTL 为 0 将被丢弃

协议

占 8 位,表示 IP 包数据类型,表示上层协议的报文 例如

  • ICMP(尽管 ICMP 与 IP 同位于网络层但依附于 IP 数据包)
  • IGMP
  • TCP
  • UDP
  • OSPF
  • SCTP

头部校验和

占 16 位,仅对 IP 头部进行校验,所承载的数据如 TCP 和 UDP,它们的报文有自己的校验和字段 每一跳的路由收到 IP 包后都会重新计算头部的校验和并与之比对,若不一致则丢弃,而又因为每一跳的 TTL 都会减一,因此在转发前也需要重新计算并填写该字段

地址

标识发送方与接收方的地址

  • 在 IPV4 中,每一个地址块占用 32 位
  • 在 IPV6 中,每一个地址块占用 128 位 因此 IP 包中的地址块长度会根据 IP 版本进行扩展

参考

IP包结构

#review