跳到主要内容

附录 A. 示例操作 (Example Operation)

本附录提供若干示例, 用于说明如何通过 RPL 分发寻址信息和前缀. 这些示例展示了使用 PIO 和 RIO 分发信息, 以及 DIO 和 DAO 消息的使用. 注意, 本附录不是规范性的, RPL 寻址规划和自动配置的具体细节可能因具体实现而异. RPL 只是提供一种分发信息的载体, 其他机制可以基于这些信息构建并使用它们.

注意, 这些示例说明了使用 RPL 内部分发的信息所支持的地址自动配置方案. 但是, 如果实现包含另一种地址自动配置方案, 则可以配置 RPL 节点不在 PIO 选项中设置 'A' 标志, 尽管 PIO 仍可用于分发前缀和寻址信息.

A.1. 带节点自有前缀的 Storing 模式示例操作 (Example Operation in Storing Mode with Node-Owned Prefixes)

图 32 说明了一个在 Storing 模式下运行的简单 RPL 网络的逻辑寻址架构. 在此示例中, 每个节点 A, B, C 和 D 都拥有自己的前缀, 并使该前缀可供链路内设备进行地址自动配置. (这是通过在 DIO 消息的 PIO 中设置 'A' 标志和 'L' 标志来传达的). 节点 A 拥有前缀 A::/64, 节点 B 拥有 B::/64, 依此类推. 节点 B 基于节点 A 自动配置一个链路内地址 A::B. 节点 C 和 D 类似地从节点 B 的前缀分别自动配置链路内地址 B::C 和 B::D. 节点可以选择设置 'R' 标志, 并在 PIO 的 Prefix 字段中发布自己的地址.

                              +-------------+
| Root |
| |
| Node A |
| |
| A::A |
+------+------+
|
|
|
+------+------+
| A::B |
| |
| Node B |
| |
| B::B |
+------+------+
|
|
|
.--------------+--------------.
/ \
/ \
+------+------+ +------+------+
| B::C | | B::D |
| | | |
| Node C | | Node D |
| | | |
| C::C | | D::D |
+-------------+ +-------------+


图 32: 带节点自有前缀的 Storing 模式

A.1.1. DIO 消息和 PIO (DIO Messages and PIO)

例如, 节点 A 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Set
  • 'R' flag: Clear
  • Prefix Length: 64
  • Prefix: A::

例如, 节点 B 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Set
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: B::B

例如, 节点 C 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Set
  • 'R' flag: Clear
  • Prefix Length: 64
  • Prefix: C::

例如, 节点 D 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Set
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: D::D

A.1.2. DAO 消息 (DAO Messages)

节点 B 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target B::/64
  • Target C::/64
  • Target D::/64

节点 C 将向节点 B 发送带有以下信息的 DAO 消息:

  • Target C::/64

节点 D 将向节点 B 发送带有以下信息的 DAO 消息:

  • Target D::/64

A.1.3. 路由信息库 (Routing Information Base)

节点 A 会在概念上将以下信息收集到其路由信息库 (Routing Information Base, RIB) 中:

  • A::/64 直连
  • B::/64 经 B 的 link-local
  • C::/64 经 B 的 link-local
  • D::/64 经 B 的 link-local

节点 B 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 A 的 link-local
  • B::/64 直连
  • C::/64 经 C 的 link-local
  • D::/64 经 D 的 link-local

节点 C 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • C::/64 直连

节点 D 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • D::/64 直连

A.2. 带子网范围前缀的 Storing 模式示例操作 (Example Operation in Storing Mode with Subnet-Wide Prefix)

图 33 说明了一个在 Storing 模式下运行的简单 RPL 网络的逻辑寻址架构. 在此示例中, 根节点 A 提供一个前缀, 用于整个 RPL 子网的地址自动配置. (这是通过在 DIO 消息的 PIO 中设置 'A' 标志并清除 'L' 标志来传达的.) 节点 A, B, C 和 D 全部基于前缀 A::/64 自动配置. 节点可以选择设置 'R' 标志, 并在 PIO 的 Prefix 字段中发布自己的地址.

                              +-------------+
| Root |
| |
| Node A |
| A::A |
| |
+------+------+
|
|
|
+------+------+
| |
| Node B |
| A::B |
| |
+------+------+
|
|
.--------------+--------------.
/ \
/ \
+------+------+ +------+------+
| | | |
| Node C | | Node D |
| A::C | | A::D |
| | | |
+-------------+ +-------------+

图 33: 带子网范围前缀的 Storing 模式

A.2.1. DIO 消息和 PIO (DIO Messages and PIO)

例如, 节点 A 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Clear
  • Prefix Length: 64
  • Prefix: A::

例如, 节点 B 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: A::B

例如, 节点 C 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Clear
  • Prefix Length: 64
  • Prefix: A::

例如, 节点 D 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: A::D

A.2.2. DAO 消息 (DAO Messages)

节点 B 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target A::B/128
  • Target A::C/128
  • Target A::D/128

节点 C 将向节点 B 发送带有以下信息的 DAO 消息:

  • Target A::C/128

节点 D 将向节点 B 发送带有以下信息的 DAO 消息:

  • Target A::D/128

A.2.3. 路由信息库 (Routing Information Base)

节点 A 会在概念上将以下信息收集到其 RIB 中:

  • A::A/128 直连
  • A::B/128 经 B 的 link-local
  • A::C/128 经 B 的 link-local
  • A::D/128 经 B 的 link-local

节点 B 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 A 的 link-local
  • A::B/128 直连
  • A::C/128 经 C 的 link-local
  • A::D/128 经 D 的 link-local

节点 C 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • A::C/128 直连

节点 D 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • A::D/128 直连

A.3. 带节点自有前缀的 Non-Storing 模式示例操作 (Example Operation in Non-Storing Mode with Node-Owned Prefixes)

图 34 说明了一个在 Non-Storing 模式下运行的简单 RPL 网络的逻辑寻址架构. 在此示例中, 每个节点 A, B, C 和 D 都拥有自己的前缀, 并使该前缀可供链路内设备进行地址自动配置. (这是通过在 DIO 消息的 PIO 中设置 'A' 标志和 'L' 标志来传达的.) 节点 A 拥有前缀 A::/64, 节点 B 拥有 B::/64, 依此类推. 节点 B 基于节点 A 自动配置链路内地址 A::B. 节点 C 和 D 类似地从节点 B 的前缀分别自动配置链路内地址 B::C 和 B::D. 节点可以选择设置 'R' 标志, 并在 PIO 的 Prefix 字段中发布自己的地址.

                              +-------------+
| Root |
| |
| Node A |
| |
| A::A |
+------+------+
|
|
|
+------+------+
| A::B |
| |
| Node B |
| |
| B::B |
+------+------+
|
|
|
.--------------+--------------.
/ \
/ \
+------+------+ +------+------+
| B::C | | B::D |
| | | |
| Node C | | Node D |
| | | |
| C::C | | D::D |
+-------------+ +-------------+

图 34: 带节点自有前缀的 Non-Storing 模式

A.3.1. DIO 消息和 PIO (DIO Messages and PIO)

在带节点自有前缀的 Non-Storing 模式下, DIO 消息中包含的 PIO 可被视为与带节点自有前缀的 Storing 模式情形 (附录 A.1.1) 中的 PIO 相同.

A.3.2. DAO 消息 (DAO Messages)

节点 B 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target B::/64, Transit A::B

节点 C 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target C::/64, Transit B::C

节点 D 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target D::/64, Transit B::D

A.3.3. 路由信息库 (Routing Information Base)

节点 A 会在概念上将以下信息收集到其 RIB 中. 注意, 节点 A 有足够的信息通过对 RIB 执行递归查找来构造源路由:

  • A::/64 直连
  • B::/64 经 A::B
  • C::/64 经 B::C
  • D::/64 经 B::D

节点 B 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 A 的 link-local
  • B::/64 直连

节点 C 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • C::/64 直连

节点 D 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • D::/64 直连

A.4. 带子网范围前缀的 Non-Storing 模式示例操作 (Example Operation in Non-Storing Mode with Subnet-Wide Prefix)

图 35 说明了一个在 Non-Storing 模式下运行的简单 RPL 网络的逻辑寻址架构. 在此示例中, 根节点 A 提供一个前缀, 用于整个 RPL 子网的地址自动配置. (这是通过在 DIO 消息的 PIO 中设置 'A' 标志并清除 'L' 标志来传达的.) 节点 A, B, C 和 D 全部基于前缀 A::/64 自动配置. 节点必须设置 'R' 标志, 并在 PIO 的 Prefix 字段中发布自己的地址, 以告知其子节点在 transit 选项中使用哪个地址.

                              +-------------+
| Root |
| |
| Node A |
| A::A |
| |
+------+------+
|
|
|
+------+------+
| |
| Node B |
| A::B |
| |
+------+------+
|
|
.--------------+--------------.
/ \
/ \
+------+------+ +------+------+
| | | |
| Node C | | Node D |
| A::C | | A::D |
| | | |
+-------------+ +-------------+

图 35: 带子网范围前缀的 Non-Storing 模式

A.4.1. DIO 消息和 PIO (DIO Messages and PIO)

例如, 节点 A 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: A::A

例如, 节点 B 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: A::B

例如, 节点 C 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: A::C

例如, 节点 D 将发送带有如下 PIO 的 DIO 消息:

  • 'A' flag: Set
  • 'L' flag: Clear
  • 'R' flag: Set
  • Prefix Length: 64
  • Prefix: A::D

A.4.2. DAO 消息 (DAO Messages)

节点 B 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target A::B/128, Transit A::A

节点 C 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target A::C/128, Transit A::B

节点 D 将向节点 A 发送带有以下信息的 DAO 消息:

  • Target A::D/128, Transit A::B

A.4.3. 路由信息库 (Routing Information Base)

节点 A 会在概念上将以下信息收集到其 RIB 中. 注意, 节点 A 有足够的信息通过对 RIB 执行递归查找来构造源路由:

  • A::A/128 直连
  • A::B/128 经 A::A
  • A::C/128 经 A::B
  • A::D/128 经 A::B

节点 B 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 A 的 link-local
  • A::B/128 直连

节点 C 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • A::C/128 直连

节点 D 会在概念上将以下信息收集到其 RIB 中:

  • ::/0 经 B 的 link-local
  • A::D/128 直连

A.5. 外部前缀示例 (Example with External Prefixes)

考虑图 36 所示的简单网络. 在此示例中, 有一组路由器参与 RPL 网络: 一个 DODAG 根, 节点 A, Y 和 Z. DODAG 根和节点 Z 还分别具有到不同外部网络域 (即 RPL 网络外部) 的连通性. 注意, 这些外部网络可以是 RPL 网络, 也可以是完全不同类型的网络.

                          RPL Network        +-------------------+
RPL::/64 | |
| External |
[RPL::Root] (Root)----------+ Prefix |
| | EXT_1::/64 |
| | |
| +-------------------+
[RPL::A] (A)
:
:
:
[RPL::Y] (Y)
| +-------------------+
| | |
| | External |
[RPL::Z] (Z)------------+ Prefix |
: | EXT_2::/64 |
: | |
: +-------------------+

图 36: 简单网络示例

在此示例中, DODAG 根向 RPL 子网提供一个用于地址自动配置的前缀. 这里, 整个 RPL 子网都使用同一前缀 RPL::/64 进行地址自动配置, 尽管其他实现中可以采用更复杂/混合的方案.

DODAG 根具有到外部 (相对于该 RPL 网络而言) 前缀 EXT_1::/64 的连通性. DODAG 根可能已经通过显式配置或非 RPL 接口上的 IPv6 ND 等方式学习到到该前缀的连通性. DODAG 根被配置为通告关于到该前缀连通性的信息.

类似地, 节点 Z 具有到外部前缀 EXT_2::/64 的连通性. 节点 Z 下方还有一个 sub-DODAG.

  1. DODAG 根向其 DIO 消息添加 RIO. 该 RIO 包含外部前缀 EXT_1::/64. 此信息可在 DODAG 内其他节点发出的 DIO 消息中重复. 因此, 到前缀 EXT_1::/64 的可达性沿 DODAG 向下分发.

  2. 节点 Z 可以通过发送 DAO 消息来通告到 Target 网络 EXT_2::/64 的可达性, 其中在 Target 选项中使用 EXT_2::/64 作为 Target, 并在 Transit Information 选项中使用自身 (节点 Z) 作为父节点. (在 Storing 模式下, 该 Transit Information 选项不需要包含节点 Z 的地址). non-storing 根随后获知一跳链路 (Node Z -- EXT_2::/64), 以用于构造源路由. 节点 Z 还可以通过发送带 PIO 且 'A' 标志清零的 DIO 消息, 向其 sub-DODAG 中的节点通告自己到 EXT_2::/64 的可达性.