2.5 头部压缩
IPv6包的压缩编码格式有两种:LOWPAN_IPHC和LOWPAN_NHC。
为了使高效压缩成为可能,LOWPAN_IPHC依赖于完整的6LoWPAN的信息。LOWPAN_IPHC假设6LoWPAN通信都遵循下列条件:
- IP的版本是IPv6。
业务类型和流标签都是零。- 负载长度可以从下层协议头(6LoWPAN分片头部或者IEEE802.15.4头部)中推断出。
- 跳数限制被源设置为一个知名值。
- 分配给6LoWPAN接口的地址由本地连接前缀或者更小的路由前缀构成。
- 分配给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: