Appearance
IP Packet Header
IP Packet Header 长度一般为20-60字节(Byte)。前20字节固定,后40字节可选长度不固定。
IP Packet Header 结构图
IP 头部字段详细介绍
字段名称 | 长度 (位) | 描述 |
---|---|---|
版本 (Version) | 4 | 指定 IP 协议版本,IPv4 的值为 4。 |
头部长度 (IHL) | 4 | 头部长度,以 32 位字为单位,最小值为 5 (20 字节)。 |
DS + ECN | 8 | 区分服务字段和显式拥塞通知字段,常用于 QoS 和拥塞控制。 |
总长度 (Total Length) | 16 | IP 数据包的总长度,包括头部和数据部分,单位为字节。 |
标识 (Identification) | 16 | 数据报的唯一标识符,用于分片和重组。 |
标志 (Flags) | 3 | 标志位,包括分片控制标志 (DF、MF)。 |
片偏移 (Fragment Offset) | 13 | 表示分片在原始数据报中的位置。 |
TTL (Time to Live) | 8 | 数据包生存的最大跳数,每经过一跳减 1,降为 0 时丢弃。 |
协议 (Protocol) | 8 | 指定上层协议,如 TCP (6)、UDP (17) 等。 |
头部校验和 | 16 | 检验 IP 头部数据的完整性。 |
源 IP 地址 | 32 | 数据包的源地址。 |
目的 IP 地址 | 32 | 数据包的目的地址。 |
选项 (可选) | 可变 | 可选字段,提供特殊功能(如记录路由)。 |
IP 头部关键字段介绍
1. 头部长度 (IHL Internet Header Length)
IHL (Internet Header Length,头部长度):IHL 是一个 4 位字段,表示 IPv4 头部的长度,以 32 位字为单位(1 个单位 = 4 字节)。
- 取值范围: 5(最小长度 20 字节,无选项)到 15(最大长度 60 字节,包含选项)。
- 限制说明: 由于最大长度为 60 字节,一些选项(如“记录路由”选项)难以使用。
- IPv6 差异: IPv6 没有 IHL 字段,因为 IPv6 头部固定为 40 字节。
IHL范围:5 - 15 个 32位字的数量,二进制表示 0101 - 1111。
- 最小长度:5 * 32bit = 160bit = 20byte
- 最大长度:15 * 32bit = 480bit = 60byte
DS + ECN:早期该字段叫 TOS (Type of Service),但由于未被广泛使用,后续被重新定义为 DS (Differentiated Services) 和 ECN (Explicit Congestion Notification) 两个部分,共 8 位。
- DS (区分服务字段):前 6 位称为 区分服务代码点 (DSCP, Differentiated Services Code Point),用于定义不同的数据优先级或服务等级,以支持 QoS(服务质量)机制。
- ECN (显式拥塞通知):后 2 位用于在拥塞情况下通知发送方。持续拥塞的路由器会设置该字段,常用于无损网络(如数据中心和音视频传输)来减少丢包。
DS + ECN 摘自 wireshark
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
0000 00.. = Differentiated Services Codepoint: Default (0)
.... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
标识字段:标识字段帮助标识由IPv4主机发送的数据报。为了避免将一个数据报分片和其他数据 报分片混淆,发送主机通常在每次(从它的一个IP地址)发送数据报时都将一个内部计数器 加1,并将该计数器值复制到IPv4标识字段。这个字段对实现分片很重要。
Flags: 0x00(摘自 wireshark)
- 0... .... = Reserved bit: Not set // 保留位
.0.. .... = Don't fragment: Not set // 不分片
..0. .... = More fragments: Not set // 被分片的包除最后一个均为1。