跳到主要内容

3. 协议概述 (Protocol Overview)

3. 协议概述 (Protocol Overview)

这些 Neighbor Discovery 优化同时适用于 mesh-under 和 route-over 配置. 在 mesh-under 配置中, 只存在 6LoWPAN Border Routers 和主机; mesh-under 拓扑中不存在 6LoWPAN 路由器.

这些优化中最重要的部分是演进后的主机到路由器交互. 该交互允许节点休眠, 并避免使用组播 Neighbor Discovery 消息, 但以下情况除外: 主机查找初始默认路由器集合, 以及在该路由器集合变为不可达时重新进行此类确定.

该协议还通过在 Router Advertisement 消息中的新选项中携带头部压缩信息, 为头部压缩 [RFC6282] 提供支持.

此外, 还有一些独立机制可在 6LR 与 6LBR 之间使用, 用于执行多跳 Duplicate Address Detection, 并将前缀和压缩上下文信息从 6LBR 分发到所有 6LR. 随后, 这些 6LR 使用常规 Neighbor Discovery 机制将该信息传递给主机.

该协议的设计使主机到路由器交互不受 6LoWPAN 配置影响; 在 mesh-under 和 route-over 配置中, 主机到路由器交互是相同的.

3.1. 对 RFC 4861 的扩展 (Extensions to RFC 4861)

本文档规定了对 IPv6 Neighbor Discovery [RFC4861] 的以下优化和扩展:

  • 由主机发起刷新 Router Advertisement 信息. 这消除了路由器向主机发送周期性或非请求 Router Advertisements 的需要.
  • 如果使用基于 EUI-64 的 IPv6 地址, 则不执行 Duplicate Address Detection (DAD), 因为假定这些地址全局唯一.
  • 如果使用 DHCPv6 分配地址, DAD 是可选的.
  • 在主机和路由器之间使用新的 Address Registration Option 的新地址注册机制. 这消除了路由器使用组播 Neighbor Solicitations 查找主机的需要, 并支持休眠主机. 这也使同一个 IPv6 地址前缀可以跨 route-over 6LoWPAN 使用. 它为 Duplicate Address Detection 提供主机到路由器接口.
  • 新的 Router Advertisement 选项, 即 6LoWPAN Context Option, 用于 6LoWPAN 头部压缩所需的上下文信息.
  • 使用新的 Duplicate Address Request 和 Duplicate Address Confirmation 消息, 在 route-over 6LoWPAN 范围内执行 Duplicate Address Detection 的新机制.
  • 在 route-over 网络中分发前缀和上下文信息的新机制, 该机制使用新的 Authoritative Border Router Option 控制配置变更的泛洪.
  • 引入若干新的默认协议常量, 并调整一些现有 Neighbor Discovery 协议常量.

3.2. 地址分配 (Address Assignment)

6LoWPAN 中的主机根据 Router Advertisement 消息中收到的信息, 按 [RFC4861] 和 [RFC4862] 的规定配置其 IPv6 地址. 但是, 在此优化中对 M (managed address configuration) 标志的使用比 [RFC4861] 中更严格. 当 M 标志被置位时, 假定主机使用 DHCPv6 分配任何非 EUI-64 地址. 当 M 标志未置位时, LoWPAN 中的节点支持 Duplicate Address Detection; 因此, 主机随后可以安全地使用地址注册机制检查非 EUI-64 地址的唯一性.

6LRs MAY 使用相同机制配置其 IPv6 地址.

6LBRs 负责管理分配给 6LoWPAN 的前缀, 可使用手动配置, DHCPv6 Prefix Delegation [RFC3633], 或其他机制. 在隔离的 LoWPAN 中, 6LBR SHOULD 生成 Unique Local Address (ULA) [RFC4193] 前缀.

3.3. 主机到路由器交互 (Host-to-Router Interaction)

主机会在启动时发送 Router Solicitation 消息, 也会在其某个默认路由器的 Neighbor Unreachability Detection (NUD) 失败时发送该消息.

主机接收的 Router Advertisement 消息通常包含 Authoritative Border Router Option (ABRO), 并且除了 [RFC4861] 中描述的现有 Prefix Information Options (PIOs) 之外, 还可以选择性地包含一个或多个 6LoWPAN Context Options (6COs).

当主机已经配置非链路本地 IPv6 地址时, 它会在 NS 消息中使用 Address Registration Option (ARO), 将该地址注册到一个或多个默认路由器. 主机选择注册 lifetime, 并周期性地重复发送 ARO (在 lifetime 到期前), 以维持注册. lifetime 的选择应使主机即使在休眠时也能维持注册. 同样, 经常改变连接点的移动节点应使用适当较短的 lifetime. 注册细节见 Section 5.5, 协议常量见 Section 9.

当返回给主机的 ARO 带有非零 Status 时, 注册失败. 其中一个原因可能是路由器确定该 IPv6 地址已经被另一台主机使用, 即被具有不同 EUI-64 的主机使用. 这可用于支持非基于 EUI-64 的地址, 例如临时 IPv6 地址 [RFC4941], 或基于 IEEE 802.15.4 16-bit short address 作为 Interface ID 的地址. 如果该路由器上的 Neighbor Cache 已满, 也可能发生失败.

地址的重新注册可以与路由器的 Neighbor Unreachability Detection (NUD) 结合, 因为二者都使用单播 Neighbor Solicitation 消息. 当主机醒来发送分组, 并且既需要执行 NUD 来检查路由器是否仍可达, 又需要刷新其在该路由器上的注册时, 这样做更高效.

地址注册的响应可能不是立即返回的, 因为在 route-over 配置中, 6LR 可能会针对 6LBR 执行 Duplicate Address Detection. 主机会重传 Address Registration Option, 直到收到 Address Registration Option 作为确认.

作为优化的一部分, 地址解析不会像 [RFC4861] 中那样通过组播 Neighbor Solicitation 消息执行. 相反, 路由器为所有已注册的 IPv6 地址维护 Neighbor Cache Entries. 如果某个地址不在路由器的 Neighbor Cache 中, 则该地址要么不存在, 要么被分配给连接到 6LoWPAN 中其他某个路由器的主机, 要么位于 6LoWPAN 外部. 在 route-over 配置中, 路由协议用于将此类分组路由到目的地.

3.4. 路由器到路由器交互 (Router-to-Router Interaction)

新的路由器到路由器交互只用于存在 6LR 的 route-over 配置. 另见 Section 1.4.

不同于 [RFC4861] 中的路由器, 6LRs 在系统启动和前缀配置期间 MUST 像主机一样工作, 即发送 Router Solicitation 消息并自动配置其 IPv6 地址.

当使用多跳前缀和上下文传播时, 6LR 会存储从 6LBR 直接或间接收到的 ABRO, 6CO 和前缀信息, 并在其发送给其他 6LR 的 Router Advertisement 中, 或在响应 Router Solicitation 发送给主机的 Router Advertisement 中, 重新分发这些信息. ABRO 中有一个 Version Number 字段 (参见 Section 4.3), 用于限制 6LR 之间已更新信息的泛洪.

6LR 可以使用新的 Duplicate Address Request (DAR) 和 Duplicate Address Confirmation (DAC) 消息, 针对一个或多个 6LBR 执行 Duplicate Address Detection. 这些消息携带来自 Address Registration Option 的信息. DAR 和 DAC 消息会在 6LR 与 6LBR 之间转发; 因此, [RFC4861] 中检查 hop limit=255 的规则不适用于 DAR 和 DAC 消息. 这些多跳 DAD 消息 MUST NOT 修改路由器上的任何 Neighbor Cache Entries, 因为我们不具备由 hop limit=255 检查提供的安全收益.

3.5. Neighbor Cache 管理 (Neighbor Cache Management)

使用带 lifetime 的显式注册, 加上不希望为主机组播 Neighbor Solicitation 消息, 意味着我们需要以略不同于 [RFC4861] 的方式管理 Neighbor Cache Entries (NCEs). 这会产生三种不同类型的 NCE, 这些类型规定了这些条目如何被删除:

  • Garbage-collectible: 受 [RFC4861] 中普通规则约束的条目, 这些规则允许在内存不足时进行垃圾回收.
  • Registered: 具有显式注册 lifetime 的条目, 会一直保留到该 lifetime 到期或被显式注销.
  • Tentative: 具有较短 lifetime 的临时条目, 通常会转换为 Registered 条目.

注意, NCE 的类型与 [RFC4861] 中规定的状态是正交的.

当主机通过发送 Router Solicitations 与路由器交互时, 会产生 Tentative NCE. 一旦路由器已成功让某个节点向其注册, 结果就是 Registered NCE. 当路由器向主机发送 RA, 以及当路由器接收来自其他路由器的 RA 消息或组播 NS 消息时, 结果是 Garbage-collectible NCE. 对于一个 IP 地址, 同一时间只能有一种 NCE.

路由器上的 Neighbor Cache Entries 还可以由 6LoWPAN 中使用的路由协议添加或删除. 如果路由协议携带相邻路由器的链路层地址, 这会很有用. 取决于这类路由协议的细节, 这些 NCE 可以是 Registered, 也可以是 Garbage-collectible.