1. مقدمة
ما هو بروتوكول Thread؟
Thread هو بروتوكول شبكة لاسلكية منخفضة الطاقة مستند إلى بروتوكول الإنترنت (IP) ويتيح إجراء اتصالات آمنة بين الأجهزة وبين الأجهزة والسحابة الإلكترونية. يمكن أن تتكيّف شبكات Thread مع التغييرات في البنية لتجنُّب الأعطال في نقطة واحدة.
ما هي OpenThread؟
OpenThread، الذي أصدرته Google، هو تطبيق مفتوح المصدر لبروتوكول Thread®.
ما هو جهاز توجيه حدود شبكة OpenThread؟
OpenThread Border Router (OTBR) الذي أصدرته Google هو تطبيق مفتوح المصدر لجهاز توجيه حدود شبكة Thread.
البث المتعدد عبر الإصدار 6 من بروتوكول الإنترنت
تحدّد Thread سلسلة من الميزات لدعم البث المتعدد على شبكة غير متجانسة (شرائح شبكة Thread وWi-Fi/Ethernet) لعناوين البث المتعدد بنطاق أكبر من النطاق المحلي.
يسجّل جهاز توجيه حدود شبكة Thread مجموعة بيانات جهاز توجيه العمود الفقري (BBR)، وتكون خدمة جهاز توجيه العمود الفقري (BBR) المحدّدة هي جهاز توجيه العمود الفقري الأساسي (PBBR)، وهو المسؤول عن إعادة التوجيه المتعدد الإرسال الوارد/الصادر.
يرسل جهاز Thread رسالة CoAP لتسجيل عنوان البث المتعدد في PBBR (تسجيل مستمع البث المتعدد، أو MLR باختصار) إذا كان العنوان أكبر من النطاق المحلي. يستخدم PBBR بروتوكول MLDv2 على واجهته الخارجية للتواصل مع شبكة LAN/WAN الأوسع نطاقًا التي تستخدم IPv6 بشأن مجموعات البث المتعدد التي تستخدم IPv6 والتي يحتاج إلى الاستماع إليها نيابةً عن شبكة Thread المحلية. ولا يعيد PBBR توجيه حركة مرور البث المتعدد إلى شبكة Thread إلا إذا كان هناك جهاز واحد على الأقل من أجهزة Thread مشتركًا في الوجهة.
بالنسبة إلى أجهزة Thread الطرفية البسيطة، قد تعتمد على الجهاز الرئيسي لتجميع عنوان البث المتعدد وتنفيذ MLR نيابةً عنها، أو تسجيل نفسها إذا كان الجهاز الرئيسي من إصدار Thread 1.1.
لمزيد من التفاصيل، يُرجى الرجوع إلى مواصفات سلاسل المحادثات.
ما ستنشئه
في هذا الدرس العملي، ستعمل على إعداد جهاز توجيه حدود Thread وجهازَي Thread، ثم ستفعّل ميزات البث المتعدد وتتحقّق منها على أجهزة Thread وأجهزة Wi-Fi.
أهداف الدورة التعليمية
- كيفية إنشاء برامج ثابتة nRF52840 مع إمكانية استخدام الإرسال المتعدد عبر IPv6
- كيفية الاشتراك في عناوين البث المتعدد IPv6 على أجهزة Thread
المتطلبات
- محطة عمل Linux لإنشاء وتثبيت Thread RCP وOpenThread CLI واختبار البث المتعدد IPv6
- جهاز Raspberry Pi لجهاز توجيه حدود شبكة Thread
- جهازان من Nordic Semiconductor nRF52840 USB Dongles (واحد لجهاز RCP واثنان لأجهزة Thread الطرفية)
2. إعداد OTBR
أسرع طريقة لإعداد OTBR هي اتّباع دليل إعداد OTBR.
بعد اكتمال عملية إعداد 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
اتّبِع التعليمات لاستنساخ المشروع وإنشاء البرامج الثابتة nRF52840.
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
تابِع إنشاء شبكة Thread باستخدام لوحات nRF52840 ودرس OpenThread التطبيقي كما هو مكتوب. بعد أن يتم تثبيت صورة واجهة سطر الأوامر على الجهاز الطرفي، اتّبِع الخطوات الواردة في ربط العُقدة الثانية بشبكة Thread لإضافة جهاز Thread إلى شبكة Thread. كرِّر هذه الخطوات مع جهاز Thread النهائي الثاني.
4. الاشتراك في عنوان البث المتعدد IPv6
الاشتراك في ff05::abcd على الجهاز الطرفي 1 من nRF52840:
> 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) على كلّ من الجهاز الطرفي 1 nRF52840 في شبكة Thread والكمبيوتر المحمول في شبكة Wi-Fi، سنتحقّق من إمكانية الوصول إلى البث المتعدد للإصدار السادس من بروتوكول الإنترنت (IPv6) في كلا الاتجاهين في الأقسام التالية.
5- التحقّق من البث المتعدد الوارد عبر IPv6
الآن، من المفترض أن نتمكّن من الوصول إلى كلّ من "جهاز nRF52840 النهائي 1" في شبكة 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 يمكنه تلقّي ردّين على طلب اختبار الاتصال من كلّ من الجهاز الطرفي 1 nRF52840 والكمبيوتر المحمول لأنّهما اشتركا في ff05::abcd
. يشير ذلك إلى أنّ جهاز OTBR يمكنه إعادة توجيه حِزم البث المتعدد لطلب اختبار الاتصال IPv6 من شبكة 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.
المستندات المرجعية: