跳到主要内容

4. 地址作用域 (Address Scope)

地址作用域 (Address Scope)

除了未指定地址 (unspecified address) 外, 每个 IPv6 地址都有一个特定的作用域, 即一个拓扑范围, 在该范围内该地址可用作为接口或接口集合的唯一标识符。地址的作用域被编码为地址的一部分, 如 [1] 所指定的那样。

对于单播地址, 本文档讨论两个已定义的作用域:

  • 链路本地作用域 (Link-local scope): 用于仅在单个链路内 (即连接到单个链路的接口中) 唯一标识接口。
  • 全局作用域 (Global scope): 用于在互联网中的任何地方唯一标识接口。

IPv6 单播回环地址 ::1 被视为具有链路本地作用域, 其所在的虚拟链路是连接到虚拟"回环接口"的虚拟链路。

未指定地址 (::) 是一个特殊情况。它没有任何作用域, 因为根据 [1], 它永远不能被分配给任何节点。但是, 一个实现可能对未指定地址使用实现相关的语义, 并且可能希望允许未指定地址具有特定的作用域。例如, 实现通常使用未指定地址在 API 中表示 "any" 地址。在这种情况下, 实现可以将具有给定特定作用域的未指定地址视为代表"该作用域内的任何地址"的概念。只要限制在实现内部, 本文档不禁止这种用法。

[1] 定义了包含嵌入式 IPv4 地址的 IPv6 地址作为全局地址的一部分。因此, 这些地址具有全局作用域, 关于 IPv6 作用域地址架构。然而, 一个实现可能为了方便起见将这些地址视为具有其他作用域。例如, [6] 为 IPv4 自动配置链路本地地址 (来自前缀 169.254.0.0/16 的地址 [7]) 分配链路本地作用域, 并将这些地址转换为 IPv4 映射的 IPv6 地址 (IPv4-mapped IPv6 addresses) 以便在 IPv4 和 IPv6 地址之间执行目标地址选择。这隐含地意味着与 IPv4 自动配置链路本地地址等效的 IPv4 映射 IPv6 地址具有链路本地作用域。只要限制在实现内部, 本文档不禁止这种用法。

任播地址 (Anycast addresses) [1] 从单播地址空间中分配, 并具有与单播地址相同的作用域特性。本文档中关于单播的所有说明同样适用于任播地址。

对于多播地址, 有 14 种可能的作用域, 范围从接口本地 (interface-local) 到全局 (global) (包括链路本地)。接口本地作用域仅跨越单个接口; 接口本地作用域的多播地址仅用于单个节点内多播的回环传递; 例如, 作为计算机内进程间通信的一种形式。与单播回环地址不同, 接口本地多播地址可以被分配给任何接口。

作用域之间存在大小关系:

  • 对于单播作用域, 链路本地是比全局更小的作用域。
  • 对于多播作用域, 多播地址的 "scop" 子字段 ([1] 的第 2.7 节) 中值较小的作用域小于值较大的作用域, 接口本地是最小的, 全局是最大的。

然而, 两个不同大小的作用域可能覆盖完全相同的拓扑区域。例如, (多播) 站点可能由单个链路组成, 在这种情况下, 链路本地和站点本地作用域有效地覆盖相同的拓扑范围。