2.5 头部压缩

IPv6包的压缩编码格式有两种:LOWPAN_IPHC和LOWPAN_NHC。

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

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

图2.5. 头部压缩

其中:

  • TF:业务类型流标签
  • NH:下一个头
  • HLIM:跳数限制
  • CID:上下文标识符扩展
  • SAC:源地址压缩
  • SAM:源地址模式
  • M:多播压缩
  • DAC:目的地址压缩
  • DAM:目的地址模式

尽管不需要深入理解细节,但是理解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: