跳到主要内容

6.7. RPL 控制消息选项 (RPL Control Message Options)

6.7.1. RPL 控制消息选项通用格式 (RPL Control Message Option Generic Format)

RPL 控制消息选项均遵循以下格式:

     0                   1                   2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
| Option Type | Option Length | Option Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -

图 19: RPL 选项通用格式

  • Option Type: 8 位选项类型标识符. Option Type 值由 IANA 分配 (见第 20.4 节).
  • Option Length: 8 位无符号整数, 表示该选项以八位字节为单位的长度, 不包括 Option Type 和 Length 字段.
  • Option Data: 可变长度字段, 包含该选项特有的数据.

处理包含接收方无法识别的 Option Type 值的 RPL 消息时, 接收方 MUST 静默忽略该未识别选项, 并继续处理后续选项, 正确处理消息中剩余的所有选项.

RPL 消息选项可能有对齐要求. 按照 IPv6 中的惯例, 对于有对齐要求的选项, 在数据包中对齐时需要让每个选项的 Option Data 字段内的多八位字节值落在自然边界上 (即宽度为 n 个八位字节的字段放置在距头部起点 n 个八位字节整数倍的位置, 其中 n = 1, 2, 4 或 8).

6.7.2. Pad1

Pad1 选项 MAY 出现在 DIS, DIO, DAO, DAO-ACK 和 CC 消息中, 其格式如下:

     0
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| Type = 0x00 |
+-+-+-+-+-+-+-+-+

图 20: Pad1 选项格式

Pad1 选项用于向消息中插入单个八位字节的填充, 以支持选项对齐. 如果需要超过一个八位字节的填充, 则应使用 PadN 选项, 而不是多个 Pad1 选项.

注意! Pad1 选项格式是一个特殊情况 -- 它既没有 Option Length 字段, 也没有 Option Data 字段.

6.7.3. PadN

PadN 选项 MAY 出现在 DIS, DIO, DAO, DAO-ACK 和 CC 消息中, 其格式如下:

     0                   1                   2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
| Type = 0x01 | Option Length | 0x00 Padding...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -

图 21: PadN 选项格式

PadN 选项用于向消息中插入两个或更多八位字节的填充, 以支持选项对齐. 接收方 MUST 忽略 PadN 选项数据.

  • Option Type: 0x01
  • Option Length: 对于 N 个八位字节的填充, 其中 2 <= N <= 7, Option Length 字段包含值 N-2. Option Length 为 0 表示总填充为 2 个八位字节. Option Length 为 5 表示总填充为 7 个八位字节, 这是 PadN 选项允许的最大填充大小.
  • Option Data: 对于 N (N > 1) 个八位字节的填充, Option Data 由 N-2 个值为零的八位字节组成.

6.7.4. DAG 度量容器 (DAG Metric Container)

DAG Metric Container 选项 MAY 出现在 DIO 或 DAO 消息中, 其格式如下:

     0                   1                   2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
| Type = 0x02 | Option Length | Metric Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -

图 22: DAG Metric Container 选项格式

DAG Metric Container 用于沿 DODAG 报告度量. DAG Metric Container 可以包含实现者按需选择的若干离散节点, 链路和聚合路径度量与约束, 这些度量和约束在 [RFC6551] 中规定.

DAG Metric Container MAY 在同一 RPL 控制消息中出现多次, 例如用于支持 Metric Data 长度超过 256 字节的用例. 更多信息见 [RFC6551].

DAG Metric Container 的处理和传播由实现特定的策略函数控制.

  • Option Type: 0x02
  • Option Length: Option Length 字段包含 Metric Data 以八位字节为单位的长度.
  • Metric Data: DAG Metric Container 数据的顺序, 内容和编码按 [RFC6551] 中的规定.

6.7.5. 路由信息 (Route Information)

路由信息选项 (Route Information Option, RIO) MAY 出现在 DIO 消息中, 它携带的信息与 [RFC4191] 中定义的 IPv6 邻居发现 (Neighbor Discovery, ND) RIO 相同. DODAG 根对设置该信息具有权威性, 并且该信息沿 DODAG 向下传播时保持不变. RPL 路由器可以很容易地将其转换回 ND 选项, 并在自己的路由器通告 (Router Advertisement, RA) 中通告, 因而附接到该 RPL 路由器的节点最终会针对某个数据包的目的地使用根具有最佳偏好的 DODAG. 除了现有的 ND 语义之外, Objective Function 还可以使用该信息来偏向根对某个特定目的地最受偏好的 DODAG. 为了作为 RPL 选项携带, 该选项的格式略作修改 (Type, Length, Prefix), 如下所示:

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x03 | Option Length | Prefix Length |Resvd|Prf|Resvd|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Route Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. Prefix (Variable Length) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

图 23: Route Information Option 格式

RIO 用于指示可以从 DODAG 根到达指定目的地前缀.

如果 RPL 控制消息需要指定到多个目的地的连通性, RIO 可以重复出现.

关于 RIO, 应以 [RFC4191] 作为权威参考. 为方便起见, 此处转录字段说明:

  • Option Type: 0x03
  • Option Length: 可变, 选项以八位字节为单位的长度, 不包括 Type 和 Length 字段. 注意, 与 IPv6 ND 不同, 此长度以单个八位字节为单位表示.
  • Prefix Length: 8 位无符号整数. 前缀中有效前导位的数量. 取值范围为 0 到 128. Prefix 字段的字节数由 Option Length 字段推导得出, 且必须至少能够容纳 Prefix Length 所指示的位数. 注意, 在 RPL 中, 这意味着 Prefix 字段的长度可以不是 0, 8 或 16.
  • Prf: 2 位有符号整数. 当接收到多个相同前缀 (对应不同路由器) 时, Route Preference 指示是否优先选择与该前缀关联的路由器. 如果收到 Reserved (10) 值, 则 MUST 忽略该 RIO. 根据 [RFC4191], Reserved (10) 值 MUST NOT 被发送. ([RFC4191] 将 Preference 限制为仅三个值, 以强调它不是度量.)
  • Resvd: 两个 3 位未使用字段. 发送方 MUST 将它们初始化为零, 接收方 MUST 忽略它们.
  • Route Lifetime: 32 位无符号整数. 前缀用于路由确定时保持有效的时间长度, 以秒为单位 (相对于数据包发送时间). 全 1 位值 (0xFFFFFFFF) 表示无限.
  • Prefix: 可变长度字段, 包含一个 IP 地址或 IPv6 地址前缀. Prefix Length 字段包含前缀中有效前导位的数量. 前缀长度之后的前缀位 (如果有) 为保留位, 发送方 MUST 将其初始化为零, 接收方 MUST 忽略. 注意, 在 RPL 中, 该字段的长度可以不是 0, 8 或 16.

RIO 的未分配位为保留位. 发送时 MUST 将其设置为零, 接收时 MUST 忽略.

6.7.6. DODAG 配置 (DODAG Configuration)

DODAG Configuration 选项 MAY 出现在 DIO 消息中, 其格式如下:

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x04 |Opt Length = 14| Flags |A| PCS | DIOIntDoubl. |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DIOIntMin. | DIORedun. | MaxRankIncrease |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MinHopRankIncrease | OCP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Def. Lifetime | Lifetime Unit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

图 24: DODAG Configuration 选项格式

DODAG Configuration 选项用于通过 DODAG 分发 DODAG Operation 的配置信息.

该选项传达的信息在 DODAG 内通常是静态且不变的, 因此不必包含在每个 DIO 中. 该信息在 DODAG 根处配置, 并通过 DODAG Configuration 选项分发到整个 DODAG. DODAG 根以外的节点在传播 DODAG Configuration 选项时 MUST NOT 修改该信息. DODAG 根 MAY 偶尔包含该选项 (由 DODAG 根决定), 并且在响应单播请求时 MUST 包含该选项, 例如单播 DODAG 信息请求 (DODAG Information Solicitation, DIS) 消息.

  • Option Type: 0x04
  • Option Length: 14
  • Flags: Flags 字段中剩余的 4 个未使用位保留供标志使用. 发送方 MUST 将该字段初始化为零, 接收方 MUST 忽略该字段.
  • Authentication Enabled (A): 1 位标志, 描述网络的安全模式. 该位描述节点在作为路由器加入网络之前是否必须向密钥授权方认证. 如果 DIO 不是安全 DIO, 则 'A' 位 MUST 为零.
  • Path Control Size (PCS): 3 位无符号整数, 用于配置可分配给 Path Control 字段的位数 (见第 9.9 节). 注意, 当使用 PCS 来确定 Path Control 字段宽度时, 会加上 1, 即 PCS 值为 0 时会导致 Path Control 字段中有 1 个活动位. PCS 的默认值为 DEFAULT_PATH_CONTROL_SIZE.
  • DIOIntervalDoublings: 8 位无符号整数, 用于配置 DIO Trickle 计时器的 Imax (见第 8.3.1 节). DIOIntervalDoublings 的默认值为 DEFAULT_DIO_INTERVAL_DOUBLINGS.
  • DIOIntervalMin: 8 位无符号整数, 用于配置 DIO Trickle 计时器的 Imin (见第 8.3.1 节). DIOIntervalMin 的默认值为 DEFAULT_DIO_INTERVAL_MIN.
  • DIORedundancyConstant: 8 位无符号整数, 用于配置 DIO Trickle 计时器的 k (见第 8.3.1 节). DIORedundancyConstant 的默认值为 DEFAULT_DIO_REDUNDANCY_CONSTANT.
  • MaxRankIncrease: 16 位无符号整数, 用于配置 DAGMaxRankIncrease, 即支持本地修复时 Rank 允许增加的幅度. 如果 DAGMaxRankIncrease 为 0, 则该机制被禁用.
  • MinHopRankIncrease: 16 位无符号整数, 用于配置第 3.5.1 节所述的 MinHopRankIncrease. MinHopRankInc 的默认值为 DEFAULT_MIN_HOP_RANK_INCREASE.
  • Objective Code Point (OCP): 16 位无符号整数. OCP 字段标识 OF, 并由 IANA 管理.
  • Reserved: 7 位未使用字段. 发送方 MUST 将该字段初始化为零, 接收方 MUST 忽略该字段.
  • Default Lifetime: 8 位无符号整数. 这是所有 RPL 路由默认使用的生命周期. 它以 Lifetime Unit 为单位表示, 例如以秒为单位的默认生命周期为 (Default Lifetime) * (Lifetime Unit).
  • Lifetime Unit: 16 位无符号整数. 提供 RPL 中用于表示路由生命周期的单位, 以秒为单位. 对于非常稳定的网络, 它可以是数小时到数天.

6.7.7. RPL Target

RPL Target 选项 MAY 出现在 DAO 消息中, 其格式如下:

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x05 | Option Length | Flags | Prefix Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Target Prefix (Variable Length) |
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

图 25: RPL Target 选项格式

RPL Target 选项用于指示沿 DODAG 可达或被查询的 Target IPv6 地址, 前缀或组播组. 在 DAO 中, RPL Target 选项指示可达性.

RPL Target 选项 MAY 可选地与 RPL Target Descriptor 选项 (图 30) 配对, 后者用于限定该 target.

在 DAO 消息中, 一个或多个 Transit Information 选项 (第 6.7.8 节) MAY 直接跟在一个或多个 Target 选项组成的集合之后 (其中每个 Target 选项 MAY 如上所述与 RPL Target Descriptor 选项配对). DAO 消息的结构, 包括 Target 选项如何与 Transit Information 选项结合使用, 在第 9.4 节中进一步描述.

RPL Target 选项可以按需重复, 以指示多个 target.

  • Option Type: 0x05
  • Option Length: 可变, 选项以八位字节为单位的长度, 不包括 Type 和 Length 字段.
  • Flags: 8 位未使用字段, 保留供标志使用. 发送方 MUST 将该字段初始化为零, 接收方 MUST 忽略该字段.
  • Prefix Length: 8 位无符号整数. IPv6 Prefix 中有效前导位的数量.
  • Target Prefix: 可变长度字段, 标识一个 IPv6 目的地址, 前缀或组播组. Prefix Length 字段包含前缀中有效前导位的数量. 前缀长度之后的前缀位 (如果有) 为保留位, 发送时 MUST 将其设置为零, 接收时 MUST 忽略.

6.7.8. 传输信息 (Transit Information)

Transit Information 选项 MAY 出现在 DAO 消息中, 其格式如下:

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x06 | Option Length |E| Flags | Path Control |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Path Sequence | Path Lifetime | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
+ +
| |
+ Parent Address* +
| |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

'*' 表示 DODAG Parent Address 子字段并不总是存在, 如下文所述.

图 26: Transit Information 选项格式

Transit Information 选项用于让节点指示到一个或多个目的地的路径属性. 目的地由紧邻 Transit Information 选项之前的一个或多个 Target 选项指示.

Transit Information 选项可用于让节点向正在收集 DODAG 路由信息的祖先节点指示自己的 DODAG 父节点, 通常用于构建源路由. 在 Non-Storing 运行模式下, 该祖先节点将是 DODAG 根, 并且该选项由 DAO 消息携带. 在 Storing 运行模式下, 不需要 DODAG Parent Address 子字段, 因为 DAO 消息会直接发送到父节点. 选项长度用于确定 DODAG Parent Address 子字段是否存在.

如果一个 non-storing 节点有多个 DAO 父节点, 则它 MAY 在 non-storing 目的地通告操作中为每个 DAO 父节点包含一个 Transit Information 选项. 该节点可以在不同 DAO 父节点组之间分配 Path Control 字段中的位, 以便在父节点之间传达偏好. 当 DODAG 根在备选父节点/路径之间进行选择以构造 Downward 路由时, 该偏好可能影响其决策.

一个或多个 Transit Information 选项 MUST 由一个或多个 RPL Target 选项引导. 以这种方式, RPL Target 选项指示子节点, 而 Transit Information 选项枚举 DODAG 父节点. DAO 消息的结构, 包括 Target 选项如何与 Transit Information 选项结合使用, 在第 9.4 节中进一步描述.

典型的 non-storing 节点会使用多个 Transit Information 选项, 并将由此形成的 DAO 消息直接发送到根. 典型的 storing 节点会使用一个不带父字段的 Transit Information 选项, 并将由此形成的 DAO 消息发送给一个或多个父节点, 同时按后文说明对 Path Control 进行额外调整.

例如, 在 Non-Storing 运行模式下, 令 Tgt(T) 表示 Target T 的 Target 选项. 令 Trnst(P) 表示包含父地址 P 的 Transit Information 选项. 考虑一个 non-storing 节点 N 的情况, 它通告自己拥有的 target N1 和 N2, 并且有父节点 P1, P2 和 P3. 在这种情况下, DAO 消息预期包含序列 ((Tgt(N1), Tgt(N2)), (Trnst(P1), Trnst(P2), Trnst(P3))), 使 Target 选项组 {N1, N2} 由 Transit Information 选项描述为具有父节点 {P1, P2, P3}. 随后, 该 non-storing 节点会将该 DAO 消息直接发往 DODAG 根, 并通过 DODAG 父节点 P1, P2 或 P3 之一转发该 DAO 消息.

  • Option Type: 0x06
  • Option Length: 可变, 取决于 DODAG Parent Address 子字段是否存在.
  • External (E): 1 位标志. 设置 'E' 标志表示父路由器将外部 target 重新分发到 RPL 网络中. 外部 Target 是通过替代协议学习到的 Target. 外部 target 列在紧邻 Transit Information 选项之前的 Target 选项中. 外部 Target 不预期支持 RPL 消息和选项.
  • Flags: Flags 字段中剩余的 7 个未使用位保留供标志使用. 发送方 MUST 将该字段初始化为零, 接收方 MUST 忽略该字段.
  • Path Control: 8 位位字段. Path Control 字段限制可以向多少个 DAO 父节点发送通告到特定目的地连通性的 DAO 消息, 同时也提供某种相对偏好指示. 该限制为 LLN 中总体 DAO 消息扇出提供一定界限. Path Control 中各位的分配和排序也用于传达偏好. 并非所有这些位都可以启用, 这取决于 DODAG Configuration 中的 PCS. 如图 27 所示, Path Control 字段被划分为四个子字段, 每个子字段包含两个位: PC1, PC2, PC3 和 PC4. 子字段按偏好排序, PC1 最受偏好, PC4 最不受偏好. 在一个子字段内部, 没有偏好顺序. 通过像 ECMP 一样对父节点分组并排序, 可以将父节点与 Path Control 字段中的特定位关联起来, 从而传达偏好.
                                 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|PC1|PC2|PC3|PC4|
+-+-+-+-+-+-+-+-+

图 27: Path Control 偏好子字段编码

  • Path Sequence: 8 位无符号整数. 当拥有 Target 前缀的节点发出 RPL Target 选项时 (即在 DAO 消息中), 该节点会设置 Path Sequence, 并在每次发出带有更新信息的 RPL Target 选项时递增 Path Sequence.
  • Path Lifetime: 8 位无符号整数. 前缀用于路由确定时保持有效的时间长度, 单位为 Lifetime Unit (从 Configuration 选项获得). 该周期从看到新的 Path Sequence 时开始. 全 1 位值 (0xFF) 表示无限. 全 0 位值 (0x00) 指示可达性丢失. 在本文档中, 对某个 Target 而言, 包含 Path Lifetime 为 0x00 的 Transit Information 选项的 DAO 消息称为 No-Path (针对该 Target).
  • Parent Address (optional): 最初发出 Transit Information 选项的节点的 DODAG 父节点 IPv6 地址. 根据 DODAG Mode of Operation (Storing 或 Non-Storing), 并由 Transit Information 选项长度指示, 该字段可以不存在.

Transit Information 选项的未分配位为保留位. 发送时 MUST 将其设置为零, 接收时 MUST 忽略.

6.7.9. 请求信息 (Solicited Information)

Solicited Information 选项 MAY 出现在 DIS 消息中, 其格式如下:

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x07 |Opt Length = 19| RPLInstanceID |V|I|D| Flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ DODAGID +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version Number |
+-+-+-+-+-+-+-+-+

图 28: Solicited Information 选项格式

Solicited Information 选项用于让节点从相邻节点的一个子集请求 DIO 消息. Solicited Information 选项可以指定接收节点需要匹配的若干谓词条件. 请求方使用它来限制来自"不感兴趣"节点的回复数量. 这些谓词会影响节点是否重置其 DIO Trickle 计时器, 如第 8.3 节所述.

Solicited Information 选项包含一些标志, 指示节点在决定是否重置其 Trickle 计时器时应检查哪些谓词. 当所有谓词均为真时, 节点重置其 Trickle 计时器. 如果设置了某个标志, 则 RPL 节点 MUST 检查相关谓词. 如果清除了某个标志, 则 RPL 节点 MUST NOT 检查相关谓词. (如果清除了某个标志, RPL 节点假定相关谓词为真.)

  • Option Type: 0x07
  • Option Length: 19
  • V: 'V' 标志是 Version 谓词. 如果接收方的 DODAGVersionNumber 与请求的 Version Number 匹配, 则 Version 谓词为真. 如果清除了 'V' 标志, 则 Version 字段无效, 发送时 Version 字段 MUST 设置为零, 接收时 MUST 忽略.
  • I: 'I' 标志是 InstanceID 谓词. 当 RPL 节点当前的 RPLInstanceID 与请求的 RPLInstanceID 匹配时, InstanceID 谓词为真. 如果清除了 'I' 标志, 则 RPLInstanceID 字段无效, 发送时 RPLInstanceID 字段 MUST 设置为零, 接收时 MUST 忽略.
  • D: 'D' 标志是 DODAGID 谓词. 如果 RPL 节点的父节点集合具有与 DODAGID 字段相同的 DODAGID, 则 DODAGID 谓词为真. 如果清除了 'D' 标志, 则 DODAGID 字段无效, 发送时 DODAGID 字段 MUST 设置为零, 接收时 MUST 忽略.
  • Flags: Flags 字段中剩余的 5 个未使用位保留供标志使用. 发送方 MUST 将该字段初始化为零, 接收方 MUST 忽略该字段.
  • Version Number: 8 位无符号整数, 包含有效时被请求的 DODAGVersionNumber 值.
  • RPLInstanceID: 8 位无符号整数, 包含有效时被请求的 RPLInstanceID.
  • DODAGID: 128 位无符号整数, 包含有效时被请求的 DODAGID.

Solicited Information 选项的未分配位为保留位. 发送时 MUST 将其设置为零, 接收时 MUST 忽略.

6.7.10. 前缀信息 (Prefix Information)

前缀信息选项 (Prefix Information Option, PIO) MAY 出现在 DIO 消息中, 并携带 IPv6 ND Prefix Information 选项中规定的信息, 这些信息在 [RFC4861], [RFC4862] 和 [RFC6275] 中定义, 供 RPL 节点和 IPv6 主机使用. 特别是, RPL 节点可以使用该选项, 基于父节点按 [RFC4862] 通告的前缀进行无状态地址自动配置 (Stateless Address Autoconfiguration, SLAAC), 并按 [RFC6275] 通告自己的地址. DODAG 根对设置该信息具有权威性. 除非 RPL 路由器在设置 'R' 标志时可以覆盖 Interface ID 以便在 PIO 中指示其完整地址, 否则该信息沿 DODAG 向下传播时保持不变. 为了作为 RPL 选项携带, 该选项的格式经过修改 (Type, Length, Prefix), 如下所示:

如果在 DIO 中收到的 PIO 唯一期望效果是向接收节点提供父节点的全局地址, 则发送方会清除 'A' 和 'L' 位并设置 'R' 位. 接收后, RPL 不会根据该前缀自动配置地址或连接路由 [RFC4862]. 与所有情况一样, 当未设置 'L' 位时, RPL 节点 MAY 在发送给其子节点的 PIO 中包含该前缀.

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x08 |Opt Length = 30| Prefix Length |L|A|R|Reserved1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Valid Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Preferred Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Prefix +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

图 29: Prefix Information 选项格式

PIO 可用于分发 DODAG 内使用的前缀, 例如用于地址自动配置.

关于 PIO, 应以 [RFC4861] 和 [RFC6275] 作为权威参考. 为方便起见, 此处转录字段说明:

  • Option Type: 0x08
  • Option Length: 30. 注意, 与 IPv6 ND 不同, 此长度以单个八位字节为单位表示.
  • Prefix Length: 8 位无符号整数. Prefix 字段中有效前导位的数量. 取值范围为 0 到 128. Prefix Length 字段为链路内判定提供必要信息 (与 PIO 中的 'L' 标志结合使用时). 它也有助于 [RFC4862] 中规定的地址自动配置, 对该用途可能存在更多前缀长度限制.
  • L: 1 位 on-link 标志. 设置时, 表示该前缀可用于链路内判定. 未设置时, 该通告不声明该前缀的 on-link 或 off-link 属性. 换言之, 如果未设置 'L' 标志, RPL 节点 MUST NOT 得出从该前缀派生的地址为 off-link 的结论. 也就是说, 它 MUST NOT 更新先前关于该地址为 on-link 的指示. 作为路由器运行的 RPL 节点 MUST NOT 传播设置了 'L' 标志的 PIO. 作为路由器运行的 RPL 节点 MAY 传播未设置 'L' 标志的 PIO.
  • A: 1 位自主地址配置标志. 设置时, 表示该前缀可按 [RFC4862] 中的规定用于无状态地址配置. 当两个协议 (ND RA 和 RPL DIO) 用于在同一链路上携带 PIO 时, RPL 节点可以使用其中任一协议进行 SLAAC. 也可以通过强制该协议中携带的 PIO 的 'A' 标志为 0, 使任一协议不适用于 SLAAC 操作.
  • R: 1 位路由器地址标志. 设置时, 表示 Prefix 字段包含分配给发送路由器的完整 IPv6 地址, 该地址可作为 target 选项中的父节点使用. 所指示的前缀是 Prefix 字段的前 prefix length 位. 路由器 IPv6 地址与通告的前缀具有相同作用域, 并遵循相同的生命周期值. Prefix 字段的这种用法与其通告前缀本身的用法兼容, 因为 Prefix Advertisement 只使用前导位. 因此, 对该标志位的解释独立于 on-link (L) 和自主地址配置 (A) 标志位所需的处理.
  • Reserved1: 5 位未使用字段. 发送方 MUST 将其初始化为零, 接收方 MUST 忽略.
  • Valid Lifetime: 32 位无符号整数. 前缀用于链路内判定时保持有效的时间长度, 以秒为单位 (相对于数据包发送时间). 全 1 位值 (0xFFFFFFFF) 表示无限. Valid Lifetime 也由 [RFC4862] 使用.
  • Preferred Lifetime: 32 位无符号整数. 通过无状态地址自动配置从该前缀生成的地址保持 preferred 状态的时间长度, 以秒为单位 (相对于数据包发送时间) [RFC4862]. 全 1 位值 (0xFFFFFFFF) 表示无限. 见 [RFC4862]. 注意, 为避免偏好已不再有效的地址, 该字段的值 MUST NOT 超过 Valid Lifetime 字段.
  • Reserved2: 该字段未使用. 发送方 MUST 将其初始化为零, 接收方 MUST 忽略.
  • Prefix: 一个 IPv6 地址或 IPv6 地址前缀. Prefix Length 字段包含前缀中有效前导位的数量. 前缀长度之后的前缀位为保留位, 发送方 MUST 将其初始化为零, 接收方 MUST 忽略. 路由器 SHOULD NOT 为链路本地前缀发送 prefix 选项, 主机 SHOULD 忽略此类 prefix 选项. non-storing 节点在拥有该前缀中的地址之前 SHOULD 避免通告该前缀, 随后它 SHOULD 在该字段中通告其完整地址, 并设置 'R' 标志. 如此通告带有 'R' 标志的完整地址的节点, 其子节点随后可以使用该地址来确定 Transit Information 选项中 DODAG Parent Address 子字段的内容.

PIO 的未分配位为保留位. 发送时 MUST 将其设置为零, 接收时 MUST 忽略.

6.7.11. RPL Target Descriptor

RPL Target 选项 MAY 紧随一个不透明描述符, 用于限定该特定 target.

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x09 |Opt Length = 4 | Descriptor
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Descriptor (cont.) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

图 30: RPL Target Descriptor 选项格式

RPL Target Descriptor 选项用于限定一个 target, 这有时称为 "tagging".

每个 target 最多可以有一个 descriptor. descriptor 由将 Target 注入 RPL 网络的节点设置. 在 DAO 消息中沿 DODAG 向 Upward 传播该 Target 的路由器 MUST 复制该 descriptor, 但不得修改它.

  • Option Type: 0x09
  • Option Length: 4
  • Descriptor: 32 位无符号整数. 不透明.