جهاز توجيه الحدود

1- المقدمة

608c4c35050eb280.png

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

إنّ سلسلة المحادثات هي بروتوكول شبكة لاسلكية منخفضة الطاقة ومستندة إلى عنوان IP، وتوفّر اتصالات آمنة من جهاز لجهاز إلى جهاز آخر. يمكن أن تتكيّف شبكات المحادثات مع التغييرات في المخططات الهيكلية لتجنُّب حالات تعذُّر استخدام نقطة واحدة.

ما المقصود بسلسلة المحادثات المفتوحة؟

Open المتوقّف من Google هو سلسلة برامج مفتوحة المصدر من Thread®.

ما هو جهاز توجيه حدود OpenThread؟

جهاز توجيه حدود سلسلة المحادثات (OTBR) الذي أصدرته Google هو تنفيذ مفتوح المصدر لجهاز توجيه سلسلة المحادثات.

بث سلسلة المحادثات 1.2

تحدّد سلسلة المحادثات 1.2 سلسلة من الميزات لإتاحة البث المتعدد على شبكة غير مترابطة (شرائح سلسلة Wi-Fi/شبكة إيثرنت) لعناوين البث المتعدد بنطاق أكبر من النطاق المحلي.

ويسجِّل جهاز توجيه سلسلة المحادثات 1.2 سلسلة بيانات جهاز توجيه الظهر (BBR)، وتُستخدم خدمة BBR المحدَّدة في جهاز التوجيه الخلفي الأساسي (PBBR)، وهو المسؤول عن إرسال/إعادة إرسال رسائل البث المتعدد.

يرسل جهاز سلسلة المحادثات رقم 1.2 رسالة CoAP لتسجيل عنوان البث المتعدد على PBBR (تسجيل المستمعين المتعددين وباختصار MLR) إذا كان العنوان أكبر من النطاق المحلي. تستخدم أداة PBBR تقنية MLDv2 على الواجهة الخارجية للاتصال ببروتوكول LAN/WAN على نطاق IPv6 الواسع بشأن مجموعات البث المتعدد وفقًا لبروتوكول IPv6 التي تحتاج إلى الاستماع إليها بالنيابة عن شبكة Thread المحلية. وتعمل ميزة PBBR على إعادة توجيه الزيارات من ميزة البث المتعدد إلى شبكة Thread فقط إذا كان الوجهة مشتركًا في جهاز Thread واحد على الأقل.

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

للحصول على مزيد من التفاصيل، يُرجى الرجوع إلى القسم 5.24 من توجيه المواصفات في سلسلة المحادثات 1.2 لاستخدام نطاق أكبر من Realm-Local Scope.

التصميمات التي ستنشئها

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

ما الذي ستتعلمه

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

المتطلبات

  • جهاز Raspberry Pi 3/4 وبطاقة SD بسعة تخزين 8 غيغابايت على الأقل
  • 3 لوحات نوردية نصف شبكية nRF52840 DK
  • تم تفعيل نقطة وصول Wi-Fi بدون جهاز IPv6 Routing الإعلانs Guard على جهاز التوجيه.
  • جهاز كمبيوتر محمول يعمل بنظام التشغيل Linux/macOS (يعمل Raspberry Pi أيضًا) مع تثبيت Python3.

2. إعداد OTBR

اتّبِع الدرس التطبيقي حول الترميز جهاز توجيه حدود سلسلة المحادثات - الاتصال ببروتوكول IPv6 الثنائي واكتشاف الخدمة المستندة إلى نظام أسماء النطاقات لإعداد جهاز توجيه حدود سلسلة المحادثات على 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. إنشاء سلاسل محادثات وبرامج Flash

يمكنك إنشاء تطبيق 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- إرفاق أجهزة سلسلة المحادثات بشبكة سلسلة المحادثات

أنشأت OTBR شبكة سلاسل محادثات في الخطوات السابقة. يمكننا الآن إضافة nRF52840 DK إلى شبكة Thread:

الحصول على مجموعة البيانات النشطة الأوّلية من OTBR:

$ sudo ot-ctl dataset active -x
0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff

الربط بلوحة nRF52840 DK:

$ screen /dev/ttyACM0 115200

اضبط مجموعة البيانات النشطة لجهاز nRF52840 DK:

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

ابدأ تسلسل حِزم سلاسل المحادثات وانتظر بضع ثوانٍ وتأكَّد من إرفاق الجهاز بنجاح:

> ifconfig up
Done
> thread start
Done
> state
child

كرِّر الخطوات المذكورة أعلاه لإرفاق لوح nRF52840 DK الآخر بشبكة Thread.

لقد تم إعداد شبكة Thread بنجاح من خلال 3 أجهزة سلسلة محادثات: OTBR وألواحان nRF52840 DK.

5. إعداد شبكة Wi-Fi

عليك إعداد شبكة Wi-Fi على شبكة OTBR والكمبيوتر المحمول بحيث يتم توصيلهما بشبكة Wi-Fi نفسها.

يمكننا استخدام raspi-config لإعداد شبكة Wi-Fi لمعرّف SSID وعبارة مرور على Raspberry Pi OTBR.

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

5d0f36fd69ebcc9a.png

6- الاشتراك في عنوان البث المتعدد IPv6

الاشتراك في ff05::abcd على nRF52840 الجهاز النهائي 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 الجهاز النهائي 1 في شبكة Thread والكمبيوتر المحمول في شبكة Wi-Fi، سنتحقق من إمكانية الوصول المتعدد الاتجاه عبر IPv6 في الأقسام التالية.

7- التحقُّق من البث المتعدد وفقًا لبروتوكول 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

يمكننا ملاحظة أنّ مزوّد خدمة البث المباشر على الإنترنت يمكنه تلقّي ردّيَن من كل من الجهاز النهائي nRF52840 والجهاز 1 بسبب استخدامهما لجهاز ff05::abcd. يوضّح هذا أنّ بروتوكول OTBR يمكنه إعادة توجيه حِزم الإرسال المتعدد في بروتوكول IPv6 من شبكة 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 الردود 2 من كل من الجهاز النهائي nRF52840 والجهاز 1 من الكمبيوتر المحمول. يوضح هذا أنه يمكن لجهاز OTBR إعادة توجيه حِزم البث المتعدد لبروتوكول IPv6 لعرض الردّ من شبكة Thread إلى شبكة Wi-Fi.

9. تهانينا

لقد تمكّنت من إعداد جهاز توجيه الحدود في سلسلة محادثات بنجاح وإثبات ملكية البث المتعدد الاتجاهي IPv6.

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

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