跳到主要内容

附录 A. 多宿主主机

本附录讨论在使用 Neighbor Discovery 时, 具有多个接口的主机或连接到多个网络的主机 (multihomed hosts, 多宿主主机) 需要考虑的问题.

A.1. 概述

多宿主主机是指具有以下特征的主机:

  • 多个物理接口 (例如 Ethernet 和 Wi-Fi)
  • 单个物理接口上的多个逻辑接口
  • 连接到多个网络或子网

多宿主会给 Neighbor Discovery 带来复杂性, 尤其体现在:

  • 源地址选择
  • 路由器选择
  • 前缀管理
  • 默认路由选择

A.2. 源地址选择

当多宿主主机发送分组时, 它必须选择合适的源地址. 该选择会影响:

可达性 (Reachability): 选定的源地址必须能从目的地到达, 并且需要考虑路由策略和入口过滤.

性能 (Performance): 不同接口可能具有不同特性, 如带宽, 时延和成本.

策略 (Policy): 管理策略可能规定到某些目的地应使用哪个接口.

RFC 6724 定义了默认源地址选择算法, 该算法考虑如下因素:

  • 作用域匹配
  • 首选地址与弃用地址
  • Home address 与 care-of address (Mobile IPv6)
  • 标签匹配和策略表

A.3. 多接口上的路由器发现

多宿主主机会在多个接口上接收 Router Advertisements. 关键考虑事项包括:

按接口维护的路由器列表: 主机应该为每个接口维护独立的 Default Router Lists, 因为一个接口上的路由器可能无法从另一个接口到达.

默认路由器选择: 选择默认路由器时, 主机必须考虑:

  • 该路由器可通过哪个接口到达
  • 路由器偏好 (如果通过 RFC 4191 通告)
  • 基于本地策略的接口偏好

前缀信息: 通过 Router Advertisements 学到的前缀与接收它们的接口相关联. 除非显式配置为这样做, 否则主机不应该使用来自一个接口的地址, 通过另一个接口发送分组.

对于多宿主主机, on-link 判定会更加复杂:

  • 一个地址可能在某个接口上是 on-link, 但在另一个接口上不是
  • 主机必须跟踪哪些前缀在哪些接口上是 on-link
  • 发送分组时, 主机必须一致地选择源地址和出接口

A.5. Redirect 处理

Redirect 消息与接收它们的接口相关. 多宿主主机:

-必须将 Redirect 信息与接收该 Redirect 的接口关联 -不得将来自一个接口的 Redirect 信息应用到另一个接口的路由决策

A.6. Neighbor Unreachability Detection

Neighbor Unreachability Detection 在每个接口上独立执行. 在一个接口上不可达的邻居, 仍可能在另一个接口上可达 (如果该邻居本身也是多宿主的).

A.7. 每个接口上的多个地址

单个接口可能有多个地址:

  • Link-local address (必需)
  • 来自不同前缀的一个或多个全局地址
  • Privacy addresses (RFC 4941)
  • Temporary addresses

每个地址都有自己的 Preferred Lifetime 和 Valid Lifetime, 必须独立跟踪.

A.8. 与 Mobile IPv6 的交互

Mobile IPv6 会为多宿主主机增加额外复杂性:

  • Home address 与 care-of address 的选择
  • 当多个接口可用时的多个 care-of addresses
  • 跨接口的动态 home agent 发现

有关 Mobile IPv6 交互的详细信息, 请参阅 RFC 3775 及相关文档.

A.9. 实现建议

对于多宿主主机, 实现 应该:

  1. 维护按接口划分的状态: 为每个接口分别维护 Neighbor Caches, Destination Caches, Prefix Lists 和 Default Router Lists.

  2. 正确的源地址选择: 实现 RFC 6724 源地址选择算法.

  3. 接口选择: 当多个接口都能到达某个目的地时, 根据以下因素选择:

    • 最长匹配前缀
    • 路由器偏好
    • 本地策略 (管理员配置)
    • 接口特性
  4. 避免跨接口假设: 不要假定在一个接口上学到的信息适用于另一个接口.

  5. 处理接口状态变化: 正确处理接口启用/禁用事件, 并相应更新路由和地址信息.

  6. 监视所有接口: 处理所有活动接口上的 Router Advertisements.

A.10. 常见陷阱

陷阱 1: 使用错误的源地址 通过接口 B 发送时使用接口 A 的源地址可能导致:

  • 入口过滤丢弃分组
  • 返回流量到达错误的接口
  • 连接中断

陷阱 2: 跨接口 Redirect 将来自一个接口的 Redirect 信息应用到另一个接口上的路由决策.

陷阱 3: 单一 Default Router List 为所有接口维护一个单一的 Default Router List, 可能导致尝试通过错误接口到达路由器.

陷阱 4: 忽略接口偏好 选择路由时没有考虑接口特定的特性, 如带宽, 成本和可靠性.

A.11. 未来工作

与多宿主主机相关的潜在未来工作包括:

  • 更好的接口选择算法
  • 在接口之间共享可达性信息的机制
  • 能考虑多条路径的增强型路由器偏好
  • 与流量工程和服务质量机制集成