IPv4 头部结构(共 20 字节,不含可选字段)
1. 版本(Version)
长度:4 比特
作用:标识 IP 协议版本(IPv4 值为
4
,IPv6 值为6
)。示例:
0100
(表示 IPv4)。
2. 头部长度(IHL, Internet Header Length)
长度:4 比特
作用:表示 IP 头部的长度(以 4 字节为单位)。
最小值为
5
(即 20 字节,无可选字段)。最大值为
15
(即 60 字节,含可选字段)。
示例:
0101
(表示头部长度为 20 字节)。
3. 服务类型(ToS, Type of Service)
长度:8 比特
作用:定义数据包的优先级和服务质量(QoS)参数,现多用于 DSCP(差分服务代码点) 和 ECN(显式拥塞通知)。
DSCP(6 比特):区分流量类别(如语音、视频)。
ECN(2 比特):标记网络拥塞状态。
示例:
00000000
(默认无特殊服务)。
4. 总长度(Total Length)
长度:16 比特
作用:表示整个 IP 数据包的长度(头部 + 数据),单位是字节。
最大值为
65535
字节(受 MTU 限制)。
示例:
00 50
(表示包总长度为 80 字节)。
5. 标识(Identification)
长度:16 比特
作用:唯一标识一个数据包,用于分片重组。
同一数据包的所有分片共享相同的标识值。
示例:
0x1234
(随机生成的 ID)。
6. 标志(Flags)
长度:3 比特
作用:控制分片行为:
Bit 0:保留位(必须为
0
)。Bit 1(DF, Don't Fragment):
1
:禁止分片(如 ICMP 探测包)。0
:允许分片。
Bit 2(MF, More Fragments):
1
:表示后续还有分片。0
:表示最后一个分片。
示例:
010
(DF=1,禁止分片)。
7. 片偏移(Fragment Offset)
长度:13 比特
作用:指示当前分片在原始数据包中的位置(以 8 字节为单位)。
用于接收方按顺序重组分片。
示例:
0
(表示第一个分片)。
8. 生存时间(TTL, Time To Live)
长度:8 比特
作用:防止数据包无限循环,每经过一个路由器减
1
,归零时丢弃。常见初始值:
64
(Linux)或128
(Windows)。
示例:
40
(剩余跳数)。
9. 协议(Protocol)
长度:8 比特
作用:标识上层协议类型(传输层协议)。
常见值:
1
:ICMP6
:TCP17
:UDP
示例:
06
(表示 TCP)。
10. 头部校验和(Header Checksum)
长度:16 比特
作用:校验 IP 头部的完整性(不包括数据部分)。
每经过一个路由器需重新计算。
示例:
0x7a3d
(校验和计算结果)。
11. 源 IP 地址(Source Address)
长度:32 比特(4 字节)
作用:发送方的 IPv4 地址。
示例:
192.168.1.1
→C0 A8 01 01
。
12. 目标 IP 地址(Destination Address)
长度:32 比特(4 字节)
作用:接收方的 IPv4 地址。
示例:
8.8.8.8
→08 08 08 08
。
13. 可选字段(Options)
长度:可变(最多 40 字节)
作用:扩展功能(如记录路由、时间戳等),现代网络较少使用。
填充(Padding):确保头部长度是 4 字节的倍数。
关键注意事项
分片机制:
当数据包超过 MTU(如以太网默认 1500 字节)时,路由器根据
DF
标志决定是否分片。分片后,只有第一个分片包含传输层头部(如 TCP/UDP 端口号)。
校验和范围:
仅校验 IP 头部,传输层(如 TCP/UDP)有独立的校验和。
IPv6 差异:
IPv6 头部更简洁(固定 40 字节),删除了分片、校验和等字段。
示例抓包分析(Wireshark)
复制
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 8.8.8.8 0100 .... = Version: 4 .... 0101 = Header Length: 20 bytes Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) Total Length: 84 Identification: 0x1234 Flags: 0x40 (Don't Fragment) Fragment Offset: 0 Time to Live: 64 Protocol: TCP (6) Header Checksum: 0x7a3d [correct] Source Address: 192.168.1.1 Destination Address: 8.8.8.8
通过理解 IP 头部字段,可以深入分析网络流量、排查路由问题或优化 QoS 策略。