2.5 头部压缩
6LoWPAN 定义了两种 IPv6 包压缩格式:LOWPAN_IPHC 和 LOWPAN_NHC。
为了能够更高效地压缩,LOWPAN_IPHC 依赖于完整的 6LoWPAN 信息。LOWPAN_IPHC 假设 6LoWPAN 通信都遵循下列条件:
- IP 的版本是 IPv6。
业务类型和流标签都是零。- 负载长度可以从下层协议头(6LoWPAN 分片头部或者 IEE E802.15.4 头部)中推断出。
- 跳数限制被源设置为一个知名值。
- 分配给 6LoWPAN 接口的地址由本地连接前缀或者更小的路由前缀构成。
- 分配给 6LoWPAN 接口的地址由 64 位扩展地址的接口标识符或者 16 位 IEEE 802.15.4 短地址构成。依赖于分包与这些通用情形的匹配程度,不同的字段可能不能被压缩,因此需要内嵌运载。LOWPAN_IPHC 编码的基本格式如下:
其中:
- 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: