IPv6 协议详解
IPv6 的诞生背景
尽管 IPv4 经过多年发展已趋于成熟,并获得广泛的硬件支持,但仍存在若干限制:
- 地址资源枯竭:IPv4 提供约 43 亿个地址(2^32),但因早期设计缺陷及分配不均(如私有地址、组播地址等不可用于公网),加之互联网规模迅速扩张,导致全球 IPv4 地址早已耗尽。
- 路由表膨胀问题:由于历史原因,IPv4 网络地址划分缺乏统一规划,造成 BGP 路由条目数量激增,增加了核心路由器负担,影响转发性能。
为解决上述问题,IETF 制定了下一代互联网协议——IPv6(Internet Protocol Version 6),亦称 IPng(IP Next Generation)。它不仅继承了 IPv4 的基本通信机制,还引入多项优化特性。
IPv6 核心优势
- 海量地址空间:IPv6 使用 128 位地址结构,理论上可提供 2^128 个唯一地址,足以满足未来物联网和智能设备接入需求。
- 层次化路由架构:通过聚合前缀简化路由通告,降低骨干网路由开销,提升整体网络效率。
IPv6 数据包结构
+-------------------------------------------------------------+
| 版本(4) | 流类别(8) | 流标签(20) |
+---------------------+---------------------------------------+
| 有效载荷长度(16) | 下一头部(8) | 跳数限制(8) |
+---------------------+-------------+-------------------------+
| 源 IPv6 地址 (128 bits) |
+-------------------------------------------------------------+
| 目标 IPv6 地址 (128 bits) |
+-------------------------------------------------------------+
| 扩展头部(可选) |
+-------------------------------------------------------------+
| 字段名 | 大小 | 描述 |
|---|---|---|
| Version | 4 bit | 固定值 0110,区别于 IPv4 的 0100 |
| Traffic Class | 8 bit | 等价于 IPv4 中的 ToS/DSCP 字段,用于 QoS 控制 |
| Flow Label | 20 bit | 标识特定数据流,便于流量工程应用 |
| Payload Length | 16 bit | 不含基础头部的数据部分总长 |
| Next Header | 8 bit | 指示紧随其后的上层协议类型(TCP/UDP/ICMPv6 等) |
| Hop Limit | 8 bit | 类似 IPv4 TTL,每经过一个路由器减一,防止无限循环 |
| Source Address | 128 bit | 发送方 IPv6 地址,必须为单播地址 |
| Destination Address | 128 bit | 接收方地址,可为单播或组播地址 |
与 IPv4 头部对比
IPv6 对头部进行了精简,取消了如下字段:
- IHL(头部长度)
- Identification、Flags、Fragment Offset(分片相关字段)
- Header Checksum(头部校验和)
- Options(选项字段)
这些改动的原因包括:
- IPv6 基础头部固定为 40 字节,无需 IHL 字段;
- 分片操作交由扩展头部完成;
- 链路层与传输层已有冗余校验机制,IPv6 不再重复计算 checksum。
IPv6 扩展头部介绍
扩展头部位于基础头部之后,允许灵活添加额外信息而不干扰主路径转发逻辑。常见的扩展头部包括:
- Hop-by-Hop Options Header
- Destination Options Header
- Routing Header
- Fragment Header
- Authentication Header
- Encapsulating Security Payload Header
Routing Header 示例
+-------------------------------+
| Next Header | Hdr Ext Len |
+---------------+---------------+
| Routing Type | Segments Left |
+---------------+---------------+
| Reserved |
+-------------------------------+
| Address [1] |
+-------------------------------+
| Address [2] |
+-------------------------------+
| ... |
+-------------------------------+
| 字段 | 说明 |
|---|---|
| Next Header | 表明下一个扩展头或上层协议类型 |
| Hdr Ext Len | 扩展头长度(以 8 字节为单位) |
| Routing Type | 当前仅定义类型 0,表示严格路由路径 |
| Segments Left | 剩余需经过的中间节点数目 |
Routing Header 主要用于 SRv6(Segment Routing over IPv6)场景,控制数据包按预定路径穿越多个中间节点。初始目的地址指向首个中间节点,当数据包抵达后,系统会根据扩展头更新下一跳地址并递减 Segments Left 计数器,直到最终送达目标地址。