3.1.3. 实例, DODAG 和 DODAG 版本 (Instances, DODAGs, and DODAG Versions)
一个 RPL 实例包含一个或多个 DODAG 根. RPL 实例可以为某些目的地前缀提供路由, 这些前缀可通过 DODAG 根或 DODAG 内的备用路径到达. 这些根可以独立运行, 也可以在一个不一定像 LLN 那样受限的网络上进行协调.
RPL 实例可以包括:
-
具有单个根的单个 DODAG
- 例如, 在家庭自动化应用中, 一个以单个集中式照明控制器为根, 并针对最小时延进行优化的 DODAG.
-
具有独立根且彼此不协调的多个 DODAG (具有不同 DODAGID)
- 例如, 城市数据采集应用中的多个数据采集点, 它们没有合适的连通性来相互协调, 或者通过形成多个 DODAG 的方式来动态且自主地划分网络.
-
具有虚拟根的单个 DODAG, 该虚拟根通过骨干网络协调 LLN 汇聚点 (具有相同 DODAGID).
- 例如, 多个通过可靠传输链路运行的边界路由器, 如为了支持 IPv6 低功耗无线个人区域网络 (IPv6 Low-Power Wireless Personal Area Network, 6LoWPAN) 应用而运行的边界路由器, 它们能够作为同一 DODAG 汇聚点的逻辑等价接口.
-
适合某些应用场景的上述组合.
每个 RPL 分组都与特定 RPLInstanceID (见第 11.2 节) 相关联, 因而也与特定 RPL 实例 (第 5 节) 相关联. RPLInstanceID 与应用流量类型或服务之间映射关系的配置或自动发现超出本规范范围, 将在未来配套规范中定义.
图 1 描绘了一个 RPL 实例示例, 该实例包含三个 DODAG, 其 DODAG 根分别为 R1, R2 和 R3. 这些 DODAG 根都通告相同的 RPLInstanceID. 图中的线表示父节点与子节点之间的连通性.
图 2 描绘了 DODAGVersionNumber 递增如何产生新的 DODAG 版本. 该图展示了 DODAGVersionNumber 递增导致不同 DODAG 拓扑的情况. 注意, 新的 DODAG 版本并不总是意味着不同的 DODAG 拓扑. 如本规范后文所述, 为适应某些拓扑变化, 需要新的 DODAG 版本.
在以下示例中请注意, 为简化起见, 图中使用类似树的结构表示. 但在连通性支持的情况下, DODAG 结构允许每个节点有多个父节点.
+----------------------------------------------------------------+
| |
| +--------------+ |
| | | |
| | (R1) | (R2) (R3) |
| | / \ | /| \ / | \ |
| | / \ | / | \ / | \ |
| | (A) (B) | (C) | (D) ... (F) (G) (H) |
| | /|\ |\ | / | / |\ |\ | | |
| | : : : : : | : (E) : : : `: : |
| | | / \ |
| +--------------+ : : |
| DODAG |
| |
+----------------------------------------------------------------+
RPL Instance
图 1: RPL 实例
+----------------+ +----------------+
| | | |
| (R1) | | (R1) |
| / \ | | / |
| / \ | | / |
| (A) (B) | \ | (A) |
| /|\ / |\ | ------\ | /|\ |
| : : (C) : : | \ | : : (C) |
| | / | \ |
| | ------/ | \ |
| | / | (B) |
| | | |\ |
| | | : : |
| | | |
+----------------+ +----------------+
Version N Version N+1
图 2: DODAG 版本