جهاز توجيه حدود السلسلة - البث المتعدد IPv6

لمحة عن هذا الدرس التطبيقي حول الترميز
schedule17 دقيقة
subjectتاريخ التعديل الأخير: 28 أبريل 2025
account_circleتأليف: Simon Lin, Jonathan Hui

1. مقدمة

608c4c35050eb280.png

ما هي شبكة 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 على واجهته الخارجية للتواصل مع شبكات LAN/WAN الأوسع نطاقًا التي تتضمن IPv6 بشأن مجموعات البث المتعدد IPv6 التي تحتاج إلى الاستماع إليها، وذلك نيابةً عن شبكة Thread المحلية. ولا يعيد PBBR توجيه زيارات البث المتعدد إلى شبكة Thread فقط إلا إذا كانت الوجهة مشتركًا في جهاز Thread واحد على الأقل.

بالنسبة إلى الأجهزة ذات الحدّ الأدنى من Thread، قد تعتمد هذه الأجهزة على المؤسسة الرئيسية لتجميع عنوان البث المتعدد وإجراء MLR نيابةً عنها، أو قد تسجّل نفسها إذا كانت السلسلة الرئيسية لها تستخدم الإصدار 1.1 من سلسلة المحادثات.

لمزيد من التفاصيل، يُرجى الاطّلاع على مواصفات سلاسل المحادثات.

ما ستقوم بإنشائه

في هذا الدرس التطبيقي حول الترميز، ستُجري إعداد جهاز توجيه حدود Thread وجهازين من Thread، ثم تفعيل ميزات "البث المتعدد" والتحقّق منها على أجهزة Thread وأجهزة Wi-Fi.

المعلومات التي ستتعلّمها

  • كيفية إصدار برامج nRF52840 الثابتة مع دعم البث المتعدد IPv6.
  • كيفية الاشتراك في عناوين البث المتعدد IPv6 على أجهزة Thread

المتطلبات

  • يشير ذلك المصطلح إلى محطة عمل في Linux، لإنشاء وتثبيت RCP Thread وOpenThread CLI، واختبار البث المتعدد IPv6.
  • نموذج Raspberry Pi لموجه الحدود Thread.
  • مفتاحا USB متصلان بمعيار nRF52840 لأشباه الموصلات (NRF52840) (أحدهما لـ RCP والآخر للأجهزة التي تعمل بطرف Thread).

2. إعداد OTBR

إن أسرع طريقة لإعداد OTBR هي استخدام Docker باتباع OTBR مع دليل Docker.

بعد اكتمال إعداد 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 End Device 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.

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

b118448c98b2d583.png

الآن وبعد أن اشتركنا في عنوان البث المتعدد IPv6 على كل من الجهاز الطرفي nRF52840 End 1 في شبكة Thread والكمبيوتر المحمول في شبكة Wi-Fi، سوف نتحقق من إمكانية الوصول ثنائي الاتجاه للبث المتعدد IPv6 في الأقسام التالية.

5- التحقّق من البث المتعدد عناوين 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.

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

بإمكان nRF52840 End Device 2 تلقّي الردود على أداة "ping" من كل من الجهاز النهائي nRF52840 والكمبيوتر المحمول. وهذا يدل على أن OTBR يمكنها إعادة توجيه حزم البث المتعدد IPv6 Ping Reply من شبكة Thread إلى شبكة Wi-Fi.

7- تهانينا

تهانينا، لقد تم إعداد جهاز توجيه حدود مؤشر الترابط وإجراء البث المتعدد ثنائي الاتجاه لبروتوكول IPv6 الثنائي الاتجاه بنجاح.

لمزيد من المعلومات حول OpenThread، يُرجى الانتقال إلى openthread.io.

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