4. Candidate Source Addresses (候选源地址)
4. Candidate Source Addresses (候选源地址)
源地址选择算法使用 "候选集 (candidate set)" 的概念, 即给定目标地址的潜在源地址集合。候选集是可以用作源地址的所有地址的集合; 源地址选择算法将从该集合中选择一个地址。我们写 CandidateSource(A) 来表示地址 A 的候选集。
建议候选源地址是分配给将用于发送到目标的接口 ("出站 (outgoing)" 接口) 的单播地址集。在路由器上, 候选集可以包括分配给转发数据包的任何接口的单播地址, 但须遵守下述限制。希望支持使用分配给环回接口的全局源地址的实现必须表现得好像环回接口发起并转发数据包一样。
讨论: 邻居发现重定向机制 [RFC4861] 要求路由器在生成重定向之前验证数据包的源地址标识邻居, 因此主机选择分配给出站接口的源地址是有利的。
在某些情况下, 目标地址可能用区域索引或其他信息限定, 这将约束候选集。
对于所有多播和链路本地目标地址, 候选源地址集必须只包括分配给属于与出站接口相同链路的接口的地址。
讨论: 对多播目标地址的限制是必要的, 因为当前部署的多播转发算法使用反向路径转发 (Reverse Path Forwarding, RPF) 检查。
对于站点本地单播目标地址, 候选源地址集必须只包括分配给属于与出站接口相同站点的接口的地址。
无论如何, 多播地址和未指定地址绝对不能包含在候选集中。
在支持无状态 IP/ICMP 翻译 (Stateless IP/ICMP Translation, SIIT) [RFC6145] 的纯 IPv6 节点上, 如果目标地址是 IPv4 转换地址, 则候选集必须仅包含 IPv4 可翻译地址。
如果应用程序或上层指定源地址, 它可能会影响出站接口的选择。无论如何, 如果应用程序或上层指定的源地址不在目标的候选集中, 则网络层必须将此视为错误。如果应用程序或上层指定的源地址在目标的候选集中, 则网络层必须尊重该选择。如果应用程序或上层未指定源地址, 则网络层使用下一节中指定的源地址选择算法。