跳到主要内容

4. 协议概览 (Protocol Overview)

本节概述接口执行自动配置时通常发生的步骤. 自动配置只在支持多播的链路上执行, 并在支持多播的接口被启用时开始, 例如系统启动期间. 节点 (包括主机和路由器) 通过为接口生成链路本地地址来开始自动配置过程. 链路本地地址通过将接口标识符附加到众所周知的链路本地前缀 [RFC4291] 后形成.

然而, 在链路本地地址可以分配给接口并使用之前, 节点必须尝试验证这个 "tentative" 地址尚未被链路上的其他节点使用. 具体而言, 它会发送一条 Neighbor Solicitation 消息, 将该 tentative 地址作为目标. 如果另一个节点已经在使用该地址, 它将返回一条 Neighbor Advertisement 说明这一点. 如果另一个节点也正在尝试使用同一地址, 它也会为该目标发送 Neighbor Solicitation. Neighbor Solicitation 被 (重新) 发送的确切次数以及连续 solicitation 之间的延迟时间取决于链路, 并且可以由系统管理设置.

如果节点确定其 tentative 链路本地地址并非唯一, 自动配置将停止, 并且需要手动配置该接口. 为了简化这种情况下的恢复, 管理员应该能够提供一个替代接口标识符来覆盖默认标识符, 使自动配置机制随后可以使用新的 (预期唯一的) 接口标识符来应用. 另一种方式是手动配置链路本地地址和其他地址.

一旦节点确定其 tentative 链路本地地址是唯一的, 它就会将该地址分配给接口. 此时, 节点已经与相邻节点具备 IP 层连接能力. 剩余的自动配置步骤只由主机执行; 路由器的 (自动) 配置超出本文档范围.

自动配置的下一阶段涉及获取 Router Advertisement, 或确定不存在路由器. 如果存在路由器, 它们会发送 Router Advertisement, 指明主机可以执行哪种自动配置. 注意, 即使不存在路由器, 用于地址配置的 DHCPv6 服务也仍可能可用.

路由器会周期性发送 Router Advertisement, 但连续 advertisement 之间的延迟通常会长于正在执行自动配置的主机愿意等待的时间 [RFC4861]. 为了快速获得 advertisement, 主机会向 all-routers 多播组发送一个或多个 Router Solicitation.

Router Advertisement 还包含零个或多个 Prefix Information 选项, 其中的信息供无状态地址自动配置用于生成全局地址. 需要注意, 主机可以同时使用无状态地址自动配置和 DHCPv6. Prefix Information 选项中的一个字段, 即 "autonomous address-configuration flag", 指示该选项是否适用于无状态自动配置. 如果适用, 其他选项字段会包含一个子网前缀以及 lifetime 值, 指明从该前缀创建的地址保持 preferred 和 valid 的时间.

由于路由器会周期性生成 Router Advertisement, 主机会持续收到新的 advertisement. 主机按上述方式处理每个 advertisement 中包含的信息, 并在先前收到的信息基础上添加和刷新内容.

默认情况下, 为了安全起见, 所有地址在分配给接口之前都应该测试唯一性. 对于手动获得的地址, 通过无状态地址自动配置获得的地址, 或通过 DHCPv6 获得的地址, 都应该分别执行该测试. 为了适应那些认为执行 Duplicate Address Detection 的开销超过收益的站点, 可以通过按接口配置的管理标志禁用 Duplicate Address Detection.

为了加快自动配置过程, 主机可以在等待 Router Advertisement 的同时生成其链路本地地址 (并验证其唯一性). 由于路由器可能会延迟数秒才响应 Router Solicitation, 如果这两个步骤串行执行, 完成自动配置所需的总时间可能会显著增加.

4.1 站点重新编号 (Site Renumbering)

地址租约通过提供一种机制, 使分配给主机接口的地址能够超时, 从而促进站点重新编号. 目前, TCP 等上层协议不支持在连接打开期间更改端点地址. 如果端点地址变为无效, 现有连接会中断, 到该无效地址的所有通信都会失败. 即使应用程序使用 UDP 作为传输协议, 地址通常也必须在一次数据包交换期间保持不变.

将 valid 地址划分为 preferred 和 deprecated 两类, 可以向上层表明某个 valid 地址可能很快变为无效, 并且如果该地址的 valid lifetime 在通信结束之前到期, 后续使用该地址的通信将失败. 为了避免这种情况, 上层应该使用 preferred 地址 (假定存在作用域足够的地址), 以提高该地址在通信持续期间保持 valid 的可能性. 系统管理员负责设置适当的 prefix lifetime, 以便在发生重新编号时尽量降低通信失败的影响. deprecation period 应该足够长, 使得当某个地址变为无效时, 大多数通信, 如果不是全部通信, 都已经在使用新地址.

IP 层预期会为上层 (包括应用程序) 提供一种手段, 使其能够在给定特定目的地以及可能的其他约束时选择最合适的源地址. 应用程序可以选择在开始新的通信之前自行选择源地址, 也可以不指定地址; 在后一种情况下, 上层网络层会使用 IP 层提供的机制代表应用程序选择合适的地址.

详细的地址选择规则超出本文档范围, 并在 [RFC3484] 中描述.