6LoWPAN对IPV6头部的压缩部分详解

本文旨在帮助学习物联网系统设计课程中,对例题原理的理解

当一个6LoWPAN数据包第一个字节为Ox42,代表后面是HC1压缩。
按照顺序排列数据包,一般顺序为:Ox42,HC1 Encoding,HC2 Encoding,Hop Limit,Non-Compressed Fields Follow ......  (其中根据HC1中信息判断后面是否有HC2压缩,也就是HC2可以没有)

HC1 Encoding:该部分为8为,也就是16进制的两个数,如OxFB

HC1 encoding域的每一位指示意义如下:

▪ IPv6 源地址格式(bits 0 and 1):
➢ 00: PI, II
➢ 01: PI, IC
➢ 10: PC, II
➢ 11: PC, IC

 IPv6 目标地址(bits 2 and 3):
➢ 00: PI, II
➢ 01: PI, IC
➢ 10: PC, II
➢ 11: PC, IC

▪ 流量类型和流标签(bit 4):
➢ 0: 不省略,完整的8位流量类型和20位的流标签将被发送
➢ 1: 流量类型和流标签都置为0

▪ 下一个头部类型(bits 5 and 6):
➢ 00: 不压缩,发送完整的8bits
➢ 01: UDP
➢ 10: ICMP
➢ 11: TCP

HC2 压缩(bit 7):
➢ 0: 后面没有进一步的头部压缩
➢ 1: HC1压缩后面紧跟针对UDP、ICMP或TCP的HC2类型压缩,具
体是哪种协议类型由bits5和6决定。 encoding immediately 
followed by more header compression

看到这里,你肯定很懵逼,我也一样。别慌,我们在解释一下HC2每一位含义,最后举例就明白了

若HC2采用UDP格式压缩,则成为HC_UDP ,压缩的内
容包括UDP的源端口号、目标端口号、长度域。

HC_UDP encoding位的各个域意义为:
➢ UDP源端口号(bit 0): 0: 不压缩;1: 压缩至4位。实际的端口号等于
61616(对应十六进制:F0B0)+ short_port值,short_port用4位表示
。
➢ UDP目标端口号(bit 1): 0: 不压缩;1: 压缩至4位,方法同上。
➢ 长度 (bit 2): 0: 不压缩;1: 省略,长度由IPv6头部推出。UDP长度等于
IPv6头部所指示的负载长度减去IPv6头部与UDP头部之间的扩展头部长
度。
➢ 保留 (bit 3-7)


头部压缩大概有如下三种类型:

1.如果不进行任何压缩,则排列顺序为(标准IPv6在6LoWPAN中必须加上一
个dispatch,用于表明没有进行压缩)
➢ IPv6 dispatch(0x41),标准IPv6头部,标准Next Header

2.如果进行HC1压缩,则排列顺序为:
▪ HC1 dispatch(0x42),HC1 Encoding(用于指示哪些部分被压缩了),
跳数域,其他未压缩的域(根据HC1 Encoding中的顺序来排列如下)
➢ 源地址前缀(64 bits) ,源地址接口描述符(64 bits), 
➢ 目标地址前缀(64 bits) ,目标地址描述符 (64 bits),
➢ 流量类型 (8 bits),
➢ 流标签 (20 bits) 
➢ 下一个头部类型(8 bits)

3.若HC1压缩后面还继续有UDP_HC压缩,则排列顺序为: HC1 
dispatch(0x42),HC1 Encoding,HC_UDP Encoding,跳数域,IPv6
头部中未压缩的域,UDP头部中未压缩的域(按UDP头部原顺序排列,如果
源端口号和目标端口号同时压缩成4 bits,则两者按顺序合并成一个字节)。


例题:

现通过协议分析仪得到了一个6LoWPAN数据包。按网络
顺序,从适配层开始的字节依次如下: 0x42,0xFB,
0xE0,0x06,0x12,0x03,0x04,0x31,0x22,
0x44,0xC9,0x01,0xD6,0xB2,0x36,0x5A,
…。回答如下问题:
(1)该数据包所对应的目标地址的接口描述符是否被压
缩?若认为被压缩,请说明理由;若认为没有被压缩,请
写出该目标地址的接口描述符,给出分析过程。

由Ox42知该部分进行了HC压缩,其中HC1为OxFB(代表IPV6头部压缩),我们首先分析OxFB
OxFB二进制为1111 1011 
第0位:为1代表IPV6源地址前缀进行了压缩(如果为0则IPV6源地址前缀没有压缩)(IPV6源地址前缀一般64位)
第1位:为1代表IPV6源地址接口描述符进行了压缩(如果为0则IPV6源地址接口描述符没有压缩)(IPV6源地址接口描述符一般64位)

(补充:IPV6地址为128位,一般由x位前缀+128-x位接口描述符构成)

第2位:为1代表IPV6目标地址前缀进行了压缩(如果为0则IPV6目标地址前缀没有压缩)(IPV6目标地址前缀一般64位)
第3位:为1代表IPV6目标地址接口描述符进行了压缩(如果为0则IPV6目标地址接口描述符没有压缩)(IPV6目标地址接口描述符一般64位)

第4位:为1表示对流标签和流量类型进行压缩
第5、6位:代表下一个头部类型为UDP
第7位:后面紧跟HC2压缩,类型为UDP

此题答案为对目标地址的接口描述进行了压缩!

(2)该数据包所使用的传输层协议的目标端口号是多少
(用十进制形式表示)?给出分析过程

首先由第一问知HC1后面紧跟HC_UDP头部压缩,为OxE0 二进制1110 0000
对HC_UDP分析:
第0位:源地址压缩
第1位:目标地址压缩
第2位:长度压缩
后面保留

下一个字节表示跳数(不能被压缩省略),为Ox06
紧跟就是没有压缩的数据,根据前面HC1 HC2分析
由HC1知IPV6源地址和目标地址都被压缩 故该部分没有对应部分
HC_UDP知UDP源地址和目标地址都被压缩,但均被压缩至4bits,两个4bits连接在一起构成一字节。
根据定义UDP源地址=OxF0B0+压缩的4bits=OxF0B0+Ox1=OxF0B1=61616+1
目标地址同理

使用的传输层协议的目标端口号是61617

鄙人网上求证加上资料所得结论,如有不对欢迎指正!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新海诚学QT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值