1. Introduction (简介)
1. Introduction (简介)
IPv6 寻址架构 [RFC4291] 允许将多个单播地址分配给接口。这些地址可能具有不同的可达性范围 (scope, 链路本地, 站点本地或全局)。这些地址也可能是 "preferred (首选)" 或 "deprecated (弃用)" [RFC4862]。隐私考虑引入了 "public addresses (公共地址)" 和 "temporary addresses (临时地址)" 的概念 [RFC4941]。移动架构引入了 "home addresses (归属地址)" 和 "care-of addresses (转交地址)" [RFC6275]。此外, 多宿主 (multi-homing) 情况将导致每个节点有更多地址。例如, 一个节点可能有多个接口, 其中一些是隧道或虚拟接口, 或者一个站点可能有多个 ISP 连接, 每个 ISP 一个全局前缀。
最终结果是, IPv6 实现在启动通信时将经常面临多个可能的源地址和目标地址。期望有默认算法, 在所有实现中通用, 用于选择源地址和目标地址, 以便开发人员和管理员能够推理和预测其系统的行为。
此外, 支持 IPv6 和 IPv4 的双栈或混合栈实现在启动通信时经常需要在 IPv6 和 IPv4 之间做出选择, 例如, 当 DNS 名称解析同时产生 IPv6 和 IPv4 地址, 且网络协议栈同时具有 IPv6 和 IPv4 源地址可用时。在这种情况下, 一个简单的策略, 总是偏好 IPv6 或总是偏好 IPv4, 可能会产生不良行为。作为一个例子, 假设一个 DNS 名称解析为一个全局 IPv6 地址和一个全局 IPv4 地址。如果节点已分配一个全局 IPv6 地址和一个 169.254/16 自动配置的 IPv4 地址 [RFC3927], 那么 IPv6 是通信的最佳选择。但如果节点只分配了一个链路本地 IPv6 地址和一个全局 IPv4 地址, 那么 IPv4 是通信的最佳选择。目标地址选择算法通过一个统一的程序解决了这个问题, 用于在 IPv6 和 IPv4 地址之间进行选择。
本文档中的算法被指定为一组规则, 这些规则在可用地址集合上定义了部分排序 (partial ordering)。在源地址选择的情况下, 节点通常有多个分配给其接口的地址, 第 5 节中的源地址排序规则定义了哪个地址是 "最佳" 使用的地址。在目标地址选择的情况下, DNS 可能为给定名称返回一组地址, 应用程序需要决定首先使用哪个地址以及如果第一个地址不可达, 应以何种顺序尝试其他地址。第 6 节中的目标地址排序规则, 当应用于 DNS 返回的地址集合时, 提供了这样一个推荐的排序。
本文档分别指定了源地址选择和目标地址选择, 但使用一个公共上下文, 以便这两种算法一起产生有用的结果。算法尝试选择具有适当范围和配置状态 (在 RFC 4862 意义上的 "preferred" 或 "deprecated") 的源地址和目标地址。此外, 本文档建议了一种首选方法, 即最长匹配前缀 (longest matching prefix), 用于在缺少更好信息时在其他等效地址中进行选择。
本文档还指定了策略钩子 (policy hooks), 以允许管理员覆盖默认行为。例如, 使用这些钩子, 管理员可以指定用于目标前缀的首选源前缀, 或者偏好具有一个前缀的目标地址而不是具有另一个前缀的地址。这些钩子为管理员处理某些多宿主和过渡场景提供了灵活性, 但它们当然不是万能药。
本文档中指定的选择规则绝对不能被解释为覆盖应用程序或上层对合法目标或源地址的明确选择。