靜態上下文標頭壓縮(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”,這表明了設備的角度的方向。
對於這兩種方法,如果找不到規則,則沒有任何規則。