4. 新的 Neighbor Discovery 选项和消息 (New Neighbor Discovery Options and Messages)
4. 新的 Neighbor Discovery 选项和消息 (New Neighbor Discovery Options and Messages)
本节定义本规范使用的新的 Neighbor Discovery 消息选项. Address Registration Option 由主机使用, 而 Authoritative Border Router Option 和 6LoWPAN Context Option 用于可替换的路由器到路由器交互. 本节还定义新的路由器到路由器 Duplicate Address Request 和 Duplicate Address Confirmation 消息.
4.1. Address Registration Option
路由器需要知道可直接到达的主机 IP 地址集合及其对应的链路层地址. 随着无线可达性的变化, 这些信息需要被维护. 为此, 引入 Address Registration Option (ARO), 它可以包含在主机发送的单播 NS 消息中. 因此, 它可以包含在主机作为 NUD 的一部分发送的单播 NS 消息中, 用于确定主机仍可到达默认路由器. 接收路由器使用 ARO 来可靠地维护其 Neighbor Cache. 相同的选项也包含在相应的 NA 消息中, 并通过 Status 字段指示注册成功或失败. 此选项始终由主机发起.
ARO 中包含的信息也包含在 6LR 与 6LBR 之间使用的多跳 DAR 和 DAC 消息中, 但该选项本身不在这些消息中使用.
ARO 对可靠性和节能是必需的. lifetime 字段为主机提供灵活性, 使其能够注册一个在预期睡眠调度期间仍应可用的地址 (例如, 继续由 6LR 在路由协议中通告等).
NS 的发送者还包含其正在注册地址的接口的 EUI-64 [EUI64]. 这被用作检测重复地址的唯一 ID. 它用于区分同一节点重新注册其地址, 以及另一个不同节点 (具有不同的 EUI-64) 注册已被其他节点使用的地址. EUI-64 还用于将携带错误 Status 码的 NA 递送到主机基于 EUI-64 的链路本地 IPv6 地址 (见第 6.5.2 节).
当主机使用 ARO 时, MUST 包含 SLLAO (Source Link-Layer Address Option) [RFC4861], 且要注册的地址 MUST 是 NS 消息的 IPv6 源地址.
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 | Length = 2 | Status | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Registration Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ EUI-64 +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段:
Type: 33
Length: 8-bit unsigned integer. 选项长度, 以 8 字节为单位. 始终为 2.
Status: 8-bit unsigned integer. 指示 NA 响应中注册的状态. 在 NS 消息中 MUST 设置为 0. 见下文.
Reserved: 此字段未使用. 发送者 MUST 将其初始化为零, 接收者 MUST 忽略它.
Registration Lifetime: 16-bit unsigned integer. 路由器应为包含此选项的 NS 的发送者保留 NCE 的时间, 以 60 秒为单位.
EUI-64: 64 bits. 此字段通过原样包含分配给 Registered Address 的 EUI-64 标识符 [EUI64], 用于唯一标识该 Registered Address 的接口.
NA 中使用的 Status 值如下:
+--------+--------------------------------------------+
| Status | Description |
+--------+--------------------------------------------+
| 0 | Success |
| 1 | Duplicate Address |
| 2 | Neighbor Cache Full |
| 3-255 | Allocated using Standards Action [RFC5226] |
+--------+--------------------------------------------+
表 1
4.2. 6LoWPAN Context Option
6LoWPAN Context Option (6CO) 携带用于 LoWPAN 头部压缩的前缀信息, 类似于 [RFC4861] 的 PIO. 但是, 前缀可以是 LoWPAN 本地的, 也可以是远程的, 因为头部压缩可能适用于所有 IPv6 地址. 此选项允许传播由 CID 标识的多个上下文, 用法如 [RFC6282] 所规定. 上下文可以是任意长度的前缀或一个地址 (/128), 一个 RA 消息中最多可携带 16 个 6CO.
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 | Length |Context Length | Res |C| CID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Valid Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. Context Prefix .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
图 1: 6LoWPAN Context Option 格式
Type: 34
Length: 8-bit unsigned integer. 选项长度 (包括 Type 和 Length 字段), 以 8 字节为单位. 根据 Context Prefix 字段的长度, 可以为 2 或 3.
Context Length: 8-bit unsigned integer. Context Prefix 字段中有效的前导位数. 取值范围为 0 到 128. 如果大于 64, 则 Length MUST 为 3.
C: 1-bit context Compression flag. 此标志指示该上下文是否可用于压缩. 无效的上下文 MUST NOT 用于压缩, 但 SHOULD 用于解压缩, 以防另一个压缩器尚未收到更新后的上下文信息. 此标志用于根据第 7.2 节中的建议管理上下文生命周期.
CID: 4-bit Context Identifier, 用于此前缀信息. CID 由基于上下文的头部压缩使用, 具体如 [RFC6282] 所规定. LoWPAN 的 CID 列表配置在发起该 6LoWPAN 上下文信息的 6LBR 上.
Res, Reserved: 此字段未使用. 发送者 MUST 将其初始化为零, 接收者 MUST 忽略它.
Valid Lifetime: 16-bit unsigned integer. 上下文对头部压缩或解压缩有效的时间长度, 以 60 秒为单位 (相对于收到分组的时间). 全零位值 (0x0) 表示此上下文条目 MUST 立即移除.
Context Prefix: 与 CID 字段对应的 IPv6 前缀或地址. 此字段的有效长度包含在 Context Length 字段中. 此字段用零填充, 以使选项长度成为 8 字节的倍数.
4.3. Authoritative Border Router Option
当 RA 消息用于在 route-over 拓扑中传播前缀和上下文信息时, 需要 Authoritative Border Router Option (ABRO). 在这种情况下, 6LR 会从其他 6LR 接收 PIO. 这意味着 6LR 不能简单地让最近收到的 RA 生效. 为了能够可靠地向 6LoWPAN 添加和移除前缀, 我们需要携带来自权威 6LBR 的信息. 这是通过引入版本号完成的: 6LBR 设置该版本号, 6LR 在通过此 ABRO 传播前缀和上下文信息时继续传播该版本号. 当存在多个 6LBR 时, 它们会具有各自独立的版本号空间. 因此, 此选项需要携带发起该组信息的 6LBR 的 IP 地址.
当 RA 用于在路由器之间传播信息时 (如第 8.2 节所述), 所有 RA 消息中 MUST 包含 ABRO.
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 | Length = 3 | Version Low |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version High | Valid Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ 6LBR Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段:
Type: 35
Length: 8-bit unsigned integer. 选项长度, 以 8 字节为单位. 始终为 3.
Version Low, Version High: Version Low 和 Version High 共同构成 Version Number 字段, 这是一个 32-bit unsigned integer, 其中 Version Low 是最低有效 16 位, Version High 是最高有效 16 位. 该版本号对应于 RA 消息中包含的这一组信息. 发起此前缀的权威 6LBR 每次其前缀或上下文信息集合发生变化时都会增加此版本号.
Valid Lifetime: 16-bit unsigned integer. 此组边界路由器信息有效的时间长度, 以 60 秒为单位 (相对于收到分组的时间). 全零位值 (0x0) 假定默认值为 10,000 (约一周).
Reserved: 此字段未使用. 发送者 MUST 将其初始化为零, 接收者 MUST 忽略它.
6LBR Address: 作为所包含版本号来源的 6LBR 的 IPv6 地址.
4.4. Duplicate Address Messages
对于第 8.2 节规定的 6LR 与 6LBR 之间的多跳 DAD 交换, 定义了两种新的 ICMPv6 消息类型, 称为 Duplicate Address Request (DAR) 和 Duplicate Address Confirmation (DAC). 我们避免为此目的重用 NS 和 NA 消息, 因为这些消息由中间 6LR 转发, 不受 hop limit=255 检查约束. 消息中包含的信息在其他方面与携带 ARO 的 NS 中的信息相同, 只是消息格式将 ARO 中的字段内联到消息中.
DAR 和 DAC 使用相同的消息格式, 但 ICMPv6 type 值不同, 且 Status 字段仅在 DAC 消息中有意义.
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 | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Status | Reserved | Registration Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ EUI-64 +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Registered Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IP 字段:
IPv6 Source: 发送路由器的非链路本地地址.
IPv6 Destination: 在 DAR 中, 为 6LBR 的非链路本地地址. 在 DAC 中, 这只是 DAR 的源地址.
Hop Limit: 发送时设置为 MULTIHOP_HOPLIMIT. 接收时 MUST 忽略.
ICMP 字段:
Type: DAR 为 157, DAC 为 158.
Code: 发送时设置为零. 接收时 MUST 忽略.
Checksum: ICMP 校验和. 见 [RFC4443].
Status: 8-bit unsigned integer. 指示 DAC 中注册的状态. 在 DAR 中 MUST 设置为 0. 见表 1.
Reserved: 此字段未使用. 发送者 MUST 将其初始化为零, 接收者 MUST 忽略它.
Registration Lifetime: 16-bit unsigned integer. 6LBR 应为 Registered Address 保留 DAD 表项 (第 8.2.2 节) 的时间长度, 以 60 秒为单位. 在 DAR 中, 值 0 表示应移除该 DAD 表项.
EUI-64: 64 bits. 此字段通过原样包含分配给 Registered Address 的 EUI-64 标识符 [EUI64], 用于唯一标识该 Registered Address 的接口.
Registered Address: 128-bit field. 携带主机所发送且包含 ARO 的 NS 中 IPv6 Source 字段里的主机地址.