La compresión del encabezado de contexto estático (SCHC, pronunciado chic) es un mecanismo de compresión genérico para las redes LPWAN. Está estandarizado en el IETF.
Esta implementación aplica SCHC a los encabezados COAP/UDP/IPv6, pero se puede extender a otro tipo de campos.
Este documento describe la aplicación de procesos genéricos de compresión/descompresión definidos en {{id.toutain-lpwan-ipv6-static-context-hc}} y {{id.toutain-lpwan-coap-static-context-hc}}.
Por el momento, la implementación solo se ha probado el enlace ascendente y el enlace descendente, comunicándose desde el dispositivo (dev) al compresor/descompresor de LPWAN (SC) en la infraestructura con un servidor COAP simple que se ejecuta sobre el SCHC C/D. La implementación del dispositivo se escribe en Python. Actualmente usa la API Pycom para Lora y se puede adaptar fácilmente para Sigfox.
El dispositivo genera un paquete COAP/UDP/IPv6, el dispositivo analiza este paquete para obtener cada valor de los campos de encabezado, luego el dispositivo busca una regla de compresión que coincida con este formato de paquete. Si hay una regla en el contexto que coincide con el formato de encabezado y los valores del paquete, los campos de encabezado se comprimen utilizando la acción de compresión/descompresión (CDA) especificada por esa regla y el paquete comprimido se envía sobre el aire a la infraestructura C/D.
Al recibir, el paquete comprimido se analiza por la infraestructura C/D para delinear el identificador de la regla (primer byte), cada campo de encabezado posterior (según lo especificado por la regla) y la carga útil. Finalmente, el LC descomprime los encabezados, como se describe en la regla. El mensaje COAP se procesa y, si se necesita una respuesta, la respuesta se comprime y se envía de vuelta al dispositivo que lo descomprimió.
Para este propósito, el dispositivo se implementa en un módulo Lopy, que puede transmitir a través de LORA y se puede programar fácilmente en Micopython. La infraestructura C/S se implementa con un Node.js por un servidor HTTP que recibe los marcos de carga útil LPWAN de paquetes comprimidos sin procesar en un mensaje de publicación. La respuesta se incluye en el reconocimiento de este mensaje de publicación.
Se necesitan diferentes clases para implementar la compresión y la descompresión.
Rulemngt.py define la clase Rulemanager que mantiene el contexto SCHC.
Se crea una instancia de Rulemanager con una llamada al Rulemanager ()
RM = RuleManager()
Entonces se pueden agregar reglas utilizando el método AddRule:
RM.addRule(rule_coap0)
RM.addRule(rule_coap1)
La regla se define oin json usando el siguiente formato:
rule_coap0 = {"ruleid" : 0,
"content" : [["IPv6.version", 1, "bi", 6, "equal", "not-sent"],
["IPv6.trafficClass", 1, "bi", 0x00, "equal", "not-sent"]] }
Una regla está compuesta de una lista (DictionNary) de dos elementos:
RuleId define el número de regla,
El contenido contiene una variedad de descripción de campo compuesta de:
El método FindRuleFromId (ReglyId) devuelve la regla correspondiente al RegleId.
El método FindRuleFrompkt (encabezado, dirección) Devuelve la regla correspondiente a la lista de campo del encabezado contenida en el primer argumento. Este valor proviene generalmente de un análisis de encabezado de paquetes realizado con el analizador de clase. El segundo argumento es "arriba", "dw" o "bi", indicación de la dirección desde el punto de vista del dispositivo.
Para ambos métodos, si no se encuentra ninguna regla, no se devuelve a None.