6.4. 目的地通告对象 (Destination Advertisement Object, DAO)
目的地通告对象 (Destination Advertisement Object, DAO) 用于沿 DODAG 向 Upward 传播目的地信息. 在 Storing 模式下, DAO 消息由子节点单播到所选父节点. 在 Non-Storing 模式下, DAO 消息被单播到 DODAG 根. 在显式请求或发生错误时, DAO 消息的目的地可以选择通过向 DAO 发送方返回目的地通告确认 (Destination Advertisement Acknowledgement, DAO-ACK) 消息来确认该 DAO 消息.
6.4.1. DAO 基本对象格式 (Format of the DAO Base Object)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RPLInstanceID |K|D| Flags | Reserved | DAOSequence |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ DODAGID* +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option(s)...
+-+-+-+-+-+-+-+-+
'*' 表示 DODAGID 并不总是存在, 如下文所述.
图 16: DAO 基本对象
-
RPLInstanceID: 8 位字段, 指示从 DIO 获知的与 DODAG 关联的拓扑实例.
-
K: 'K' 标志指示预期接收方返回 DAO-ACK. 见第 9.3 节.
-
D: 'D' 标志指示 DODAGID 字段存在. 使用本地 RPLInstanceID 时, 该标志 MUST 被设置.
-
Flags: Flags 字段中剩余的 6 个未使用位保留供标志使用. 发送方 MUST 将该字段初始化为零, 接收方 MUST 忽略该字段.
-
Reserved: 8 位未使用字段. 发送方 MUST 将该字段初始化为零, 接收方 MUST 忽略该字段.
-
DAOSequence: 节点发出的每个唯一 DAO 消息都会递增该字段, 并在 DAO-ACK 消息中回显.
-
DODAGID (optional): 128 位无符号整数, 由 DODAG 根设置, 用于唯一标识 DODAG. 仅当 'D' 标志被设置时, 该字段才存在. 通常只有在使用本地 RPLInstanceID 时才存在该字段, 以标识与 RPLInstanceID 关联的 DODAGID. 使用全局 RPLInstanceID 时, 该字段无需存在.
-
DAO Base 的 未分配位 为保留位. 发送时 MUST 将其设置为零, 接收时 MUST 忽略.
6.4.2. 安全 DAO (Secure DAO)
安全 DAO 消息遵循图 7 中的格式, 其中基本格式是图 16 所示的 DAO 消息.
6.4.3. DAO 选项 (DAO Options)
DAO 消息 MAY 携带有效选项.
本规范允许 DAO 消息携带以下选项:
- 0x00 Pad1
- 0x01 PadN
- 0x05 RPL Target
- 0x06 Transit Information
- 0x09 RPL Target Descriptor
DAO 消息的一种特殊情况称为 No-Path, 在 Storing 模式下用于清除通过 DAO 操作配置的 Downward 路由状态. No-Path 携带 Target 选项以及关联的 Transit Information 选项, 生命周期为 0x00000000, 用于指示到该 Target 的可达性丢失.