1. 简介 (Introduction)
低功耗有损网络 (Low-Power and Lossy Networks, LLNs) 的设计通常以节省能量为重点, 因为能量是所有资源中约束最强的一项. 其他设计约束, 例如有限的内存容量, LLN 设备的占空比工作方式, 以及低功耗有损传输, 都源自这一核心关注点. 无线电设备无论是在发送还是仅仅监听, 都会大量消耗能量. 因此, LLN 协议必须经过调整, 使节点能够在大多数时间关闭无线电并保持睡眠.
LLN 的例子包括 hub-and-spoke 访问链路, 如 (Low-Power) Wi-Fi [IEEE80211] 和 Bluetooth (Low Energy) [IEEE802151], 在第 2 层 (Layer 2, L2) 处理路由操作的 Mesh-Under 网络, 以及 Wi-SUN [WI-SUN] 和 6TiSCH [RFC9030] 等 route-over 网状网络. 这些网络在 [IEEE802154] 之上利用 6LoWPAN [RFC4919] [RFC6282] 和 RPL [RFC6550].
LLN 和受限设备是 6LoWPAN 协议最初的应用领域. 因此, 在设计这些协议时, 最大限度降低能量开销是首要关注点. 在非 LLN 环境中, 如果降低碳排放同样是优先事项, 应用 6LoWPAN 设计并扩展部分 6LoWPAN 协议也可能是合理的. 一般设计要点包括:
-
将协议复杂度放在约束较少的路由器中, 以简化主机实现, 并避免把控制流量扩散到所有节点.
-
使用由主机触发的操作, 使主机可以与路由器发生临时断连, 例如为了省电而睡眠, 同时也能应对连接不一致的情况.
这些要点进一步体现为:
-
路由器中主动建立的有状态知识, 可在任何时间点使用.
-
由主机及其应用程序触发的单播主机到路由器操作.
-
尽量少使用异步 L2 广播操作, 因为这类操作会让主机保持唤醒和监听, 即使应用层并无这种需求.
"RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks" [RFC6550] 在上述约束下提供 IPv6 [RFC8200] 路由服务. 为了在受限网络中节省信令和路由状态, RPL 路由只沿 Destination-Oriented Directed Acyclic Graph (DODAG) 执行. DODAG 经过优化, 用于到达 Root 节点, 而不是在两个对等方之间沿最短路径转发, 无论这种最短路径在每个 LLN 中意味着什么.
经典邻居发现协议 (Neighbor Discovery Protocol, NDP) [RFC4861] [RFC4862] 定义之初面向串行链路以及 Ethernet 等共享传输介质. 当时这些介质上的 L2 广播成本较低, 而邻居缓存内存成本较高. 因此, NDP 被设计为一种反应式协议, 依赖缓存和组播操作来对 IPv6 单播地址执行重复地址检测 (Duplicate Address Detection, DAD) 和地址解析 (Address Resolution, AR), 即地址发现或地址查找. 这些组播操作通常会影响链路上的每个节点, 而真正的目标最多只有一个节点, 这会浪费能量. 它们还意味着所有节点都必须保持唤醒以听取请求, 这与省电睡眠模式不一致.
"Architecture and Framework for IPv6 over Non-Broadcast Access" [IPv6-over-NBMA] 引入了 IPv6 ND 向主动 AR 方法的演进. 由于 NBMA 的 IPv6 模型依赖路由协议到达子网内部, 因此用于 NBMA 的 IPv6 ND 扩展被称为子网邻居发现 (Subnet Neighbor Discovery, SND). SND 基于 Internet of Things (IoT) 领域中的工作, 即 6LoWPAN ND. 与经典 IPv6 ND 协议不同, 这一演进遵循上文讨论的能量节省原则:
-
原始 6LoWPAN ND, 即 "Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)" [RFC6775], 被引入用于避免过度使用组播消息, 并使 IPv6 ND 能够在能量受限节点上运行. [RFC6775] 改变了经典 IPv6 ND 模型, 主动在为 6LoWPAN Node (6LN) 提供服务的一个或多个 6LoWPAN Routers (6LRs) 中, 建立与该 6LN 单播地址关联的 Neighbor Cache Entry (NCE). 为此, [RFC6775] 定义了新的 Address Registration Option (ARO), 将其放入 6LN 与 6LR 之间的单播 Neighbor Solicitation (NS) 和 Neighbor Advertisement (NA) 消息中.
-
"Registration Extensions for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Neighbor Discovery>" [RFC8505] 将 [RFC6775] 更新为通用 Address Registration 机制, 并成为 Subnet Neighbor Discovery (SND) 的基础. SND 引入 Extended Address Registration Option (EARO), 使注册节点能够访问子网内路由和 ND 代理操作 [RFC8929] 等服务. 这为主机提供了一种与路由协议无关的方法, 用于请求路由器在本地路由协议中注入一个单播 IPv6 地址, 并为该地址提供返回可达性.
-
"Listener Subscription for IPv6 Neighbor Discovery Multicast and Anycast Addresses" [RFC9685] 更新 [RFC8505], 使监听方能够订阅 IPv6 任播或组播地址. 该文档还更新 [RFC9010], 使 6LR 能够将任播和组播地址注入 RPL. 类似地, 本规范更新 [RFC8505] 和 [RFC9010], 增加 6LN 注册最长 120 bit 单播前缀而非地址的能力, 并以独立于路由协议的方式向 6LR 发出信号, 表明期望该 6LR 重新分发这些前缀.
本规范更新上述注册和订阅方法, 使节点能够向路由系统注册一个单播前缀, 并使该前缀被注入路由协议. 与 [RFC8505] 一样, 前缀注册不依赖路由器注入该前缀时所使用的具体路由协议, 路由器也不关心该前缀是通过何种方法分配给节点的. [RFC8505] 中的能量节省原则同样被保留, 这意味着节点不必发送或期待异步组播消息.
请注意, 节能节点不一定是路由器. 因此, 即使某个节点正在通告前缀, 也可以选择不使用 Router Advertisement (RA) 消息, 以免让该节点在对等节点看来像是路由器. 根据上述设计原则, 不利用以下机制显然也是设计选择: (1) 从该节点发出或发往该节点的广播, (2) 节点内部复杂的状态机. 选择使用并扩展 EARO, 而不是 Route Information Option (RIO) [RFC4191], 同样是一个设计选择. 原因是 RIO 并不用于将路由注入路由系统, 并且缺少 EARO 中 R bit 这样的相关控制信息. 此外, 带有 RIO 的 RA 缺少 EARO 中 Registration Ownership Verifier (ROVR) [RFC8928] 的等价机制, 因而不能被信任用于安全地向路由协议注入路由.