2.5 头部压缩

  6LoWPAN 定义了两种 IPv6 包压缩格式:LOWPAN_IPHC 和 LOWPAN_NHC。

  为了能够更高效地压缩,LOWPAN_IPHC 依赖于完整的 6LoWPAN 信息。LOWPAN_IPHC 假设 6LoWPAN 通信都遵循下列条件:

  1. IP 的版本是 IPv6。
  2. 业务类型流标签都是零。
  3. 负载长度可以从下层协议头(6LoWPAN 分片头部或者 IEE E802.15.4 头部)中推断出。
  4. 跳数限制被源设置为一个知名值。
  5. 分配给 6LoWPAN 接口的地址由本地连接前缀或者更小的路由前缀构成。
  6. 分配给 6LoWPAN 接口的地址由 64 位扩展地址的接口标识符或者 16 位 IEEE 802.15.4 短地址构成。依赖于分包与这些通用情形的匹配程度,不同的字段可能不能被压缩,因此需要内嵌运载。LOWPAN_IPHC 编码的基本格式如下:
2.5 头部压缩 - 图1

图2.5 头部压缩

  其中:

  • TF(Traffic Class, Flow Label):业务类型流标签
  • NH( Next Header.):下一个头部
  • HLIM(Hop Limit):跳数限制
  • CID(Context Identifier Extension):上下文标识符扩展
  • SAC(Source Address Compression):源地址压缩
  • SAM( Source Address Mode):源地址模式
  • M(Multicast Compression):多播压缩
  • DAC(Destination Address Compression):目的地址压缩
  • DAM(Destination Address Mode):目的地址模式

  尽管不需要深入理解细节,但是理解 6LoWPAN 压缩的工作原理是很重要的。我们看两个例子:

1). HLIM: HLIM 字段包含 2 位共 4 个值,其中 3 个值表示跳数限制字段被压缩:

  • 00:跳数限制内嵌。跳数限制字段无压缩,且整个字段内嵌在LOWPAN_IPHC后面。
  • 01:跳数限制字段被压缩,且跳数限制为1。
  • 10:跳数限制字段被压缩,且跳数限制为64。
  • 11:跳数限制字段被压缩,且跳数限制为225。

2).SAC/DAC 用于 IPv6 源地址压缩。SAC 表示压缩地址是使用无状态压缩(SAC=0)还是使用基于上下文的有状态压缩(SAC=1)。DAC 依赖于 SAC,其使用遵循如下方法:

a.如果SAC=0,那么SAM为:

  • 00:128位。完整的地址被内嵌传输。无压缩。
  • 01:64位。地址的前64位(即本地连接前缀)被省略。剩下的64位被内嵌传输。
  • 10:16位。地址的前112位被省略。前64位是本地连接前缀,剩下的64位是 0000:00ff:fe00:XXXX,其中XXX是被内嵌传输的这16位。
  • 11:0位。地址的所有位都被省略。前64位是本地连接前缀,剩下的64位由封装头部(比如802.15.4或者iPv6源地址)计算而来。

b.如果SAC=1,那么SAM为:

  • 00:0位。未指明地址(::)。
  • 01:64位。地址可由上下午信息和64位内嵌比特推断出。
  • 10:
  • 11: