SCHC(Static Context Header Compression,静态上下文头部压缩)的开源实现

目录

OpenSCHC 介绍

长期目标

OpenSCHC 许可

架构理解

​编辑

lab.SCHC FullSDK 

SCHC implementation for Python and Javascript

schc-module-ns3


静态上下文头部压缩(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):存储一组规则,并提供安装或检索规则的方法。

规则由两个元素组成:

  1. RuleID:通过编号标识规则。
  2. 内容(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) 

文档是法语的。 

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值