跳到主要内容

8. Implementation Considerations (实现考虑)

8. Implementation Considerations (实现考虑)

目标地址选择算法需要有关潜在源地址的信息。一种可能的实现策略是让 getaddrinfo() 使用目标地址列表调用到网络层, 在网络层中使用当前可用源地址的完整知识对列表进行排序, 并将排序后的列表返回给 getaddrinfo()。这很简单并给出最佳结果, 但它引入了另一个系统调用的开销。减少此开销的一种方法是在解析器中缓存排序后的地址列表, 以便对同一名称的后续调用不需要重新排序列表。

另一种实现策略是调用到网络层以检索源地址信息, 然后直接在 getaddrinfo() 的上下文中对地址列表进行排序。为了减少这种方法的开销, 可以缓存源地址信息, 在多次调用 getaddrinfo() 时分摊检索它的开销。在这种方法中, 实现可能不知道每个目标的出站接口, 因此在目标地址排序期间它可以使用候选集的更宽松定义。

无论如何, 如果实现在其目标地址选择实现中使用缓存的可能过时的信息, 或者如果缓存的目标地址列表的排序可能过时, 那么它必须确保返回给应用程序的目标地址排序不超过一秒钟过期。例如, 实现可能进行系统调用以检查任何可能影响这些算法的路由表条目, 源地址分配或前缀策略表条目是否已更改。另一种策略是使用失效计数器, 每当任何底层状态更改时该计数器就会递增。通过使用派生状态缓存当前失效计数器值, 然后稍后与当前值进行比较, 实现可以检测派生状态是否可能过时。