1. IPv6地址结构
IPv6 地址长度为 128 位,相对于 IPv4 的 32 位地址,提供了 个地址空间,从根本上解决了地址枯竭问题。在标准表示法中,128 位地址被划分为八个 16 位的字段,每个字段以四个十六进制数字表示,字段之间使用冒号(:
)分隔。这种格式使得 128 位地址以 32 个十六进制数字的形式呈现。
与 IPv4 的传统表示不同,IPv6 沿用了无类别域间路由(CIDR)的表示方法,即地址后跟斜杠和前缀长度,格式为ipv6-address/prefix-length
。在 IPv6 中,不存在类似 IPv4 中 255.255.x.x
的点分十进制子网掩码表示。
地址压缩规则与规范化(RF 5952)
IPv6 地址长度巨大,为了提高可读性和实用性,RFC 5952 定义了标准的地址压缩规则。这些规则旨在在不损失信息的前提下,最大程度地缩短地址的文本表示。
(a) 前导零抑制 (Leading Zero Compression)
前导零抑制规则允许在每个 16 位字段(Hextet)内省略所有前导零。例如,0123
可被压缩为 123
,0012
压缩为 12
,而 0001
压缩为 1
。如果一个字段的所有四位都是零 (0000
),在不使用双冒号替换的情况下,仍必须保留一个零来表示该字段。此规则仅适用于前导零,字段内的尾随零(例如1000
)不能被省略。
(b) 零块压缩 (Zero Block Compression)
零块压缩规则是 IPv6 缩短表示法的核心。它允许将一个或多个连续的、全零的 16 位字段序列替换为双冒号(::
)符号。
这项规则存在一个至关重要的限制:双冒号 (::
) 在一个完整的 IPv6 地址中只能使用一次。因为如果允许在一个地址中使用两次双冒号,系统将无法确定每个双冒号各自代表了多少个全零字段,从而无法准确地重建原始的 128 位地址,导致地址解析出现歧义。例如,地址A::B::C
无法确定总共缺少多少个字段。为了确保地址表示的规范形式,当地址中存在多个连续的零字段序列时,::
必须用于替换最长的零字段序列。如果存在两个或更多长度相等的零字段序列,则标准规定应替换最左边(靠前)的序列。这种严格的规范化要求确保了地址表示的确定性,这对于网络设备进行日志记录、路由查找和互操作性至关重要。
2. IPv6地址分类
单播地址
单播地址是网络层标识符,用于标识一个启用了 IPv6 的节点上的单个接口。发送到单播地址的数据包将仅递送到配置了该地址的目标接口。典型的单播地址结构由两个逻辑部分组成:前 64 位为网络前缀(用于全球路由),后 64 位为接口标识符(IID,用于标识主机接口)。
多播地址
多播地址标识一组接口的集合,这些接口可能属于不同的 IPv6 节点。发送到多播地址的数据包将被递送到所有由该地址标识的接口。所有多播地址均通过其高阶 8 位的值来区分,即所有多播地址都以十六进制FF 开头),属于 FF00::/8
空间。
多播地址只能作为数据包的目的地址;一个多播地址绝对不能作为数据包的源地址。
任意播地址 (Anycast)
任意播地址是 IPv6 引入的新特性之一,它标识一组接口的集合,这些接口可能位于地理上分散的不同节点上。当数据包发送到任意播地址时,路由协议会确保数据包被递送到距离最近的那个接口。这使得任意播成为实现服务冗余、负载均衡和地理分散的关键工具(例如 DNS 根服务器)。任意播地址在格式上没有特定的保留前缀,它们使用标准的单播地址格式。当一个单播地址被分配给多个设备并在路由协议中宣告时,它便具有了任意播的功能。
不再使用广播地址
IPv6 架构中不再使用广播地址,IPv4 的广播流量必须被本地子网上的所有设备处理,消耗了所有节点的资源。在 IPv6 中,局域网内的广播功能被链路本地多播(例如邻居发现协议 NDP 使用的地址)所取代。这种转变确保了只有加入特定多播组的节点才会处理流量,实现了网络资源的优化利用,是 IPv6 高可扩展性的基础。
3. 单播地址及特殊用途地址
全球单播地址 (Global Unicast Addresses, GUA)
GUA 是在互联网上全球可路由的地址。其结构由路由前缀、子网 ID 和接口 ID 组成。当前,IANA 和区域互联网注册机构(RIRs)主要从2000::/3
空间分配地址。
链路本地地址 (Link-Local Addresses, LLA)
链路本地地址是所有启用了 IPv6 的接口上必须配置的地址。它们仅用于本地链路上的通信(例如邻居发现协议 NDP),不可被路由器转发出本地链路。LLA 的前缀范围理论上定义为 FE80::/10
(前 10 位为 1111 1110 10
),这意味着其起始的十六进制字段可以是 fe80
、 fe90
、 fea0
或 feb0
。但在实际应用中,由于其后的 54 位通常设置为零,因此有效的操作范围被限制为FE80::/64
。
唯一本地地址 (Unique Local Addresses, ULA)
ULA 地址的功能类似于 IPv4 的 RFC 1918 私有地址空间,它们用于内部路由,但明确规定不应在公共互联网上路由。ULA 地址空间定义在FC00::/7
前缀下。
目前,只有 FD00::/8
范围被视为有效且推荐使用(其中第 8 位的 L 标志被设置为 1,表示“本地分配”)。ULA 地址结构中包含一个随机生成的 40 位全局 ID,旨在最大程度地降低在组织网络合并时可能发生的地址冲突风险 。
回环地址 (Loopback):
IPv6 仅使用一个回环地址 ::1/128
(0000:0000:0000:0000:0000:0000:0000:0001
)。回环地址用于测试本地 TCP/IP 协议栈是否正常运行,功能与 IPv4 的127.0.0.1
相同 。与 IPv4 预留整个127.0.0.0/8
范围相比,IPv6 仅分配单个地址。
任意播保留地址
任意播地址通常使用单播地址空间。但特定用途的任意播地址被保留,例如移动 IPv6 Home Agent Anycast 地址使用接口 ID 中最低有效7位的0x7e
值。
单播地址总结
地址类型 | 前缀范围 | 作用/用途 | 可路由性 | 举例 |
---|---|---|---|---|
GUA (Global Unicast Address)全局单播地址 | 2000::/3 (即 2000:0000:: – 3fff:ffff:: ) | 类似 IPv4 公网地址用于互联网通信 | 可在全球互联网路由 | 2001:db8::1 |
LLA (Link-Local Address)链路本地地址 | fe80::/10 | 必须存在每个接口自动生成只能在本链路通信(邻居发现、路由协议) | 仅在链路内有效不可路由 | fe80::1 |
ULA (Unique Local Address)唯一本地地址 | fc00::/7 (常用fd00::/8 ) | 类似 IPv4 私网地址用于站点内部通信 | 不能在全球路由可在本地组织内部使用 | fd12:3456:789a::1 |
Loopback 回环地址 | ::1/128 | 表示本机自身用于测试和本地进程通信 | 仅限本地主机 | ::1 |
Anycast 任意播地址 | 无单独前缀(来自单播地址池) | 一个地址分配给多个节点请求会路由到“最近的”节点 | 可路由 | 常见示例:2001:4860:4860::8888 (Google DNS Anycast) |
保留地址 | ::/128 (未指定地址)100::/64 (IPv6 映射 IPv4)2000::/3 外的实验段等 | 特殊用途,由 IETF 分配保留 | 视情况而定 | :: (未指定地址)、64:ff9b::/96 (NAT64) |
LLA 与 ULA 对比
特性 | LLA (Link-Local) | ULA (Unique Local) |
---|---|---|
地址前缀 | fe80::/10 | fc00::/7 (常用fdxx::/8 ) |
生成方式 | 自动生成,接口必有 | 管理员分配,类似 IPv4 私有地址 |
作用范围 | 仅限单个链路 | 整个站点或组织内 |
是否必须存在 | 是,IPv6 接口必有 | 否,按需配置 |
路由特性 | 不能跨路由 | 可跨路由,但不在公网传播 |
典型用途 | 邻居发现、路由协议、点对点通信 | 内部通信、私网互联、VPN |
4. 多播地址结构
所有多播地址均属于 FF00::/8
空间,多播地址结构如下:
字段 | 长度 (位) | 描述 |
---|---|---|
前缀 (Prefix) | 8 | 11111111 (FF),标识多播地址。 |
标志位 (Flags) | 4 | 000T 。高三位保留为零。T 标志 (Transient) 指示地址是永久分配 (T=0 ) 还是临时分配 (T=1 )。 |
作用域 (Scope) | 4 | 限制多播组的地理或拓扑范围,指导路由器转发行为。 |
组 ID (Group ID) | 112 | 标识特定多播组,在给定作用域内唯一。 |
作用域
路由器通过检查4 位的作用域 (Scope) 字段,可以立即确定数据包的最大转发边界。
Scope 值 (Hex) | Scope 名称 | 预期覆盖范围 | 转发边界 |
---|---|---|---|
1 | 接口本地 (Interface-Local) | 仅限于单个接口 | 仅主机,不可转发 |
2 | 链路本地 (Link-Local) | 仅限于本地物理链路 | 仅本地子网,不可路由 |
5 | 站点本地 (Site-Local) | 局限于站点/园区边界内 | 组织边界 |
8 | 组织本地 (Organization-Local) | 局限于组织边界内 | 跨越多个站点的组织边界 |
E | 全球作用域 (Global scope) | 全球互联网可达 | 全球互联网 |
5. 地址配置协议
IPv6 主机的地址配置主要依赖两种机制:无状态地址自动配置(SLAAC)和动态主机配置协议版本 6(DHCPv6),并通过路由器播告(RA)消息中的 M 和 O 标志位进行协调管理。
无状态地址自动配置 (SLAAC)
SLAAC 是一种简化的、无须服务器状态跟踪的配置方法。主机通过路由器播告获取网络前缀,并利用本地生成的 64 位 IID 自动配置完整的全球单播地址。这种方法部署快速、简单,并且具有高弹性。然而,SLAAC 初始版本存在一个局限性,即它未能提供 DNS 服务器地址等附加配置选项。
DHCPv6
DHCPv6 协议用于动态地为客户端分配地址和配置信息。
- 有状态 (Stateful): 在此模式下,DHCPv6 服务器负责地址的分配、租约的跟踪和管理,并解决地址冲突。这种方法为网络管理员提供了最高的控制权和可见性。
- 无状态 (Stateless): 服务器不分配或跟踪 IPv6 地址,因为地址已经通过 SLAAC 机制生成。服务器仅用于提供附加配置信息,如 DNS 服务器地址或域名。
路由器播告 (RA) 标志位 M 和 O
路由器播告消息包含 M (Managed) 和 O (Other Configuration) 两个关键标志位,用于通知客户端应采用何种地址配置模式。
M 标志 (Managed) | O 标志 (Other Config) | 配置模式 | 地址分配方法 | 配置信息 |
---|---|---|---|---|
0 | 0 | 纯 SLAAC | SLAAC | 无附加配置 |
0 | 1 | SLAAC + 无状态 DHCPv6 | SLAAC | 通过 DHCPv6 获取选项 |
1 | 0 或 1 | 有状态 DHCPv6 (完全管理) | DHCPv6 服务器分配 | DHCPv6 服务器分配 |
SLAAC 结合无状态 DHCPv6 (M=0, O=1) 的混合模式是 IPv6 架构中独有的弹性特征。它允许主机快速地通过 SLAAC 获得地址以确保网络连通性,随后再通过 DHCPv6 索取 DNS 等额外信息。这种设计降低了网络对 DHCPv6 服务器可用性的依赖,提高了系统的整体弹性。
有状态 DHCPv6 (M=1) 提供了精确的地址日志和审计能力。同时,DHCPv6 也支持更高级的功能,例如前缀委派 (Prefix Delegation),允许 ISP 或企业将 /56
或 /64
的前缀委派给下游路由器或主机用于子网络划分。