跳到主要内容

3.2. IPv6 头部编码 (IPv6 Header Encoding)

以内联方式携带的字段 (部分或全部) 按照其在 IPv6 头部格式 [RFC2460] 中的相同顺序出现. Version 字段始终被省略. 单播 IPv6 地址可以压缩为 64 bit 或 16 bit, 或完全省略. 组播 IPv6 地址可以压缩为 8、32 或 48 bit. IPv6 Payload Length 字段必须 (MUST) 始终被省略, 并使用 6LoWPAN Fragmentation 头部或 IEEE 802.15.4 头部从较低层推断.

3.2.1. Traffic Class 和 Flow Label 压缩 (Traffic Class and Flow Label Compression)

IPv6 头部中的 Traffic Class 字段由 6 bit Diffserv 扩展 [RFC2474] 和 2 bit 显式拥塞通知 (Explicit Congestion Notification, ECN) [RFC3168] 组成. LOWPAN_IPHC 编码中的 TF 字段指示 Traffic Class 和 Flow Label 是否在压缩 IPv6 头部中以内联方式携带. 当包含 Flow Label 而 Traffic Class 被压缩时, 会包含额外 4 bit 以保持字节对齐. 这 4 bit 中的 2 bit 包含来自 Traffic Class 字段的 ECN bit.

为确保 ECN bit 在所有包含它们的编码中出现在相同位置, 压缩 IPv6 头部中的 Traffic Class 字段会右旋 2 bit. 编码如下所示:

                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|ECN| DSCP | rsv | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 4: TF = 00: Traffic Class 和 Flow Label 以内联方式携带

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|ECN|rsv| Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 5: TF = 01: Flow Label 以内联方式携带

0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|ECN| DSCP |
+-+-+-+-+-+-+-+-+

Figure 6: TF = 10: Traffic Class 以内联方式携带

3.2.2. 从封装头部派生 IID (Deriving IIDs from the Encapsulating Header)

当 SAM = 3 或 DAM = 3 时, LOWPAN_IPHC 分别省略源地址或目的地址的 IID. 在这种模式下, IID 从封装头部派生. 当封装头部携带 IPv6 地址时, 源地址和目的地址的 bit 从封装 IPv6 头部的源地址和目的地址复制而来.

本节其余部分定义 IEEE 802.15.4 [IEEE802.15.4] 链路层地址到 IID 的映射, 同时覆盖短 IEEE 802.15.4 地址和扩展 IEEE 802.15.4 地址. 未被上下文信息覆盖的 IID bit 如果与链路层地址映射匹配, 可以 (MAY) 被省略; 如果不匹配, 则禁止 (MUST NOT) 被省略.

扩展 IEEE 802.15.4 地址采用 IEEE EUI-64 地址形式. 从扩展地址生成 IID 的方式与 [RFC4291] Appendix A 中定义的方式相同. 将 IEEE EUI-64 标识符转换为接口标识符时, 唯一需要的变化是反转 universal/local bit.

短 IEEE 802.15.4 地址长度为 16 bit. 短地址通过将中间 16 bit 设置为 0xfffe、最低 16 bit 设置为短地址、所有其他 bit 设置为零, 映射到 IEEE EUI-64 地址的受限空间. 因此, 从短地址生成的 IID 形式如下:

0000:00ff:fe00:XXXX

其中 XXXX 携带短地址. universal/local bit 为零, 表示本地作用域.

这种非 EUI-64 标识符的映射不同于 [RFC4291] Appendix A 中给出的映射. 使用受限空间可确保不会与从非受限 IEEE EUI-64 地址生成的 IID 重叠. 此外, 在 IID 中间包含 0xfffe 有助于避免与其他本地管理的 IID 重叠.

从短 IEEE 802.15.4 地址到 64 bit IID 的这一映射, 也用于重构未被上下文信息覆盖的 IID 的任何部分.

3.2.3. 无状态组播地址压缩 (Stateless Multicast Address Compression)

当 M = 1 且 DAC = 0 时, LOWPAN_IPHC 支持组播地址的无状态压缩. IPv6 组播地址可以使用无状态压缩压缩到 48、32 或 8 bit. 该格式支持压缩请求节点组播地址 (Solicited-Node Multicast Address, ff02::1:ffXX:XXXX), 也支持压缩组播组标识符高位为零的任何 IPv6 组播地址. 8 bit 压缩形式只携带组播组标识符的最低有效 bit. 48 bit 和 32 bit 压缩形式除携带组播组标识符的最低有效 bit 外, 还以内联方式携带组播作用域和标志.

                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Scope | Group Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 7: DAM = 01. 48 bit 压缩组播地址
(ffFS::00GG:GGGG:GGGG)

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Scope | Group Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 8: DAM = 10. 32 bit 压缩组播地址
(ffFS::00GG:GGGG)

0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| Group ID |
+-+-+-+-+-+-+-+-+

Figure 9: DAM = 11. 8 bit 压缩组播地址 (ff02::GG)

3.2.4. 有状态组播地址压缩 (Stateful Multicast Address Compression)

当 M = 1 且 DAC = 1 时, LOWPAN_IPHC 支持组播地址的有状态压缩. 本文档当前定义 DAM = 00: 基于上下文压缩基于单播前缀的 IPv6 组播地址 (Unicast-Prefix-based IPv6 Multicast Addresses) [RFC3306][RFC3956]. 特别是, Prefix Length 和 Network Prefix 可以从上下文取得. 因此, LOWPAN_IPHC 只需以内联方式携带 4 bit Flags、4 bit Scope、8 bit Rendezvous Point Interface ID (RIID) 和 32 bit Group Identifier, 就能将基于单播前缀的 IPv6 组播地址压缩到 6 个八位字节.

                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Scope | Rsvd / RIID | Group Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 10: DAM = 00. 基于单播前缀的 IPv6 组播地址压缩

注意, Reserved 字段必须 (MUST) 携带 [RFC3306] 中描述的组播地址格式中的保留 bit. 当按照 [RFC3956] 中的描述在组播地址中编码 Rendezvous Point 时, Reserved 字段以内联方式携带 RIID bit.