Статическое сжатие заголовка контекста (SCHC, произносится шикарное) - это общий механизм сжатия для сетей LPWAN. Он стандартизирован в IETF.
Эта реализация применяет SCHC к заголовкам COAP/UDP/IPv6, но может быть расширена на другие типы полей.
В этом документе описывается приложение процессов общего сжатия/декомпрессии, определенных в {{id.toutain-lpwan-ipv6-static-context-hc}} и {{id.toutain-lpwan-coap-static-context-hc}}}.
На данный момент реализация была протестирована только восходящей линии связи и нисходящей линии связи, передавая от устройства (DEV) с компрессором/декомпрессором LPWAN (SC) в инфраструктуре с простым сервером COAP, работающим поверх C/D. Реализация устройства написана в Python. В настоящее время он использует Pycom API для Lora и может быть легко адаптирован для Sigfox.
Устройство генерируется пакетом COAP/UDP/IPv6, устройство анализирует этот пакет, чтобы получить каждое значение полей заголовка, а затем устройство ищет правило сжатия, которое соответствует этому формату пакета. Если в контексте есть правило, которое соответствует формату заголовка и значениям пакета, поля заголовка сжаты с использованием действия сжатия/декомпрессии (CDA), указанного этим правилом, а сжатый пакет отправляется через воздух в инфраструктуру C/D.
После получения сжатого пакета проанализируется инфраструктура C/D, чтобы определить идентификатор правила (первый байт), каждое последующее поле заголовка (как указано правилом) и полезной нагрузки. Наконец, LC распаковывает заголовки, как описано в правиле. Затем обрабатывается сообщение COAP, и, если ответ необходим, ответ сжимается и отправляется обратно на устройство, которое его распаковало.
Для этого устройство реализовано на модуле LOPY, который способен передавать через LORA и может быть легко запрограммирован в микропитоне. Инфраструктура C/S реализована с помощью node.js с помощью HTTP -сервера, который получает рамы полезной нагрузки LPWAN с необработанным пакетом в сообщении. Ответ включен в подтверждение этого сообщения.
Различные классы необходимы для реализации сжатия и декомпрессии.
Rulemngt.py определяет класс Rulemanager, который поддерживает контекст SCHC.
Экземпляр Rulemanager создан с помощью вызова The 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"]] }
Правило состоит из списка (DictionNary) из двух элементов:
ruleId определяет номер правила,
Контент содержит массив описания поля, состоящий из:
Метод FindRuleFromid (ruleId) возвращает правило, соответствующее правилу.
Метод FindRuleFrompkt (заголовок, направление) возвращает правило, соответствующее списку полевых полетов, содержащийся в первом аргументе. Это значение, как правило, поступает из анализа заголовка пакета, выполненного с анализатором класса. Второй аргумент - либо «вверх», «DW», либо «Bi», указывает направление с точки зрения устройства.
Для обоих методов, если правило не найдено, ни один не возвращается.