IPv6 头部是干什么的
IPv6 基本头固定 40 字节,字段比 IPv4 更少更规整:版本、流量类别、流标签、载荷长度、下一头部、跳限,加上各 128 位的源与目的地址。IPv4 里的选项、分片、首部校验和都被移除或改写:校验和交给上下层,分片只允许发送方做,路由器一律不分片。可变功能改由扩展头链表达。
基本信息
| 固定长度 | 40 字节,不含扩展头 |
|---|---|
| 地址长度 | 源与目的各 128 位 |
| 下一头部 | 8 位,指出上层协议或下一个扩展头 |
| 跳限 | 8 位,每经过一个路由器减 1,为 0 即丢弃 |
| 校验和 | 已移除,完整性靠 TCP/UDP 或 AEAD 保证 |
| 分片 | 仅发送方可分片,路由器遇到过大的包回 ICMPv6 包太大 |
典型使用场景
- 抓包排障:理解扩展头链,才知道 Next Header 要一层层展开
- MTU 与分片问题定位:路由器不分片是「能 ping 不能传」的常见根因
- 防火墙策略:明确哪些扩展头被放行或被丢弃
- 安全评估:超长扩展头链属于历史攻击面之一
- IPv6 迁移方案:对比 v4/v6 头结构,理解地址耗尽问题的解决路径
观察头部与扩展头
观察头部与扩展头
# 抓 3 个 IPv6 包并展开头部细节
tcpdump -nn -vv 'ip6' -c 3
# 查看本机 IPv6 地址与路由
ip -6 addr show
ip -6 route show | head
# 在 Wireshark 中展开 Internet Protocol Version 6 再逐层看 Next Header基本头字段
| 字段 | 长度 | 作用 |
|---|---|---|
| 版本/流量类别/流标签 | 4+8+20 位 | 版本号、QoS 差分、流标识 |
| 载荷长度 | 16 位 | 不含基本头,仅指负载字节数 |
| 下一头部 | 8 位 | 上层协议号,或指向扩展头 |
| 跳限 | 8 位 | 每跳减 1,为 0 时丢弃并发 ICMPv6 超时 |
| 源与目的地址 | 各 128 位 | 寻址核心,地址空间远大于 IPv4 |
常见扩展头包括逐跳选项、路由、分片、目的选项,出现顺序在规范中有要求。抓包时若顺序异常,可怀疑中间设备改写或实现有缺陷。
部分网络设备对未知扩展头直接丢弃,表现为只有特定类型的流量不通。排障时要能区分「包根本没到」与「包在扩展头处理环节被丢」。