跳到主要内容

5. Source Address Selection (源地址选择)

5. Source Address Selection (源地址选择)

源地址选择算法产生单个源地址作为输出, 用于给定的目标地址。此算法仅适用于 IPv6 目标地址, 不适用于 IPv4 地址。

该算法在此处根据一组成对比较规则进行指定, 这些规则 (对于给定的目标地址 D) 在候选集 CandidateSource(D) 中的地址上施加了 "大于" 排序。算法完成后列表前面的地址就是算法选择的地址。

请注意, 从概念上讲, 正在执行候选集的排序, 其中一组规则定义了地址之间的排序。但是, 由于算法的输出是单个源地址, 因此实现实际上不需要对集合进行排序; 它只需要识别最终位于排序列表前面的 "最大" 值。

候选集中地址的排序由八个成对比较规则列表定义, 每个规则在两个源地址之间 (相对于彼此和该规则) 放置 "大于", "小于" 或 "等于" 排序。在给定规则产生平局的情况下, 即为两个地址提供 "等于" 结果, 则必须应用剩余的规则 (按顺序) 仅对平局的那些地址以打破平局。请注意, 如果一个规则产生单个明确的 "胜者" (或在平局的情况下的一组 "胜者"), 则不在获胜集合中的那些地址可以从进一步考虑中丢弃, 后续规则仅应用于剩余的地址。如果八个规则无法选择单个地址, 则平局打破器是实现特定的。

当比较候选集中的两个地址 SA 和 SB 时, 我们说 "prefer SA (偏好 SA)" 表示 SA "大于" SB, 类似地, 我们说 "prefer SB (偏好 SB)" 表示 SA "小于" SB。如果都没有被说明为偏好, 这意味着 SA "等于" SB, 并且剩余的规则适用如上所述。

Rule 1: Prefer same address (偏好相同地址). 如果 SA = D, 则偏好 SA。类似地, 如果 SB = D, 则偏好 SB。

Rule 2: Prefer appropriate scope (偏好适当的范围). 如果 Scope(SA) < Scope(SB): 如果 Scope(SA) < Scope(D), 则偏好 SB, 否则偏好 SA。类似地, 如果 Scope(SB) < Scope(SA): 如果 Scope(SB) < Scope(D), 则偏好 SA, 否则偏好 SB。

讨论: 此规则必须被赋予高优先级, 因为它会影响互操作性。

Rule 3: Avoid deprecated addresses (避免弃用地址). 如果两个源地址之一是 "preferred (首选)" 而另一个是 "deprecated (弃用)" (在 RFC 4862 意义上), 则偏好 "preferred" 的那个。

Rule 4: Prefer home addresses (偏好归属地址). 如果 SA 同时是归属地址和转交地址而 SB 不是, 则偏好 SA。类似地, 如果 SB 同时是归属地址和转交地址而 SA 不是, 则偏好 SB。如果 SA 只是归属地址而 SB 只是转交地址, 则偏好 SA。类似地, 如果 SB 只是归属地址而 SA 只是转交地址, 则偏好 SB。

支持归属地址的实现必须提供一种机制, 允许应用程序反转此偏好的意义, 并偏好转交地址而非归属地址 (例如, 通过适当的 API 扩展, 如 [RFC5014])。使用该机制必须只影响调用应用程序的选择规则。

Rule 5: Prefer outgoing interface (偏好出站接口). 如果 SA 被分配给将用于发送到 D 的接口而 SB 被分配给不同的接口, 则偏好 SA。类似地, 如果 SB 被分配给将用于发送到 D 的接口而 SA 被分配给不同的接口, 则偏好 SB。

Rule 5.5: Prefer addresses in a prefix advertised by the next-hop (偏好由下一跳通告的前缀中的地址). 如果 SA 或 SA 的前缀是由将用于发送到 D 的所选下一跳分配的, 而 SB 或 SB 的前缀是由不同的下一跳分配的, 则偏好 SA。类似地, 如果 SB 或 SB 的前缀是由将用于发送到 D 的下一跳分配的, 而 SA 或 SA 的前缀是由不同的下一跳分配的, 则偏好 SB。

讨论: IPv6 实现不需要记住哪些下一跳通告了哪些前缀。[RFC4861] 的第 5 节和 [RFC4191] 的第 3 节中的 IPv6 主机概念模型没有这样的要求。因此, 规则 5.5 仅适用于跟踪此信息的实现。

Rule 6: Prefer matching label (偏好匹配标签). 如果 Label(SA) = Label(D) 且 Label(SB) <> Label(D), 则偏好 SA。类似地, 如果 Label(SB) = Label(D) 且 Label(SA) <> Label(D), 则偏好 SB。

Rule 7: Prefer temporary addresses (偏好临时地址). 如果 SA 是临时地址而 SB 是公共地址, 则偏好 SA。类似地, 如果 SB 是临时地址而 SA 是公共地址, 则偏好 SB。

实现必须提供一种机制, 允许应用程序反转此偏好的意义, 并偏好公共地址而非临时地址 (例如, 通过适当的 API 扩展, 如 [RFC5014])。使用该机制必须只影响调用应用程序的选择规则。此默认设置旨在解决 [RFC4941] 中讨论的隐私问题, 但由于临时地址的相对较短的生命周期或由于临时地址的反向查找失败或返回随机化名称的可能性而引入了应用程序可能失败的风险。对于应用程序兼容性考虑超过这些隐私关注的实现, 可以反转此规则的意义, 默认情况下偏好公共地址而非临时地址。如果实现支持临时地址, 则应该有一个管理选项 (隐私偏好标志) 来更改此偏好。如果没有这样的选项, 则必须有一个管理选项来禁用临时地址。

Rule 8: Use longest matching prefix (使用最长匹配前缀). 如果 CommonPrefixLen(SA, D) > CommonPrefixLen(SB, D), 则偏好 SA。类似地, 如果 CommonPrefixLen(SB, D) > CommonPrefixLen(SA, D), 则偏好 SB。

如果实现有其他方式在源地址之间进行选择, 则规则 8 可以被取代。例如, 如果实现以某种方式知道哪个源地址将产生 "最佳" 通信性能。