جهاز توجيه حدود مؤشر الترابط - إمكانية الاتصال ثنائي الاتجاه عبر IPv6 واكتشاف الخدمة المستندة إلى نظام أسماء النطاقات

1. مقدمة

699d673d05a55535.png

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

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

يربط جهاز توجيه حدود Thread شبكة Thread بشبكات أخرى مستندة إلى عناوين IP، مثل Wi-Fi أو إيثرنت. تتطلب شبكة Thread جهاز توجيه الحدود للاتصال بشبكات أخرى. يتيح جهاز توجيه حدود مؤشر الترابط تنفيذ الوظائف التالية إلى حدّ أدنى:

  • إمكانية اتصال عنوان IP ثنائي الاتجاه بين شبكة Thread وشبكات Wi-Fi/Ethernet
  • اكتشاف الخدمة الثنائية الاتجاه من خلال mDNS (على رابط Wi-Fi/Ethernet) وSRP (على شبكة Thread).
  • البنية الأساسية لسلاسل المحادثات التي تدمج أقسام Thread عبر الروابط المستندة إلى IP.
  • تكليف خارجي بسلاسل محادثات (مثل هاتف جوّال) لمصادقة جهاز Thread وربطه بشبكة Thread

OpenThread Border Router (OTBR) الذي طرحته Google هو تطبيق مفتوح المصدر لجهاز Thread Border Router.

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

في هذا الدرس التطبيقي حول الترميز، ستتمكّن من إعداد جهاز توجيه الحدود Thread وربط هاتفك الجوّال بجهاز طرف تسلسلي عبر جهاز توجيه الحدود.

ما ستتعرَّف عليه

  • كيفية إعداد تجربة البث المباشر على الإنترنت
  • كيفية إنشاء شبكة Thread باستخدام OTBR
  • كيفية إنشاء جهاز OpenThread CLI باستخدام ميزة SRP
  • كيفية تسجيل خدمة في SRP
  • كيفية اكتشاف جهاز نهاية Thread والوصول إليه.

المتطلبات

  • جهاز Raspberry Pi 3/4 وبطاقة SD بقدرة 8 غيغابايت على الأقل
  • لوحتا مطوّري برامج Nordic حظر الموصّلات nRF52840
  • نقطة وصول Wi-Fi بدون تفعيل واقي إعلانات على جهاز توجيه IPv6 على جهاز التوجيه.
  • يجب أن يكون لديك هاتف iOS يعمل بنظام التشغيل iOS 14 أو هاتف Android يعمل بنظام التشغيل Android 8.1 على الأقل.

2. إعداد OTBR

إعداد Raspberry Pi

من السهل إعداد جهاز Raspberry Pi جديد باستخدام أداة rpi-imager عن طريق اتّباع التعليمات الواردة على raspberrypi.org (بدلاً من استخدام أحدث إصدار من Raspberry Pi OS في الأداة، يُرجى تنزيل 2021-05-07-raspios-buster-armhf-lite بنفسك). لإكمال خطوات الهاتف الجوّال في هذا الدرس التطبيقي حول الترميز، عليك توصيل جهاز Raspberry Pi بنقطة اتصال Wi-Fi. اتبع هذا الدليل لإعداد الاتصال اللاسلكي. من السهل تسجيل الدخول إلى Raspberry Pi باستخدام SSH، ويمكنك العثور على التعليمات هنا.

الحصول على رمز OTBR

سجِّل الدخول إلى جهاز Raspberry Pi واستنساخ ot-br-posix من GitHub:

$ git clone https://github.com/openthread/ot-br-posix.git --depth 1

إنشاء وتثبيت OTBR

تتضمن OTBR نصين برمجيين يتم تشغيلهما وإعداد جهاز توجيه حدود Thread:

$ cd ot-br-posix
$ ./script/bootstrap
$ INFRA_IF_NAME=wlan0 ./script/setup

تعمل ميزة OTBR على كل من واجهة Thread وواجهة شبكة البنية الأساسية (مثل شبكة Wi-Fi/Ethernet) المحدّدة باستخدام السمة INFRA_IF_NAME. يتم إنشاء واجهة Thread من خلال OTBR نفسها، وهي تحمل اسم wpan0 تلقائيًا، وتحتوي واجهة البنية الأساسية على قيمة تلقائية wlan0 في حال عدم تحديد INFRA_IF_NAME بشكل صريح. إذا كان جهاز Raspberry Pi متصلاً بكابل إيثرنت، حدِّد اسم واجهة الإيثرنت (مثل eth0):

$ INFRA_IF_NAME=eth0 ./script/setup

تحقق مما إذا تم تثبيت OTBR بنجاح:

$ sudo service otbr-agent status
● otbr-agent.service - Border Router Agent
   Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mon 2021-03-01 05:43:38 GMT; 2s ago
  Process: 2444 ExecStart=/usr/sbin/otbr-agent $OTBR_AGENT_OPTS (code=exited, status=2)
 Main PID: 2444 (code=exited, status=2)

من المتوقّع أن تكون خدمة otbr-agent غير نشطة، لأنّها تتطلّب شريحة RCP للتشغيل.

يُرجى إعادة تشغيل Raspberry Pi لتطبيق التغييرات.

إنشاء البرامج الثابتة لـ RCP

تتوافق تقنية OTBR مع شريحة راديو مقاس 15.4 في وضع المعالج اللاسلكي (RCP). في هذا الوضع، يعمل مكدس OpenThread على الجانب المضيف ويرسل/يستقبل الإطارات عبر جهاز الإرسال والاستقبال IEEE802.15.4.

اتّبِع الخطوة 4 من إنشاء شبكة Thread باستخدام لوحات nRF52840 ودرس تطبيقي حول ترميز OpenThread لإنشاء جهاز يعمل بترميز nRF52840 RCP:

$ script/build nrf52840 USB_trans

بدء تشغيل OTBR والتحقّق من الحالة

وصِّل لوحة nRF52840 بجهاز Raspberry Pi وابدأ خدمة otbr-agent:

$ sudo service otbr-agent restart

تأكَّد من أنّ خدمة "otbr-agent" نشطة:

$ sudo service otbr-agent status
● otbr-agent.service - Border Router Agent
   Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-03-01 05:46:26 GMT; 2s ago
 Main PID: 2997 (otbr-agent)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/otbr-agent.service
           └─2997 /usr/sbin/otbr-agent -I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM0

Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Stop publishing service
Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [adproxy] Stopped
Mar 01 05:46:26 raspberrypi otbr-agent[2997]: PSKc is not initialized
Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Check if PSKc is initialized: OK
Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Initialize OpenThread Border Router Agent: OK
Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Border router agent started.
Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [INFO]-CORE----: Notifier: StateChanged (0x00038200) [NetData PanId NetName ExtPanId]
Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [INFO]-PLAT----: Host netif is down

3- إنشاء شبكة Thread

هناك أمر ot-ctl يمكن استخدامه للتحكّم في خدمة otbr-agent. يقبل ot-ctl جميع أوامر OpenThread CLI. يُرجى الاطّلاع على دليل OpenThread CLI لمزيد من التفاصيل.

تكوين شبكة Thread باستخدام OTBR:

$ sudo ot-ctl dataset init new
Done
$ sudo ot-ctl dataset commit active
Done
$ sudo ot-ctl ifconfig up
Done
$ sudo ot-ctl thread start
Done

انتظر بضع ثوانٍ، من المفترض أن نلاحظ أن OTBR تعمل كسلسلة محادثات leader وهناك بادئة off-mesh-routable (OMR) في بيانات شبكة Thread:

$ sudo ot-ctl state
leader
Done
$ sudo ot-ctl netdata show
Prefixes:
Prefixes:
fd76:a5d1:fcb0:1707::/64 paos med 4000
Routes:
fd49:7770:7fc5:0::/64 s med 4000
Services:
44970 5d c000 s 4000
44970 01 9a04b000000e10 s 4000
Done
$ sudo ot-ctl ipaddr      
fda8:5ce9:df1e:6620:0:ff:fe00:fc11
fda8:5ce9:df1e:6620:0:0:0:fc38
fda8:5ce9:df1e:6620:0:ff:fe00:fc10
fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9
fda8:5ce9:df1e:6620:0:ff:fe00:fc00
fda8:5ce9:df1e:6620:0:ff:fe00:4000
fda8:5ce9:df1e:6620:3593:acfc:10db:1a8d
fe80:0:0:0:a6:301c:3e9f:2f5b
Done

4. إعداد الجهاز النهائي لعميل SRP

إنشاء ملف OT CLI وتحميله فلاش

اتّبِع الخطوة 5 من إنشاء شبكة Thread باستخدام لوحات nRF52840 ودرس تطبيقي حول ترميز OpenThread لإنشاء جهاز نهاية nRF52840 CLI وتثبيته.

ولكن بدلاً من تفعيل OT_COMMISSIONER وOT_JOINER، تتطلب عقدة CLI ميزتي OT_SRP_CLIENT وOT_ECDSA.

وبالتالي يجب أن يظهر استدعاء الإصدار الكامل على النحو التالي:

$ script/build nrf52840 USB_trans -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON

الانضمام إلى شبكة OTBR

للانضمام إلى شبكة Thread التي أنشأتها خدمة "otbr-agent"، نحتاج إلى الحصول على مجموعة البيانات التشغيلية النشطة من جهاز OTBR. لنعد إلى سطر الأوامر otbr-agent ونحصل على مجموعة البيانات النشطة:

$ sudo ot-ctl dataset active -x
0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff
Done

ارجع إلى جلسة شاشة عقدة عميل SRP وعيِّن مجموعة البيانات النشطة:

> dataset set active 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff
Done

بعد ذلك، ابدأ واجهة Thread:

> ifconfig up
Done
> thread start
Done

انتظِر بضع ثوانٍ وتحقَّق مما إذا تم الانضمام إلى شبكة Thread بنجاح أم لا:

> state
child
Done
> netdata show
Prefixes:
fd76:a5d1:fcb0:1707::/64 paos med 4000
Routes:
fd49:7770:7fc5:0::/64 s med 4000
Services:
44970 5d c000 s 4000
44970 01 9a04b000000e10 s 4000
Done
> ipaddr
fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927
fda8:5ce9:df1e:6620:0:ff:fe00:4001
fda8:5ce9:df1e:6620:ed74:123:cc5d:74ba
fe80:0:0:0:d4a9:39a0:abce:b02e
Done

تأكد من أن بيانات الشبكة تتطابق مع البيانات المطبوعة على OTBR. يمكننا الآن اختبار الاتصال بعنوان OMR الخاص بـ OTBR:

> ping fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9
Done
> 16 bytes from fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9: icmp_seq=1 hlim=64 time=49ms

5- نشر الخدمة على الجهاز النهائي

تم استخدام mDNS على نطاق واسع لنشر خدمة DNS-SD على رابط محلي. غير أنّ رسائل البث المتعدد تستهلك مقدارًا كبيرًا من معدل نقل البيانات، كما أنّها تستنفد طاقة البطارية إذا كانت الأجهزة منخفضة الطاقة. تستخدم Thread بروتوكول SRP الأحادي لتسجيل خدماتها في جهاز توجيه الحدود، كما تعتمد على جهاز توجيه الحدود للإعلان عن الخدمات على رابط Wi-Fi أو شبكة إيثرنت.

يمكننا تسجيل خدمة باستخدام الأمر srp client.

انتقِل إلى جلسة شاشة عقدة عميل SRP وشغِّل برنامج SRP تلقائيًا:

> srp client autostart enable
Done

اضبط اسم المضيف الذي سيتم الإعلان عنه على رابط Wi-Fi/Ethernet:

> srp client host name ot-host
Done

لكي يصل جهاز على رابط Wi-Fi/Ethernet إلى جهاز نهاية Thread، يجب الإعلان عن عنوان OMR الخاص بالجهاز النهائي:

> srp client host address fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927
Done

في النهاية، سجِّل خدمة _ipps._tcp مزيفة:

> srp client service add ot-service _ipps._tcp 12345
Done

يُرجى الانتظار بضع ثوانٍ، وسوف نتمكّن من رؤية الخدمة مسجَّلة:

> srp client service
instance:"ot-service", name:"_ipps._tcp", state:Registered, port:12345, priority:0, weight:0
Done

لقد أكملنا جميع أعمال الإعداد ومن المفترض أن يكون قد تم الإعلان عن خدمة _ipps._tcp على رابط Wi-Fi/Ethernet. حان الوقت الآن لاكتشاف الجهاز النهائي والوصول إليه!

6- التعرّف على الخدمة

اكتشاف الخدمة باستخدام هاتف جوّال

54a136a8940897cc.png

نستخدم تطبيق متصفّح الخدمات لاكتشاف خدمات mDNS على هاتف Android، ويمكن أيضًا العثور على تطبيق مكافئ للأجهزة الجوّالة التي تعمل بنظام التشغيل iOS. افتح التطبيق وستظهر الخدمة "_ipps._tcp".

اكتشاف الخدمة من خلال مضيف Linux

إذا أردت الاطّلاع على الخدمة من مضيف Linux آخر، يمكنك استخدام الأمر avahi-browse.

تثبيت avahi-daemon وavahi-utils:

$ sudo apt-get install -y avahi-daemon avahi-utils

حل مشاكل الخدمة:

$ sudo service avahi-daemon start # Ensure the avahi daemon is started.
$ avahi-browse -r _ipps._tcp
+ wlan0 IPv6 ot-service                                    Secure Internet Printer local
= wlan0 IPv6 ot-service                                    Secure Internet Printer local
   hostname = [ot-host.local]
   address = [fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927]
   port = [12345]
   txt = []
...

اكتشاف الخدمة من خلال مضيف macOS

يمكنك استخدام dns-sd على نظام التشغيل macOS لحلّ الخدمة:

$ dns-sd -Z _ipps._tcp local.
Browsing for _ipps._tcp.local.
DATE: ---Sun 14 Mar 2021---
21:31:42.125  ...STARTING...

; To direct clients to browse a different domain, substitute that domain in place of '@'
lb._dns-sd._udp                                 PTR     @

; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names.
; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local
; names with the correct fully-qualified (unicast) domain name of the target host offering the service.

_ipps._tcp                                      PTR     ot-service._ipps._tcp
ot-service._ipps._tcp                           SRV     0 0 12345 ot-host.local. ; Replace with unicast FQDN of target host
ot-service._ipps._tcp                           TXT     ""
...

7. اختبار اتصال الجهاز النهائي

فحص الاتصال من هاتف جوّال

لنأخذ هاتف Pixel كمثال، يمكننا معرفة عنوان OMR الخاص بالخدمة المسجَّلة مسبقًا "ot-service" في صفحة تفاصيل مثيل الخدمة في تطبيق متصفح الخدمة.

bb992962e68d250b.png 888daa1df1e1a9bf.png

يمكننا الآن اختبار اتصال عنوان OMR باستخدام تطبيق Network Analysis آخر.

للأسف، لا يتوافق إصدار Android من تطبيق "تحليل الشبكة" مع طلبات بحث mDNS لأداة اختبار الاتصال ولا يمكننا اختبار اتصال اسم المضيف ot-host.local مباشرةً (يمكننا فحص اتصال اسم المضيف باستخدام إصدار iOS من التطبيق).

اختبار الاتصال من مضيف Linux/macOS

يرسل جهاز توجيه حدود سلسلة التعليمات إعلانات جهاز توجيه ICMPv6 (RA) للإعلان عن البادئات (عبر خيار معلومات البادئة) والمسارات (عبر خيار معلومات المسار) على رابط Wi-Fi/Ethernet.

إعداد مضيف Linux

من المهم التأكد من تمكين كل من RA وRIO على المضيف:

  1. يجب أن تكون القيمة net.ipv6.conf.wlan0.accept_ra على الأقل 1 في حال عدم تفعيل إعادة توجيه عنوان IP، والقيمة 2 بخلاف ذلك.
  2. يجب ألا يكون net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen أصغر من 64.

يتم ضبط accept_ra تلقائيًا على 1 في معظم التوزيعات. قد تكون هناك برامج خفية أخرى للشبكة ستلغي هذا الخيار (على سبيل المثال، سيتجاهل dhcpcd على Raspberry Pi accept_ra إلى 0). يمكنك التحقّق من القيمة accept_ra باستخدام:

$ sudo sysctl -n net.ipv6.conf.wlan0.accept_ra
0

واضبط القيمة على 1 (أو 2 في حال تفعيل ميزة إعادة توجيه عنوان IP) باستخدام:

$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra=1
Net.ipv6.conf.wlan0.accept_ra = 1

يكون الخيار accept_ra_rt_info_max_plen في معظم توزيعات Linux هو 0 تلقائيًا، ويمكنك ضبطه على 64 باستخدام:

$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen=64
net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64

سيتم فقدان التغيير بعد إعادة تشغيل المضيف. على سبيل المثال، أضِف الأوامر أدناه إلى /etc/sysctl.conf لتفعيل RIO بشكل دائم:

$ net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64

ربما فات الأوان لتغيير هذه التهيئات نظرًا لإرسال OTBR بالفعل رسائل RA غير مرغوب فيها وقد يصل الفاصل الزمني بين رسالتي RA غير مرغوب فيه إلى عدة مئات من الثواني. تتمثل إحدى الطرق في قطع الاتصال بـ Wi-Fi AP وإعادة الاتصال به لإرسال رسائل طلب جهاز التوجيه حتى يستجيب OTBR من خلال الطلبات التي يتم جمعها في قاعدة البيانات. هناك خيار آخر وهو إعادة تشغيل وظيفة "توجيه الحدود" على جهاز توجيه الحدود:

$ sudo ot-ctl br disable
Done
$ sudo ot-ctl br enable
Done

إذا كنت تحاول إعادة الاتصال بشبكة Wi-Fi أو إعادة تشغيل واجهة إيثرنت، تأكَّد من عدم استخدام dhcpcd لإدارة شبكة WiFi-/Ethernet IPv6. نظرًا لأنّ dhcpcd يؤدّي دائمًا إلى تجاهل الخيار accept_ra في كلّ مرّة تُعيد فيها تشغيل الواجهة وسيتم فقدان إعدادات accept_ra. ألحِق الأسطر التالية بملف الإعداد dhcpcd (مثل /etc/dhcpcd.conf) لإيقاف IPv6 صراحةً في dhcpcd:

noipv6
noipv6rs

يجب إعادة تشغيل لكي تسري التغييرات.

إعداد مضيف macOS

يتم تفعيل كلا خيارَي accept_ra* تلقائيًا، ولكن عليك ترقية نظامك إلى الإصدار Big Sur على الأقل من نظام التشغيل macOS.

فحص اتصال اسم المضيف أو عنوان IPv6

يمكننا الآن فحص اتصال اسم المضيف ot-host.local باستخدام الأمر ping -6 (ping6 لنظام التشغيل macOS):

$ ping -6 ot-host.local.
PING ot-host.local.(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927)) 56 data bytes
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=1 ttl=63 time=170 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=2 ttl=63 time=64.2 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=3 ttl=63 time=22.8 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=4 ttl=63 time=37.7 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=5 ttl=63 time=28.7 ms
...

قد يتعذّر تنفيذ هذا الأمر على مضيفي Linux مع ظهور الخطأ "Name or service not known". ويرجع ذلك إلى أنّ الأمر ping لا يحل اسم ot-host.local. باستخدام استعلامات mDNS. فتح /etc/nsswitch.conf وإضافة mdns6_minimal إلى السطر الذي يبدأ بـ hosts:

hosts:          files mdns4_minimal mdns6_minimal dns

بالطبع، يمكنك دائمًا فحص اتصال عنوان IPv6 مباشرةً:

$ ping -6 fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927
PING fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927) 56 data bytes
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=1 ttl=63 time=32.9 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=2 ttl=63 time=27.8 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=3 ttl=63 time=29.9 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=4 ttl=63 time=73.5 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=5 ttl=63 time=26.4 ms
...

8. إلغاء نشر الخدمة على الجهاز

لإزالة العنوان والخدمة المسجَّلَين من عقدة عميل SRP:

> srp client host remove
Done

من المفترض ألا تتمكّن من اكتشاف خدمة _ipps._tcp الآن.

9. تهانينا

تهانينا، لقد تم إعداد OTBR بنجاح كجهاز توجيه ذات حدود Thread لتوفير اتصال ثنائي الاتجاه واستكشاف الخدمة للأجهزة التي تستخدم شبكة Thread.

الخطوات التالية

اطّلع على بعض هذه الدروس التطبيقية حول الترميز...

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