يعد ضغط رأس السياق الثابت (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 بسيط يعمل فوق SCHC C/D. تنفيذ الجهاز هو كتاب في بيثون. يستخدم حاليًا Pycom API لـ Lora ويمكن تكييفه بسهولة مع Sigfox.
يتم إنشاء حزمة COAP/UDP/IPv6 بواسطة الجهاز ، ويقوم الجهاز بتحليل هذه الحزمة للحصول على كل قيمة من حقول الرأس ، ثم يبحث الجهاز عن قاعدة ضغط يطابق تنسيق الحزمة هذه. إذا كانت هناك قاعدة في السياق يطابق تنسيق الرأس وقيم الحزمة ، يتم ضغط حقول الرأس باستخدام إجراء ضغط/إلغاء الضغط (CDA) المحدد بواسطة تلك القاعدة ويتم إرسال الحزمة المضغوطة عبر الهواء إلى البنية التحتية C/D.
عند الاستلام ، يتم تحليل الحزمة المضغوطة بواسطة البنية التحتية C/D لتحديد معرف القاعدة (البايت الأول) ، وكل حقل رأس لاحق (كما هو محدد في القاعدة) والحمولة النافعة. أخيرًا ، يقوم LC بإلغاء ضغط الرؤوس ، كما هو موضح في القاعدة. ثم تتم معالجة رسالة COAP وإذا كانت هناك حاجة إلى إجابة ، يتم ضغط الاستجابة وإرسالها مرة أخرى إلى الجهاز الذي فكه.
لهذا الغرض ، يتم تنفيذ الجهاز على وحدة LOPY ، والتي يمكن أن تنقل عبر Lora ويمكن برمجتها بسهولة في micropython. يتم تنفيذ البنية التحتية C/S باستخدام Node.js بواسطة خادم HTTP الذي يتلقى إطارات حزمة Packet LPWAN المضغوطة في رسالة منشور. يتم تضمين الإجابة في إقرار هذه الرسالة.
هناك حاجة إلى فئات مختلفة لتنفيذ الضغط وإزالة الضغط.
يحدد DroummentGt.py فئة RULEMANAGER التي تحافظ على سياق SCHC.
يتم إنشاء مثال على القوانين مع استدعاء القوانين ()
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) بإرجاع القاعدة المقابلة لـ RuleID.
تقوم الطريقة FindRuleFrompkt (رأس ، اتجاه) بإرجاع القاعدة المقابلة لقائمة حقل الرأس الواردة في الوسيطة الأولى. تأتي هذه القيمة بشكل عام من تحليل رأس الحزمة مع محلل الفصل. الوسيطة الثانية هي إما "UP" أو "DW" أو "BI" ، تشير إلى الاتجاه من وجهة نظر الجهاز.
لكلا الطريقتين ، إذا لم يتم العثور على قاعدة ، يتم إرجاع أي شيء.