目录
SCHC implementation for Python and Javascript
静态上下文头部压缩(SCHC,发音为“chick”)是一种针对低功耗广域网(LPWAN)的通用压缩机制。它在互联网工程任务组(IETF)中被标准化。最近对SCHC感兴趣,找了一些开源软件进行学习。
OpenSCHC 介绍
OpenSCHC 是 SCHC(静态上下文头部压缩)的一个开源实现,该标准由 IETF 的 LPWAN 工作组制定为 RFC8724。简而言之,这本质上是对 IP 协议头部进行压缩和分片,以便它们可以通过低数据速率、长距离的物联网网络进行传输。官方地址:Welcome to OpenSCHC’s documentation! — OpenSCHC documentation
长期目标
长期目标是为 SCHC 协议提供一个稳定、开源的 Python3 参考代码库。
OpenSCHC 许可
OpenSCHC 在 MIT 许可证下发布。
架构理解
下面展示了 OpenSCHC 实现的整体架构:
- 规则管理器(Rule Manager):存储一组规则,并提供安装或检索规则的方法。
规则由两个元素组成:
- RuleID:通过编号标识规则。
- 内容(Content):包含字段数组。详情请参考 SCHC 上下文数据模型。
-
应用(App 1 … App n):调用 SCHC 编排器以执行必要的 SCHC 操作的应用,这些操作简要定义如下:
-
压缩(Compression):在发送方使用特定规则(通过其 RuleID 标识)对应用提供的数据包头部进行压缩。
-
解压缩(Decompression):在接收方,收到压缩数据包后,调用解压缩器使用压缩数据包中携带的 RuleID 标识的规则来重建原始数据包。
-
分片(Fragmentation):在发送方使用 RuleID 调用分片操作,以从数据包(压缩或未压缩)生成一组分片。
-
重组(Reassembly):在接收方使用重组操作从分片集合中重构数据包。
-
分片模式和相关参数在 SCHC 协议中有详细描述。
网络连接器(Network Connector):与物理模型接口连接至真实的 LPWAN 网络(如 LoRa 或 Sigfox),或与链路层模拟器连接。
lab.SCHC FullSDK
这是一个完全用C语言实现的SCHC。官方网站:lab.SCHC (lab-schc.fr)
Actility 与 IMT Atlantique 合作发起的 lab.SCHC 项目,专注于推动 SCHC(静态上下文头部压缩)技术的发展,该技术旨在优化任何通信技术上的数据包传输。
该实验室的目标是探索新的改进方案、支持标准化、提高能源效率,并拓展 SCHC 的应用范围,以超越当前的技术水平。
其中一个关键目标是,通过提供一个工业级质量的开源嵌入式软件栈,来促进 SCHC 的广泛应用,从而实现各种设备和应用程序之间的无缝集成。该实验室旨在实现财务自主,并在全球范围内建立战略合作伙伴关系,进一步整合研究、行业影响力和教育资源。
想了解更多,可以参考ppt:slides-120-schc-a-schc-implementation-in-c-00 (ietf.org)
SCHC implementation for Python and Javascript
官方网站:ltn22/SCHC: SCHC implementation for Python and Javascript (github.com)
本实现将 SCHC 应用于 CoAP/UDP/IPv6 头部,但可以扩展到其他类型的字段。
本文档描述了在 {{I-D.toutain-lpwan-ipv6-static-context-hc}} 和 {{I-D.toutain-lpwan-coap-static-context-hc}} 中定义的通用压缩/解压缩过程的应用。
目前,该实现已经过测试,仅支持从设备(Dev)到基础设施中的 LPWAN 压缩器/解压缩器(SC)的上行和下行通信,基础设施上运行着一个简单的 CoAP 服务器,该服务器位于 SCHC C/D(压缩器/解压缩器)之上。设备实现是用 Python 编写的,目前使用 pycom API 进行 LoRa 传输,但可以轻松适配 Sigfox。
设备生成一个 CoAP/UDP/IPv6 数据包,解析该数据包以获取每个头部字段的值,然后设备搜索与该数据包格式相匹配的压缩规则。如果上下文中存在与数据包头部格式和值相匹配的规则,则使用该规则指定的压缩/解压缩操作(CDA)对头部字段进行压缩,并将压缩后的数据包通过空中接口发送到基础设施 C/D。
收到后,基础设施 C/D 解析压缩数据包以区分规则标识符(第一个字节)、每个后续头部字段(如规则中指定)和有效载荷。最后,LC(可能是指“本地压缩器”或“逻辑压缩器”)根据规则中描述的内容解压缩头部。然后处理 CoAP 消息,如果需要回复,则将回复压缩并发送回设备进行解压缩。
为此,设备是在 LoPy 模块上实现的,该模块能够通过 LoRa 传输数据,并且可以使用 MicroPython 轻松编程。基础设施 C/S(可能是指“客户端/服务器”或“压缩器/服务器”)是使用 Node.js 实现的 HTTP 服务器,它通过 POST 消息接收原始压缩数据包 LPWAN 有效载荷帧。答复(如果有的话)将遵循相同的流程,但方向相反。
schc-module-ns3
使用SCHC协议的设备形成的网络进行仿真,使用了免费的离散事件仿真软件Network Simulator 3 (NS3)软件。我们展示了如何创建一个模块,该模块实现特定于 SCHC 协议的压缩和解压缩功能,并将其集成到 NS3 中。 本章对 NS3 软件进行了简要介绍,然后描述了新模块的结构和实现。
官方链接:Ayoub Wael / schc-module-ns3 · GitLab (insa-rennes.fr)
文档是法语的。