1. مقدمة
ما هو بروتوكول Thread؟
Thread هو بروتوكول شبكة شبكة لاسلكية منخفضة الطاقة يستند إلى بروتوكول الإنترنت (IP) ويتيح اتصالات آمنة بين الأجهزة والأجهزة السحابية. يمكن لشبكات المواضيع التكيّف مع تغييرات البنية لتجنُّب الأعطال في نقطة واحدة.
ما هو OpenThread؟
بروتوكول OpenThread الذي أصدرته Google هو تطبيق مفتوح المصدر لبروتوكول Thread®.
ما هو "موجه حدودي لبروتوكول OpenThread"؟
OpenThread Border Router (OTBR) الذي أصدرته Google هو تطبيق مفتوح المصدر لبرنامج Thread Border Router.
البث المتعدد في IPv6
يحدِّد بروتوكول Thread سلسلة من الميزات لتفعيل البث المتعدد على شبكة غير متجانسة (شرائح Thread وشبكة Wi-Fi/إيثرنت) لعناوين البث المتعدد التي لها نطاق أكبر من النطاق المحلي للشبكة.
يسجِّل "جهاز توجيه حدود الخيط" مجموعة بيانات "جهاز توجيه العمود الفقري" (BBR)، وتكون خدمة BBR المحدّدة هي "جهاز توجيه العمود الفقري الأساسي" (PBBR)، وهو المسؤول عن توجيه البث المتعدد الوارد/الصادر.
يُرسِل جهاز Thread رسالة CoAP لتسجيل عنوان البث المتعدد في PBBR (تسجيل مستمع البث المتعدد، MLR اختصارًا) إذا كان العنوان أكبر من النطاق المحلي. يستخدم بروتوكول PBBR بروتوكول MLDv2 على واجهته الخارجية للتواصل مع شبكة IPv6 LAN/WAN الأوسع نطاقًا بشأن مجموعات البث المتعدد IPv6 التي يحتاج إلى الاستماع إليها، وذلك نيابةً عن شبكة Thread المحلية. ولا يعيد توجيه بروتوكول PBBR حركة البث المتعدد إلى شبكة Thread إلا إذا كان هناك جهاز Thread واحد على الأقل مشترك في الوجهة.
بالنسبة إلى الأجهزة الطرفية ذات الحد الأدنى من ميزات Thread، قد تعتمد على الجهاز الرئيسي لتجميع عنوان البث المتعدد وتنفيذ MLR نيابةً عنها، أو تسجيل نفسها إذا كان الجهاز الرئيسي يستخدم الإصدار 1.1 من Thread.
لمزيد من التفاصيل، يُرجى الاطّلاع على مواصفات المواضيع.
ما ستُنشئه
في هذا الدليل التعليمي حول رموز البرامج، ستُعدّ جهاز توجيه حدود Thread وجهازَي Thread، ثم تفعِّل ميزات البث المتعدد وتتحقّق منها على أجهزة Thread وأجهزة Wi-Fi.
المُعطيات
- كيفية إنشاء برنامج ثابت لجهاز nRF52840 يتيح استخدام ميزة "البث المتعدد عبر IPv6"
- كيفية الاشتراك في عناوين البث المتعدد IPv6 على أجهزة Thread
المتطلبات
- محطة عمل Linux لإنشاء وفلاش Thread RCP وواجهة سطر أوامر OpenThread واختبار البث المتعدد لبروتوكول IPv6
- جهاز Raspberry Pi لجهاز توجيه الحدود في Thread
- جهازان لتوصيل USB من طراز nRF52840 من شركة Nordic Semiconductor (واحد لوحدة التحكّم في الطاقة واثنان لأجهزة Thread الطرفية)
2. إعداد ميزة "إعادة التشغيل الآمن"
إنّ أسرع طريقة لإعداد ميزة "الاستجابة على الإنترنت" هي اتّباع دليل إعداد ميزة "الاستجابة على الإنترنت".
بعد اكتمال إعداد OTBR، استخدِم ot-ctl
للتحقّق من أنّ OTBR أصبح جهاز التوجيه الأساسي للشبكة الأساسية في غضون ثوانٍ.
> bbr state Primary Done > bbr BBR Primary: server16: 0xF800 seqno: 21 delay: 5 secs timeout: 3600 secs Done
3- إنشاء أجهزة Thread وفلاشها
أنشئ تطبيق Thread CLI باستخدام ميزة "البث المتعدد" وفلش لوحتَي nRF52840 DK.
إنشاء البرامج الثابتة لجهاز nRF52840 DK
اتّبِع التعليمات لنسخ المشروع وإنشاء البرامج الثابتة لشريحة nRF52840.
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
تابِع إنشاء شبكة Thread باستخدام لوحات nRF52840 ودرس تطبيقي OpenThread كما هو موضّح. بعد إعادة تحميل جهاز الطرف النهائي باستخدام صورة CLI، اتّبِع خطوات الانضمام إلى العقدة الثانية في شبكة Thread لإضافة جهاز Thread إلى شبكة Thread. كرِّر هذه الخطوات مع جهاز Thread الطرف الثاني.
4. الاشتراك في عنوان البث المتعدد لبروتوكول IPv6
الاشتراك في ff05::abcd على الجهاز النهائي nRF52840 1:
> ipmaddr add ff05::abcd Done
تأكَّد من أنّه تم الاشتراك في "ff05::abcd
" بنجاح:
> ipmaddr ff05:0:0:0:0:0:0:abcd <--- ff05::abcd subscribed ff33:40:fdde:ad00:beef:0:0:1 ff32:40:fdde:ad00:beef:0:0:1 ff02:0:0:0:0:0:0:2 ff03:0:0:0:0:0:0:2 ff02:0:0:0:0:0:0:1 ff03:0:0:0:0:0:0:1 ff03:0:0:0:0:0:0:fc Done
الاشتراك في ff05::abcd على الكمبيوتر المحمول:
نحتاج إلى نص برمجي Python subscribe6.py
للاشتراك في عنوان بث جماعي على الكمبيوتر المحمول.
انسخ الرمز أدناه واحفظه باسم subscribe6.py
:
import ctypes
import ctypes.util
import socket
import struct
import sys
libc = ctypes.CDLL(ctypes.util.find_library('c'))
ifname, group = sys.argv[1:]
addrinfo = socket.getaddrinfo(group, None)[0]
assert addrinfo[0] == socket.AF_INET6
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
interface_index = libc.if_nametoindex(ifname.encode('ascii'))
mreq = group_bin + struct.pack('@I', interface_index)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
print("Subscribed %s on interface %s." % (group, ifname))
input('Press ENTER to quit.')
يمكنك تشغيل subscribe6.py
للاشتراك في ff05::abcd
على واجهة شبكة Wi-Fi (مثل wlan0):
$ sudo python3 subscribe6.py wlan0 ff05::abcd Subscribed ff05::abcd on interface wlan0. Press ENTER to quit.
في ما يلي بنية الشبكة النهائية مع اشتراكات البث المتعدد:
بعد أن اشتركنا في عنوان البث المتعدد لبروتوكول IPv6 على كلٍّ من الجهاز الطرفي nRF52840 1 في شبكة Thread والكمبيوتر المحمول في شبكة Wi-Fi، سنتحقق من إمكانية الوصول إلى البث المتعدد لبروتوكول IPv6 في الاتجاهين في الأقسام التالية.
5- التحقّق من بث IPv6 المتعدد الوجهة الوارد
من المفترض أن نتمكّن الآن من الوصول إلى كلّ من "الجهاز الطرفي 1" من nRF52840 في شبكة Thread والكمبيوتر المحمول باستخدام عنوان البث المتعدّد IPv6 ff05::abcd
من شبكة Wi-Fi.
فحص اتصال ff05::abcd على OTBR عبر واجهة Wi-Fi:
$ ping -6 -b -t 5 -I wlan0 ff05::abcd PING ff05::abcd(ff05::abcd) from 2401:fa00:41:801:83c1:a67:ae22:5346 wlan0: 56 data bytes 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=1 ttl=64 time=57.4 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=1 ttl=64 time=84.9 ms (DUP!) 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=2 ttl=64 time=54.8 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=2 ttl=64 time=319 ms (DUP!) 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=3 ttl=64 time=57.5 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=3 ttl=64 time=239 ms (DUP!) # If using MacOS, use this command. The interface is typically not "wlan0" for Mac. $ ping6 -h 5 -I wlan0 ff05::abcd
يمكننا أن نرى أنّ OTBR يمكنه تلقّي ردّين على طلب فحص الاتصال من كلّ من "الجهاز الطرفي nRF52840 1" والكمبيوتر المحمول لأنّهما اشتركا في ff05::abcd
. يشير ذلك إلى أنّ بروتوكول OTBR يمكنه إعادة توجيه حزم البث المتعدد لطلب IPv6 Ping من شبكة Wi-Fi إلى شبكة Thread.
6. التحقّق من بروتوكول البث المتعدد للإصدار السادس من بروتوكول الإنترنت (IPv6) الصادر
إرسال طلب اتصال إلى ff05::abcd على الجهاز النهائي nRF52840 2:
> ping ff05::abcd 100 10 1 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=12 hlim=64 time=297ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=12 hlim=63 time=432ms 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=13 hlim=64 time=193ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=13 hlim=63 time=306ms 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=14 hlim=64 time=230ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=14 hlim=63 time=279ms
يمكن أن يتلقّى "الجهاز النهائي 2 لوحدة nRF52840" ردودًا على طلب فحص الاتصال من كلّ من "الجهاز النهائي 1 لوحدة nRF52840" و"الكمبيوتر المحمول". يشير ذلك إلى أنّ بروتوكول OTBR يمكنه إعادة توجيه حزم البث المتعدد لردّ Ping على IPv6 من شبكة Thread إلى شبكة Wi-Fi.
7. تهانينا
تهانينا، لقد نجحت في إعداد جهاز توجيه حدود Thread والتحقّق من بث IPv6 الثنائي الاتجاه.
لمزيد من المعلومات حول OpenThread، يُرجى الانتقال إلى openthread.io.
المستندات المرجعية: