1. مقدمة
ما هي سلسلة المحادثات؟
Thread هو بروتوكول للشبكات اللاسلكية المتداخلة يستند إلى بروتوكول الإنترنت (IP) ويتيح إجراء الاتصالات الآمنة من جهاز إلى آخر ومن جهاز إلى آخر في السحابة الإلكترونية. يمكن أن تتكيّف شبكات سلاسل المحادثات مع التغييرات في الطوبولوجيا لتجنُّب حدوث أخطاء في نقطة واحدة.
ما هي OpenThread؟
OpenThread الذي طرحته Google هو نظام مفتوح المصدر لـ Thread®.
ما هو جهاز توجيه الحدود OpenThread؟
OpenThread Border Router (OTBR) الذي طرحته Google هو تطبيق مفتوح المصدر لجهاز Thread Border Router.
البث المتعدد Thread 1.2
يحدد مؤشر Thread 1.2 سلسلة من الميزات لإتاحة البث المتعدد عبر شبكة غير متجانسة (شرائح شبكة Thread وWi-Fi/إيثرنت) لعناوين البث المتعدد ذات نطاق أكبر من النطاق المحلي.
يسجل جهاز توجيه الحدود Thread 1.2 مجموعة بيانات جهاز التوجيه العمودي (BBR)، وخدمة BBR المحددة هي جهاز التوجيه الأساسي (PBBR)، والمسؤول عن إرسال الرسائل الواردة/الخارجية للبث المتعدد الوجهات.
يرسل جهاز Thread 1.2 رسالة CoAP لتسجيل عنوان البث المتعدد في PBBR (تسجيل أداة Multicast Listener أو MLR اختصارًا) إذا كان العنوان أكبر من النطاق المحلي. يستخدم PBBR بروتوكول MLDv2 على واجهته الخارجية للتواصل مع شبكات LAN/WAN الأوسع نطاقًا التي تتضمن IPv6 حول مجموعات البث المتعدد IPv6 التي يحتاجها إلى الاستماع إليها، وذلك نيابةً عن شبكة Thread المحلية. ولا يعيد PBBR توجيه زيارات البث المتعدد إلى شبكة Thread فقط إلا إذا كانت الوجهة مشتركًا في جهاز Thread واحد على الأقل.
بالنسبة إلى الحد الأدنى من أجهزة النهاية لسلسلة Thread 1.2، قد يعتمدون على المؤسسة الرئيسية لتجميع عنوان البث المتعدد وإجراء MLR نيابةً عنهم، أو قد يسجّلون أنفسهم في حال استخدام سلسلة محادثات Thread 1.1 الرئيسية بأنفسهم.
للحصول على مزيد من التفاصيل، يُرجى الرجوع إلى مواصفات سلسلة المحادثات 1.2 في الفقرة 5.24 بشأن إعادة توجيه البث المتعدد على نطاق أوسع من نطاق محلي في النطاق.
ما ستقوم بإنشائه
في هذا الدرس التطبيقي حول الترميز، ستُجري إعداد جهاز توجيه حدود Thread وجهازين من Thread، ثم تفعيل ميزات "البث المتعدد" والتحقّق منها على أجهزة Thread وأجهزة Wi-Fi.
المعلومات التي ستتعلّمها
- كيفية إصدار البرامج الثابتة nRF52840 باستخدام ميزات Thread 1.2 Multicast
- كيفية الاشتراك في عناوين البث المتعدد IPv6 على أجهزة Thread
المتطلبات
- جهاز Raspberry Pi 3/4 وبطاقة SD بقدرة 8 غيغابايت على الأقل
- 3 لوحات Nordic شبهconductor nRF52840 DK
- نقطة وصول Wi-Fi بدون تفعيل واقي إعلانات على جهاز توجيه IPv6 على جهاز التوجيه.
- كمبيوتر محمول Linux/macOS (يعمل أيضًا Raspberry Pi) وتثبيت Python3 عليه
2. إعداد OTBR
اتّبِع الدرس التطبيقي حول ترميز جهاز توجيه حدود Thread - الاتصال الثنائي الاتجاه عبر IPv6 وخدمة اكتشاف الخدمة المستندة إلى نظام أسماء النطاقات لإعداد جهاز توجيه حدود Thread على جهاز Raspberry Pi.
عند الاكتمال، من المفترض أن ينشئ Raspberry Pi شبكة Thread صالحة ومتصلاً بشبكة Wi-Fi.
سيصبح OTBR هو جهاز التوجيه الأساسي في غضون ثوانٍ.
$ sudo ot-ctl bbr state Primary Done $ sudo ot-ctl bbr BBR Primary: server16: 0xD800 seqno: 23 delay: 1200 secs timeout: 3600 secs Done
3- إنشاء أجهزة Thread ووميضها
أنشئ تطبيق Thread 1.2 CLI باستخدام ميزة "البث المتعدد" وفعِّل لوحتي nRF52840 DK.
إنشاء البرامج الثابتة nRF52840 DK
اتبع التعليمات لاستنساخ المشروع وإنشاء البرامج الثابتة nRF52840.
$ mkdir -p ~/src $ cd ~/src $ git clone --recurse-submodules --depth 1 https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx/ $ script/build nrf52840 USB_trans -DOT_MLR=ON -DOT_THREAD_VERSION=1.2 $ arm-none-eabi-objcopy -O ihex build/bin/ot-cli-ftd ot-cli-ftd.hex
يمكننا العثور على البرامج الثابتة HEX التي تم إنشاؤها بنجاح في ot-cli-ftd.hex
.
البرامج الثابتة بتنسيق Flash nRF52840 DK
عليك ترقية البرامج الثابتة إلى nRF52840 DK باستخدام nrfjprog
، وهي جزء من أدوات سطر أوامر nRF.
$ nrfjprog -f nrf52 --chiperase --program ot-cli-ftd.hex --reset
4. ربط أجهزة Thread بشبكة Thread
أنشأت OTBR شبكة Thread في الخطوات السابقة. يمكننا الآن إضافة nRF52840 DKs إلى شبكة Thread:
الحصول على مجموعة البيانات النشطة الأولية من OTBR:
$ sudo ot-ctl dataset active -x 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
الاتصال بلوحة nRF52840 DK:
$ screen /dev/ttyACM0 115200
قم بتهيئة مجموعة البيانات النشطة لـ nRF52840 DK:
> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff Done
ابدأ تشغيل حزمة Thread وانتظِر بضع ثوانٍ وتأكَّد من أنّه تم توصيل الجهاز بنجاح:
> ifconfig up Done > thread start Done > state child
كرِّر الخطوات أعلاه لتوصيل لوحة nRF52840 DK الأخرى بشبكة Thread.
لقد أكملنا الآن إعداد شبكة Thread باستخدام 3 أجهزة من نوع Thread، وهي: OTBR ولوحتين من نوع nRF52840 DK.
5- إعداد شبكة Wi-Fi
اضبط شبكة Wi-Fi على OTBR والكمبيوتر المحمول حتى يتم توصيلهما بنفس نقطة اتصال Wi-Fi.
يمكننا استخدام raspi-config لإعداد SSID لشبكة Wi-Fi وعبارة المرور على Raspberry Pi OTBR.
يتم توضيح طوبولوجي الشبكة النهائية أدناه:
6- الاشتراك في عنوان البث المتعدد IPv6
الاشتراك في ff05::abcd على nRF52840 End Device 1:
> ipmaddr add ff05::abcd Done
التأكّد من اشتراك ff05::abcd
بنجاح:
> ipmaddr ff33:40:fdde:ad00:beef:0:0:1 ff32:40:fdde:ad00:beef:0:0:1 ff05:0:0:0:0:0:0:abcd <--- ff05::abcd subscribed 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 End 1 في شبكة Thread والكمبيوتر المحمول في شبكة Wi-Fi، سوف نتحقق من إمكانية الوصول ثنائي الاتجاه للبث المتعدد IPv6 في الأقسام التالية.
7. التحقّق من البث المتعدد عناوين IPv6 الواردة
والآن، من المفترض أن نتمكن من الوصول إلى كل من nRF52840 End Device 1 في شبكة Thread والكمبيوتر المحمول باستخدام عنوان البث المتعدد IPv6 ff05::abcd
من شبكة Wi-Fi.
إجراء اختبار Ping 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 End 1 والكمبيوتر المحمول لأنهما قد اشتركا في ff05::abcd
. وهذا يدل على أن OTBR يمكنها إعادة توجيه حزم طلب البث المتعدد IPv6 Ping من شبكة Wi-Fi إلى شبكة Thread.
8. التحقُّق من البث المتعدد لعناوين 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
بإمكان nRF52840 End Device 2 تلقّي الردود على أداة "ping" من كل من الجهاز النهائي nRF52840 والكمبيوتر المحمول. وهذا يدل على أن OTBR يمكنها إعادة توجيه حزم البث المتعدد IPv6 Ping Reply من شبكة Thread إلى شبكة Wi-Fi.
9. تهانينا
تهانينا، لقد تم إعداد جهاز توجيه حدود مؤشر الترابط وإجراء البث المتعدد ثنائي الاتجاه لبروتوكول IPv6 الثنائي الاتجاه بنجاح.
لمزيد من المعلومات حول OpenThread، يُرجى الانتقال إلى openthread.io.
المستندات المرجعية: