جهاز توجيه حدود السلسلة - Thread 1.2 Multicast

1. مقدمة

608c4c35050eb280.png

ما هي سلسلة المحادثات؟

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.

يتم توضيح طوبولوجي الشبكة النهائية أدناه:

5d0f36fd69ebcc9a.png

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.

في ما يلي مخطط الشبكة النهائية التي تتضمن اشتراكات البث المتعدد:

b118448c98b2d583.png

الآن وبعد أن اشتركنا في عنوان البث المتعدد 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.

المستندات المرجعية: