5. 协议规范 (Protocol Specification)
在支持多播的接口上, 自动配置按接口逐一执行. 对于多宿主主机, 每个接口独立执行自动配置. 自动配置主要适用于主机, 但有两个例外. 路由器预期会使用下述过程生成链路本地地址. 此外, 路由器在将所有地址分配给接口之前, 会对这些地址执行重复地址检测 (Duplicate Address Detection).
5.1 节点配置变量 (Node Configuration Variables)
节点 必须 允许系统管理为每个支持多播的接口配置以下与自动配置相关的变量:
DupAddrDetectTransmits - 对暂定地址执行重复地址检测时连续发送的 Neighbor Solicitation 消息数量. 值为零表示不对暂定地址执行重复地址检测. 值为一表示只发送一次, 且不进行后续重传.
默认值: 1, 但可由链路类型特定文档中的值覆盖, 该文档涵盖与在特定链路类型上传输 IP 相关的问题, 例如 [RFC2464].
自动配置还假定存在 [RFC4861] 中定义的变量 RetransTimer. 对于自动配置而言, RetransTimer 指定重复地址检测期间连续 Neighbor Solicitation 传输之间的延迟, 如果 DupAddrDetectTransmits 大于 1, 并指定节点在发送最后一个 Neighbor Solicitation 后, 结束重复地址检测过程前等待的时间.
5.2 与自动配置相关的结构 (Autoconfiguration-Related Structures)
除形成链路本地地址和使用重复地址检测之外, 路由器如何自动配置或配置其接口不属于本文档范围.
主机维护一个地址列表及其对应生命周期. 该地址列表既包含自动配置的地址, 也包含手动配置的地址.
5.3 创建链路本地地址 (Creation of Link-Local Addresses)
只要某个接口变为启用状态, 节点就会形成一个链路本地地址. 接口可能在以下任一事件之后变为启用状态:
- 接口在系统启动时初始化.
- 接口在临时接口故障后, 或在被系统管理临时禁用后重新初始化.
- 接口首次附接到链路. 这包括因无线网络接入点变化而动态改变所附接链路的情况.
- 接口在被管理性禁用后, 由系统管理重新启用.
链路本地地址通过将众所周知且长度适当的链路本地前缀 FE80::0 [RFC4291] 与接口标识符组合形成, 如下所示:
- 地址最左侧的 "前缀长度" 位为链路本地前缀的位.
- 地址中位于链路本地前缀右侧的位全部设置为零.
- 如果接口标识符长度为 N 位, 则地址最右侧的 N 位由接口标识符替换.
如果链路本地前缀长度与 N 之和大于 128, 自动配置失败, 并且需要手动配置. 接口标识符长度在单独的链路类型特定文档中定义, 该文档也应与地址架构 [RFC4291] 保持一致, 见第 2 节. 这些文档会谨慎定义该长度, 以便链路本地地址可在该链路上自动配置.
链路本地地址具有无限的首选生命周期和有效生命周期; 它永不过期.
5.4 重复地址检测 (Duplicate Address Detection)
在将所有单播地址分配给接口之前, 必须 对其执行重复地址检测, 无论这些地址是通过无状态自动配置, DHCPv6, 还是手动配置获得, 但以下情况除外:
- 如果接口的
DupAddrDetectTransmits变量设置为零, 则该接口不执行重复地址检测. - 不得 对任播地址执行重复地址检测, 注意任播地址在语法上无法与单播地址区分.
- 每个单独的单播地址 应该 进行唯一性测试. 请注意, 已部署的一些实现只对链路本地地址执行重复地址检测, 并跳过使用与该链路本地地址相同接口标识符的全局地址测试. 虽然本文档并不否定此类实现, 但这种 "优化" 是 不推荐 的, 新实现 不得 进行这种优化.
检测重复地址的过程使用 Neighbor Solicitation 和 Advertisement 消息. 如果在该过程中发现重复地址, 则该地址不能分配给接口.
应用重复地址检测过程的地址在该过程成功完成之前称为 暂定 (tentative) 地址. 传统意义上, 暂定地址不被视为 "已分配给接口". 接口必须接受 Target Address 字段中包含该暂定地址的 Neighbor Solicitation 和 Advertisement 消息, 但处理这类数据包的方式不同于处理 Target Address 匹配已分配给接口地址的数据包. 其他发往该暂定地址的数据包应被静默丢弃.
5.4.1 消息验证 (Message Validation)
节点 必须 静默丢弃任何未通过 [RFC4861] 中规定有效性检查的 Neighbor Solicitation 或 Advertisement 消息. 通过这些有效性检查的 Neighbor Solicitation 或 Advertisement 消息分别称为有效请求或有效通告.
5.4.2 发送 Neighbor Solicitation 消息 (Sending Neighbor Solicitation Messages)
在发送 Neighbor Solicitation 之前, 接口 必须 加入全节点多播地址以及该暂定地址的请求节点多播地址.
为检查某个地址, 节点发送 DupAddrDetectTransmits 个 Neighbor Solicitation, 每次发送之间间隔 RetransTimer 毫秒. 该请求的 Target Address 设置为正在检查的地址, IP 源地址设置为未指定地址, IP 目的地址设置为目标地址的请求节点多播地址.
5.4.3 接收 Neighbor Solicitation 消息 (Receiving Neighbor Solicitation Messages)
在接口上收到有效 Neighbor Solicitation 消息时, 节点行为取决于目标地址是否为暂定地址. 如果目标地址是暂定地址, 且源地址是单播地址, 则该请求应被静默忽略. 在所有情况下, 节点 不得 响应针对暂定地址的 Neighbor Solicitation.
以下测试用于识别暂定地址不唯一的条件:
- 如果在发送针对某个暂定地址的 Neighbor Solicitation 之前收到了此类请求, 则该暂定地址是重复的.
- 如果实际收到的 Neighbor Solicitation 数量超过基于环回语义预期的数量, 则该暂定地址是重复的.
5.4.4 接收 Neighbor Advertisement 消息 (Receiving Neighbor Advertisement Messages)
在接口上收到有效 Neighbor Advertisement 消息时, 节点行为取决于目标地址是否为暂定地址, 或是否匹配已分配给该接口的单播或任播地址:
- 如果目标地址是暂定地址, 则该暂定地址不是唯一的.
- 如果目标地址匹配已分配给接收接口的单播地址, 这可能表示该地址是重复的, 但重复地址检测过程尚未检测到这一点.
- 否则, 按 [RFC4861] 中的描述处理该通告.
5.4.5 重复地址检测失败时 (When Duplicate Address Detection Fails)
被确定为重复的暂定地址 不得 分配给接口, 且节点 应该 记录一个系统管理错误.
如果该地址是由基于硬件地址的接口标识符形成的链路本地地址, 而该硬件地址本应唯一分配, 则 应该 禁用该接口上的 IP 操作.
5.5 创建全局地址 (Creation of Global Addresses)
全局地址通过将接口标识符追加到适当长度的前缀后形成. 前缀从 Router Advertisement 中包含的 Prefix Information 选项获得.
5.5.1 请求 Router Advertisement (Soliciting Router Advertisements)
Router Advertisement 会周期性发送到全节点多播地址. 为快速获得通告, 主机按 [RFC4861] 中的描述发送 Router Solicitation.
5.5.2 缺少 Router Advertisement (Absence of Router Advertisements)
从自动配置角度看, 如果按 [RFC4861] 中的描述发送少量 Router Solicitation 后仍未收到 Router Advertisement, 则该链路没有路由器.
5.5.3 Router Advertisement 处理 (Router Advertisement Processing)
对于 Router Advertisement 中的每个 Prefix-Information 选项, 节点按照 RFC 4862 中规定的规则处理, 包括形成新地址以及更新现有地址的生命周期.
5.5.4 地址生命周期到期 (Address Lifetime Expiry)
当首选地址的首选生命周期到期时, 它会变为弃用地址. 弃用地址 应该 继续作为现有通信中的源地址使用, 但如果可以轻松改用具有足够作用域的替代非弃用地址, 则 不应该 使用弃用地址发起新通信.
当地址的有效生命周期到期时, 它会变为无效地址. 无效地址 不得 用作出站通信中的源地址, 且 不得 在接收接口上被识别为目的地址.
5.6 配置一致性 (Configuration Consistency)
由于无状态自动配置和 DHCPv6 可以同时启用, 主机可能同时使用二者获取地址信息. 主机会接受通过 Neighbor Discovery 和 DHCPv6 收到的所有信息的并集.
5.7 为稳定性保留已配置地址 (Retaining Configured Addresses for Stability)
具有稳定存储的实现, 在地址通过无状态地址自动配置获得时, 可能希望在该存储中保留这些地址. 使用这种技术时, 必须保留首选生命周期和有效生命周期的到期时间.