IPv6
- 引言
- IPv6 地址表示
- IPv6 地址类型
- 地址范围详解
- 多播地址结构
- IPv6 与 IPv4 的主要区别
- IPv6 首部格式
- 扩展首部
- IPv6 地址配置方式
- 无状态地址自动配置(SLAAC)
- 有状态配置(DHCPv6)
- 手动配置
- 邻居发现协议(NDP)
- IPv6 安全特性
- 原生 IPSec 支持
- 安全邻居发现(SEND)
- 常见安全威胁与防护
- DNSv6(DNS over IPv6)
- DNSv6 的核心概念
- AAAA 记录详解
- DNSv6 的传输机制
- DNSv6 的配置方式
- 通过 SLAAC 获取 DNS 服务器
- 通过 DHCPv6 获取 DNS 服务器
- 手动配置
- DNS64 与 NAT64 的配合
引言
随着互联网的飞速发展,IPv4 地址已经于 2019 年正式耗尽。为了解决地址枯竭问题,IETF 设计了下一代互联网协议——IPv6(Internet Protocol version 6)。IPv6 将地址长度从 32 位扩展到128 位,理论上可提供约 3.4×10³⁸ 个地址,足以满足未来物联网、移动设备等海量设备的接入需求。
IPv6 不仅解决了地址数量问题,还在安全性、自动配置、路由效率、移动性支持等方面做出了根本性改进,是未来网络基础设施的核心协议。
IPv6 地址表示
IPv6 地址是一个 128 位的二进制数,通常采用冒号十六进制表示法,将 128 位分成 8 组,每组 16 位,用十六进制表示,组之间用冒号分隔。
完整格式示例:
2001:0DB8:0000:0000:0000:FF00:0042:8329简化规则:
- 省略前导零:每组中的前导 0 可以省略。例如
0042可简写为42。 - 双冒号压缩:连续的零组可以用
::代替,但一个地址中只能使用一次::。
简化后示例:
2001:DB8::FF00:42:8329特殊地址:
::1—— 环回地址(相当于 IPv4 的127.0.0.1)::—— 未指定地址(相当于 IPv4 的0.0.0.0)
IPv6 地址的文本表示规范(RFC 5952):推荐全小写十六进制字母、尽可能压缩、双冒号优先压缩最长的零组。例如2001:db8::1是标准写法。
IPv6 地址类型
IPv6 取消了广播地址,引入了三种新的地址类型:
| 地址类型 | 前缀 | 说明 |
|---|---|---|
| 单播地址 | — | 标识单个接口,发往该地址的数据包只被该接口接收 |
| ├ 全局单播地址 | 2000::/3 | 相当于 IPv4 的公网地址,可在全球范围内路由 |
| ├ 链路本地地址 | FE80::/10 | 自动配置,仅在同一链路内通信,不可路由 |
| └ 唯一本地地址 | FC00::/7 | 相当于 IPv4 的私有地址,用于内部网络 |
| 多播地址 | FF00::/8 | 一对多通信,替代了 IPv4 的广播功能 |
| 任播地址 | — | 一对最近通信,数据包被发送到一组接口中最近的一个 |
地址范围详解
- 全局单播地址(2000::/3):由全球路由前缀(48位)、子网ID(16位)和接口标识符(64位)组成。IANA 分配给各 RIR(如 APNIC、ARIN),再由 RIR 分配给 ISP 和企业。
- 链路本地地址(FE80::/10):每个 IPv6 接口自动生成,用于邻居发现协议(NDP)、路由协议(如 OSPFv3)等本地通信,无需手动配置。
- 唯一本地地址(FC00::/7):类似 IPv4 的私有地址(10.0.0.0/8、192.168.0.0/16),但具有全局唯一性,通过伪随机算法生成,避免地址冲突。
多播地址结构
多播地址格式为FF+ 标志位(4位)+ 范围域(4位)+ 组ID(112位)。常见范围域值:
1— 节点本地2— 链路本地5— 站点本地8— 组织本地E— 全局
常用多播地址:
FF02::1— 所有节点(链路本地)FF02::2— 所有路由器(链路本地)FF02::1:FFxx:xxxx— 请求节点多播地址(用于重复地址检测)
IPv6 与 IPv4 的主要区别
| 对比项 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位 | 128 位 |
| 地址数量 | 约 43 亿 | 约 3.4×10³⁸ |
| 地址表示 | 点分十进制 | 冒号十六进制 |
| 首部长度 | 可变(20~60 字节) | 固定 40 字节 |
| 校验和 | 有 | 无(依赖上层和链路层校验) |
| 分片 | 路由器可进行分片 | 仅源主机分片(路径 MTU 发现) |
| 广播 | 支持 | 取消,由多播替代 |
| NAT | 广泛使用 | 设计上无需 NAT |
| 安全性 | 可选(IPSec) | 原生支持 IPSec |
| 自动配置 | DHCP | 无状态地址自动配置(SLAAC) |
| 移动性 | 支持有限 | 原生支持(MIPv6) |
| QoS | 服务类型字段 | 流量类型 + 流标签 |
IPv6 首部格式
IPv6 的首部固定为40 字节,相比 IPv4 简化了许多,去掉了校验和、选项字段等,提高了路由器转发效率。
| 字段 | 位数 | 说明 |
|---|---|---|
| 版本 | 4位 | 固定为 6 |
| 流量类型 | 8位 | 类似于 IPv4 的服务类型,用于 QoS |
| 流标签 | 20位 | 用于标识同一数据流,便于路由器处理 |
| 有效载荷长度 | 16位 | 标识数据部分的长度(不含首部) |
| 下一个首部 | 8位 | 标识扩展首部或上层协议类型(相当于 IPv4 的协议字段) |
| 跳数限制 | 8位 | 相当于 IPv4 的 TTL,每经过一个路由器减 1 |
| 源地址 | 128位 | 发送方 IPv6 地址 |
| 目的地址 | 128位 | 接收方 IPv6 地址 |
扩展首部
IPv6 通过扩展首部实现选项功能,只有需要时才添加,提高了处理效率。常见的扩展首部包括:
| 下一个首部值 | 扩展首部类型 | 说明 |
|---|---|---|
| 0 | 逐跳选项首部 | 每跳路由器都必须处理,用于巨型载荷、路由器告警等 |
| 43 | 路由首部 | 指定数据包经过的中间节点,类似 IPv4 的松散源路由 |
| 44 | 分片首部 | 源主机对数据包进行分片,路由器不再参与分片 |
| 50 | 封装安全载荷(ESP) | IPSec 加密和认证 |
| 51 | 认证首部(AH) | IPSec 数据完整性认证 |
| 60 | 目的选项首部 | 仅目的节点处理 |
扩展首部按固定顺序链式排列,每个首部的"下一个首部"字段指向下一个扩展首部或上层协议。
IPv6 地址配置方式
无状态地址自动配置(SLAAC)
SLAAC 是 IPv6 的核心特性之一,设备无需 DHCP 服务器即可自动获取地址。流程如下:
- 设备生成链路本地地址(FE80::/10 + 接口标识符)
- 通过邻居请求(NS)进行重复地址检测(DAD)
- 发送路由器请求(RS),等待路由器通告(RA)
- 路由器回复 RA,包含前缀、前缀长度、默认网关等信息
- 设备根据前缀 + 接口标识符生成全局单播地址
有状态配置(DHCPv6)
DHCPv6 提供更精细的地址和参数管理,分为两种模式:
- 有状态 DHCPv6:服务器分配地址和其他配置参数
- 无状态 DHCPv6:地址通过 SLAAC 获取,其他参数(如 DNS 服务器)通过 DHCPv6 获取
手动配置
管理员手动指定 IPv6 地址、前缀长度、默认网关等参数,适用于服务器、网络设备等固定场景。
邻居发现协议(NDP)
NDP 是 IPv6 的核心协议,替代了 IPv4 的 ARP、ICMP 重定向、路由器发现等功能。主要功能包括:
| 功能 | 对应 IPv4 机制 | 说明 |
|---|---|---|
| 地址解析 | ARP | 通过邻居请求(NS)/邻居通告(NA)获取链路层地址 |
| 重复地址检测 | 无 | 使用 NS 检测地址是否已被占用 |
| 路由器发现 | ICMP 路由器发现 | 通过 RS/RA 发现本地路由器 |
| 前缀发现 | DHCP | 获取网络前缀信息 |
| 重定向 | ICMP 重定向 | 通知主机更优的下一跳 |
| 无状态自动配置 | DHCP | 自动生成 IPv6 地址 |
NDP 使用 ICMPv6 类型 133~137 的消息,相比 ARP 广播更高效、更安全。
IPv6 安全特性
原生 IPSec 支持
IPv6 设计时原生集成了 IPSec,提供:
- 认证首部(AH):数据完整性验证和源认证
- 封装安全载荷(ESP):数据加密和可选认证
- 安全关联(SA):通信双方的安全策略协商
安全邻居发现(SEND)
使用加密生成地址(CGA)和资源公钥基础设施(RPKI)保护 NDP 过程,防止地址欺骗、重定向攻击等。
常见安全威胁与防护
| 威胁类型 | 描述 | 防护措施 |
|---|---|---|
| 邻居欺骗 | 伪造 NA/NS 消息 | 启用 SEND、RA Guard |
| 路由欺骗 | 伪造 RA 消息 | 启用 RA Guard、源地址验证 |
| 分片攻击 | 利用分片首部绕过防火墙 | 限制分片数量、状态检测 |
| 隐私泄露 | 基于 MAC 的接口标识符可追踪 | 启用隐私扩展(RFC 4941) |
DNSv6(DNS over IPv6)
DNS(域名系统)是互联网的核心基础设施,负责将域名解析为 IP 地址。在 IPv6 环境下,DNS 也进行了相应的扩展和优化,形成了DNSv6体系。
DNSv6 的核心概念
DNSv6 并非一个全新的协议,而是 DNS 协议在 IPv6 网络中的适配与增强。其核心变化包括:
- AAAA 记录:IPv6 的域名解析记录类型,相当于 IPv4 的 A 记录,用于将域名映射到 IPv6 地址。
- 反向解析(PTR 记录):IPv6 反向解析使用
ip6.arpa域,将 IPv6 地址反向解析为域名。例如地址2001:db8::1的反向查询域名为1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa。 - 传输层支持:DNS 查询和响应可以基于 IPv6 传输,即 DNS 客户端和服务器之间通过 IPv6 网络通信。
AAAA 记录详解
AAAA 记录(Quad-A 记录)是 DNSv6 中最常用的资源记录类型,其格式如下:
example.com. 3600 IN AAAA 2001:db8:1234::1| 字段 | 说明 |
|---|---|
| 域名 | 要解析的域名 |
| TTL | 缓存时间(秒) |
| 类 | 固定为 IN(Internet) |
| 类型 | AAAA |
| IPv6 地址 | 目标 IPv6 地址 |
示例:查询www.google.com的 AAAA 记录
$digAAAA www.google.com;<<>>DiG9.18.28<<>>AAAA www.google.com;;ANSWER SECTION: www.google.com.300IN AAAA2404:6800:4005:80c::2004DNSv6 的传输机制
DNS 查询可以通过 IPv4 或 IPv6 传输,两者独立工作:
- IPv4 DNS 查询:客户端向 IPv4 DNS 服务器(如
8.8.8.8)发送查询,获取 A 或 AAAA 记录。 - IPv6 DNS 查询:客户端向 IPv6 DNS 服务器(如
2001:4860:4860::8888)发送查询,获取 A 或 AAAA 记录。
典型 DNSv6 服务器地址:
| 服务商 | IPv6 DNS 地址 |
|---|---|
| Google Public DNS | 2001:4860:4860::8888/2001:4860:4860::8844 |
| Cloudflare | 2606:4700:4700::1111/2606:4700:4700::1001 |
| Quad9 | 2620:fe::fe/2620:fe::9 |
| 阿里云 DNS | 2400:3200::1/2400:3200:baba::1 |
| 114DNS | 114.114.114.114(IPv4 兼容,IPv6 需额外配置) |
DNSv6 的配置方式
通过 SLAAC 获取 DNS 服务器
传统 SLAAC 不提供 DNS 服务器信息,但RFC 8106(RA 选项中的 DNS 配置)扩展了路由器通告(RA)消息,使其可以携带 DNS 服务器地址(RDNSS 选项)和 DNS 搜索域(DNSSL 选项)。
Router Advertisement (RA) ├── Prefix Information Option (PIO) ├── MTU Option └── RDNSS Option ← 新增,携带 DNS 服务器地址 └── DNS Server: 2001:4860:4860::8888通过 DHCPv6 获取 DNS 服务器
DHCPv6 的无状态模式专门用于分发 DNS 服务器地址和其他配置参数,而不分配 IP 地址。客户端通过 SLAAC 获取地址后,再通过 DHCPv6 获取 DNS 信息。
# Linux 客户端通过 DHCPv6 获取 DNS 服务器$ dhclient-6-Peth0# 或使用 NetworkManager 自动处理手动配置
在操作系统或网络设备上手动指定 IPv6 DNS 服务器地址。
Linux 示例(/etc/resolv.conf):
nameserver 2001:4860:4860::8888 nameserver 2606:4700:4700::1111Windows 示例(PowerShell):
Set-DnsClientServerAddress-InterfaceAlias"以太网"-ServerAddresses("2001:4860:4860::8888","2606:4700:4700::1111")DNS64 与 NAT64 的配合
DNS64 是 IPv6 过渡技术的重要组成部分,与 NAT64 配合使用,使 IPv6-only 主机能够访问 IPv4-only 资源。
工作原理:
- IPv6-only 客户端向 DNS64 服务器发起 AAAA 记录查询
- 如果目标域名存在 AAAA 记录,直接返回
- 如果目标域名只有 A 记录,DNS64 服务器将 A 记录中的 IPv4 地址合成到 IPv6 地址前缀中(通常为
64:ff9b::/96),生成合成的 AAAA 记录返回 - 客户端向合成的 IPv6 地址发起连接,NAT64 网关将其转换为 IPv4 连接
示例:
客户端查询 www.example.com 的 AAAA 记录 → DNS64 发现只有 A 记录(93.184.216.34) → 合成 AAAA 记录:64:ff9b::5db8:d822 → 客户端向 64:ff9b::5db8:d822 发起连接 → NAT64 网关转换为对 93.184.216.34 的 IPv4 连接