跳到主要内容

5. RPL 实例 (RPL Instance)

在给定 LLN 内, 可以存在多个逻辑上独立的 RPL 实例. 一个 RPL 节点可以属于多个 RPL 实例, 并且可以在某些实例中充当路由器, 在其他实例中充当叶节点. 本文档描述单个实例的行为.

RPL 实例有两种类型: 本地 (Local) 和全局 (Global). RPL 将 RPLInstanceID 空间划分给全局实例和本地实例, 以同时支持协调式和单方面的 RPLInstanceID 分配. 全局 RPL 实例经过协调, 具有一个或多个 DODAG, 通常寿命较长. 本地 RPL 实例始终是单个 DODAG, 其唯一根拥有对应的 DODAGID, 并以单方面方式分配本地 RPLInstanceID. 例如, 本地 RPL 实例可用于构造 DODAG, 以支持未来的按需路由解决方案. 本地 RPL 实例的运行模式超出本规范范围, 可在其他配套规范中描述.

RPL 实例的定义和配置超出本规范范围. 指南可以是应用特定和实现特定的, 并预期在未来配套规范中详细说明. 这些操作预期应确保来自 RPL 网络外部的数据分组能够明确关联到至少一个 RPL 实例, 并能在任何与该分组匹配的实例上安全路由.

RPL 网络内的控制分组和数据分组会被标记, 以明确标识它们属于哪个 RPL 实例.

每个 RPL 控制消息都有一个 RPLInstanceID 字段. 某些 RPL 控制消息在引用下文定义的本地 RPLInstanceID 时, 也可以包含 DODAGID.

在 RPL 网络内流动的数据分组会将 RPLInstanceID 作为 RPL 所需的 RPL 分组信息的一部分暴露出来, 进一步说明见第 11.2 节. 对于来自 RPL 网络外部的数据分组, 入口路由器确定 RPLInstanceID, 并将其放入随后注入 RPL 网络的分组中.

5.1. RPL 实例 ID (RPL Instance ID)

全局 RPLInstanceID MUST 在整个 LLN 中唯一. 分配和配置全局 RPLInstanceID 的机制超出本规范范围. 整个网络中最多可以有 128 个全局实例. 本地实例总是与 DODAGID 一起使用, 该 DODAGID 在某些情况下可以显式给出或隐式给出, 并且每个 DODAGID 最多可支持 64 个本地实例. 本地实例由拥有该 DODAGID 的节点分配和管理, 不需要与其他节点进行任何显式协调, 详见下文.

全局 RPLInstanceID 在 RPLInstanceID 字段中按如下方式编码:

     0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|0| ID | Global RPLInstanceID in 0..127
+-+-+-+-+-+-+-+-+

图 4: 全局实例的 RPLInstanceID 字段格式

本地 RPLInstanceID 由拥有 DODAGID 的节点自动配置, 并且对于该 DODAGID MUST 是唯一的. 用于配置本地 RPLInstanceID 的 DODAGID MUST 是该节点的可达 IPv6 地址, 并且 MUST 用作该本地实例内所有通信的端点.

本地 RPLInstanceID 在 RPLInstanceID 字段中按如下方式编码:

     0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1|D| ID | Local RPLInstanceID in 0..63
+-+-+-+-+-+-+-+-+

图 5: 本地实例的 RPLInstanceID 字段格式

本地 RPLInstanceID 中的 'D' 标志在 RPL 控制消息中始终设置为 0. 在数据分组中, 它用于指示 DODAGID 是该分组的源还是目的地. 如果 'D' 标志设置为 1, 则 IPv6 分组的目的地址 MUST 是 DODAGID. 如果 'D' 标志被清零, 则 IPv6 分组的源地址 MUST 是 DODAGID.

例如, 考虑节点 A, 它是某个本地 RPL 实例的 DODAG 根, 并已分配本地 RPLInstanceID. 根据定义, 穿过该本地 RPL 实例的所有流量要么源自节点 A, 要么终止于节点 A. 在这种情况下, DODAGID 将是节点 A 的可达 IPv6 地址. 所有流量都会在源地址或目的地址中包含节点 A 的地址, 因而包含 DODAGID. 因此, 本地 RPLInstanceID 可以通过适当设置 'D' 标志来指示 DODAGID 等价于源地址或目的地址.