静态上下文标头压缩(SCHC,发音为CHIC)是LPWAN网络的通用压缩机制。它在IETF上是标准化的。
此实现将SCHC应用于COAP/UDP/IPv6标头,但可以扩展到其他类型的字段。
本文档描述了{{id.Toutain-lpwan-ipv6 static-context-hc}}}和{iD.toutain-lpwan-lpwan-coap-coap-coap-contatic-context-hc}}中定义的通用压缩/解压缩过程的应用。
目前,仅对实现进行了上行链路和下行链路测试,从设备(DEV)通信到基础结构中的LPWAN压缩机/拆卸器(SC),并在SCHC C/D顶部运行的简单COAP服务器。设备实现在Python中写入。目前,它将PYCOM API用于LORA,并且可以轻松适应Sigfox。
设备生成了COAP/UDP/IPv6数据包,设备解析此数据包以获取标头字段的每个值,然后该设备搜索与此数据包格式匹配的压缩规则。如果在上下文中有一条规则与数据包的标题格式和值匹配,则使用该规则指定的压缩/减压操作(CDA)压缩标题字段,并将压缩数据包通过空气发送到基础结构C/d。
收到后,压缩数据包由基础结构C/D解析,以描绘规则标识符(第一个字节),每个后续的标头字段(规则指定)和有效载荷。最后,如规则所述,LC对标头进行解压缩。然后处理COAP消息,如果需要答案,则会压缩响应并将其发送回对其进行解压缩的设备。
为此,该设备是在Lopy模块上实现的,该模块能够通过Lora传输,并且可以在Micropython中轻松编程。基础架构C/S由HTTP服务器使用Node.js实现,该服务器在发布消息中接收原始压缩数据包LPWAN有效载荷帧。答案包含在本文消息的确认中。
需要不同的类来实施压缩和减压。
Rulemngt.py定义了维持SCHC环境的Rulemanager类。
使用call the lulemanager()创建了一个rulemanager实例
RM = RuleManager()
那么可以使用Addrule方法添加规则:
RM.addRule(rule_coap0)
RM.addRule(rule_coap1)
该规则使用以下格式定义了OIN JSON:
rule_coap0 = {"ruleid" : 0,
"content" : [["IPv6.version", 1, "bi", 6, "equal", "not-sent"],
["IPv6.trafficClass", 1, "bi", 0x00, "equal", "not-sent"]] }
规则由两个要素的列表(字典)组成:
RULID定义规则号,
内容包含一系列字段描述:
方法FindRuleFromid(ruleID)返回对应规则ID的规则。
方法FindRuleFrompkt(标题,方向)返回第一个参数中包含的标题字段列表的规则。该值通常来自使用类解析器进行的数据包标题解析。第二个参数是“向上”,“ DW”或“ BI”,这表明了设备的角度的方向。
对于这两种方法,如果找不到规则,则没有任何规则。