محاكاة شبكة Thread باستخدام OpenThread

‫1. مقدمة

26b7f4f6b3ea0700.png

OpenThread هو تطبيق مفتوح المصدر لبروتوكول الشبكة Thread، وقد أصدرته Google. أصدرت Google Nest بروتوكول OpenThread لإتاحة التكنولوجيا المستخدَمة في منتجات Nest على نطاق واسع للمطوّرين بهدف تسريع تطوير المنتجات الخاصة بالشبكة المنزلية المتصلة.

تحدّد مواصفات Thread بروتوكول اتصال لاسلكي موثوق وآمن ومنخفض الطاقة بين الأجهزة يستند إلى IPv6 لتطبيقات المنزل. تنفّذ OpenThread جميع طبقات شبكة Thread، بما في ذلك الإصدار السادس من بروتوكول الإنترنت (IPv6) و6LoWPAN وIEEE 802.15.4 مع أمان رمز مصادقة الرسائل (MAC) وإنشاء روابط الشبكة المتداخلة وتوجيه الشبكة المتداخلة.

يوضّح لك هذا الدرس التطبيقي حول الترميز كيفية محاكاة شبكة Thread على أجهزة محاكاة.

أهداف الدورة التعليمية

  • كيفية إعداد سلسلة أدوات إنشاء OpenThread
  • كيفية محاكاة شبكة Thread
  • كيفية مصادقة عُقد Thread
  • كيفية إدارة شبكة Thread باستخدام OpenThread Daemon

المتطلبات

  • git
  • معرفة أساسية بنظام التشغيل Linux وتوجيه الشبكة

‫2. إعداد نظام التصميم

Git

يجب تثبيت Git لإكمال هذا الدرس التطبيقي حول الترميز. نزِّله وثبِّته قبل المتابعة.

بعد التثبيت، اتّبِع التعليمات الخاصة بنظام التشغيل لتنزيل OpenThread وإنشائه.

‫Xcode لنظام التشغيل Mac OS X

يجب توفّر XCode لتثبيت OpenThread وإنشائه على Mac OS X.

بعد تثبيت XCode، ثبِّت أدوات سطر الأوامر XCode:

$ xcode-select --install

إنشاء تطبيق على نظام التشغيل Linux أو Mac OS X

تم اختبار تعليمات التثبيت هذه على Ubuntu Server 14.04 LTS وMac OS X Sierra 10.12.6.

ثبِّت OpenThread. تضمن أوامر bootstrap تثبيت مجموعة الأدوات وإعداد البيئة بشكل صحيح:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap

استخدام Windows

إذا كنت تفضّل نظام التشغيل Windows، ننصحك بتجربة إصدار Docker من هذا الدرس العملي.

3- إنشاء تطبيقات OpenThread

بعد اكتمال التثبيت، أنشئ مثالاً لتطبيق OpenThread. في هذا الدرس التطبيقي، سنستخدم مثال المحاكاة.

$ cd ~/src/openthread
$ ./script/cmake-build simulation

الآن، أنشئ OpenThread Daemon:

$ ./script/cmake-build posix -DOT_DAEMON=ON

4. محاكاة شبكة Thread

يعرض التطبيق النموذجي الذي ستستخدمه في هذا الدرس التطبيقي تطبيق OpenThread بسيطًا يعرض واجهات إعداد OpenThread وإدارته من خلال واجهة سطر أوامر (CLI) أساسية.

يأخذك هذا التمرين في جولة حول الحد الأدنى من الخطوات المطلوبة لإرسال طلب اختبار اتصال من جهاز Thread محاكى إلى جهاز Thread محاكى آخر.

يوضّح الشكل أدناه بنية شبكة Thread الأساسية. في هذا التمرين، سنحاكي العقدتَين داخل الدائرة الخضراء: جهاز توجيه Thread وجهاز توجيه Thread رئيسي مع اتصال واحد بينهما.

6e3aa07675f902dc.png

إرسال إشارة إلى عقدة

‫1. عقدة البدء 1

انتقِل إلى الدليل openthread وشغِّل عملية واجهة سطر الأوامر لجهاز Thread محاكى باستخدام الملف الثنائي ot-cli-ftd.

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

ملاحظة: إذا لم يظهر لك الطلب > بعد تنفيذ هذا الأمر، اضغط على enter.

ينفّذ هذا البرنامج الثنائي جهاز OpenThread محاكى على نظام POSIX. يتم تنفيذ برنامج تشغيل الراديو IEEE 802.15.4 فوق بروتوكول UDP (يتم تمرير إطارات IEEE 802.15.4 داخل حمولات UDP).

وسيطة 1 هي واصف ملف يمثّل وحدات البت الأقل أهمية في معرّف IEEE EUI-64 "المخصّص من المصنع" للجهاز المحاكى. تُستخدَم هذه القيمة أيضًا عند الربط بمنفذ UDP لمحاكاة راديو IEEE 802.15.4 (المنفذ = 9000 + واصف الملف). سيستخدم كل مثيل لجهاز Thread محاكى في هذا الدرس العملي واصف ملف مختلفًا.

ملاحظة: لا تستخدِم سوى واصفات الملفات التي تبلغ قيمتها 1 أو أكثر كما هو موضّح في هذا الدرس العملي عند إنشاء عملية لجهاز محاكى. يتم حجز واصف الملف 0 لاستخدام آخر.

أنشئ مجموعة بيانات تشغيلية جديدة واعتمدها كمجموعة البيانات النشطة. مجموعة البيانات التشغيلية هي إعدادات شبكة Thread التي تريد إنشاءها.

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 20
Channel Mask: 07fff800
Ext PAN ID: d6263b6d857647da
Mesh Local Prefix: fd61:2344:9a52:ede0/64
Network Key: e4344ca17d1dca2a33f064992f31f786
Network Name: OpenThread-c169
PAN ID: 0xc169
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

إجراء عملية دمج لمجموعة البيانات هذه باعتبارها المجموعة النشطة:

> dataset commit active
Done

افتح واجهة IPv6:

> ifconfig up
Done

عملية بروتوكول بدء سلسلة المحادثات:

> thread start
Done

انتظِر بضع ثوانٍ وتأكَّد من أنّ الجهاز أصبح قائد Thread. الجهاز الرئيسي هو الجهاز المسؤول عن إدارة عملية تعيين أرقام تعريف أجهزة التوجيه.

> state
leader
Done

اطّلِع على عناوين IPv6 المخصّصة لواجهة Node 1 Thread (ستختلف النتيجة التي ستحصل عليها):

> ipaddr
fd61:2344:9a52:ede0:0:ff:fe00:fc00
fd61:2344:9a52:ede0:0:ff:fe00:5000
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
fe80:0:0:0:94da:92ea:1353:4f3b
Done

يُرجى ملاحظة أنواع عناوين IPv6 المحدّدة التالية:

  • يبدأ بـ fd = mesh-local
  • يبدأ بـ fe80 = link-local

يتم تصنيف أنواع عناوين الشبكة المحلية إلى ما يلي:

  • يحتوي على ff:fe00 = أداة تحديد موقع جهاز التوجيه (RLOC)
  • لا يحتوي على ff:fe00 = معرّف نقطة النهاية (EID)

حدِّد معرّف شريحة SIM المضمّنة (EID) في ناتج وحدة التحكّم ودوِّنه لاستخدامه لاحقًا. في نموذج الناتج أعلاه، يكون معرّف EID كما يلي:

fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6

‫2. عقدة البدء 2

افتح نافذة أوامر طرفية جديدة وانتقِل إلى الدليل openthread وشغِّل عملية واجهة سطر الأوامر. هذا هو جهاز Thread المحاكي الثاني:

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 2

ملاحظة: إذا لم يظهر لك الطلب > بعد تنفيذ هذا الأمر، اضغط على enter.

اضبط مفتاح شبكة Thread ومعرّف PAN، باستخدام القيم نفسها المستخدَمة في مجموعة البيانات التشغيلية للعقدة 1:

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

إجراء عملية دمج لمجموعة البيانات هذه باعتبارها المجموعة النشطة:

> dataset commit active
Done

افتح واجهة IPv6:

> ifconfig up
Done

عملية بروتوكول بدء سلسلة المحادثات:

> thread start
Done

سيتم إعداد الجهاز تلقائيًا كجهاز طفل. يُعادل جهاز Thread Child جهاز End Device، وهو جهاز Thread يرسل ويستقبل حركة المرور أحادية البث فقط مع جهاز Parent.

> state
child
Done

في غضون دقيقتَين، من المفترض أن يتغيّر الوضع من child إلى router. جهاز توجيه Thread قادر على توجيه حركة البيانات بين أجهزة Thread. ويُشار إليه أيضًا باسم "الوالد".

> state
router
Done

التحقّق من الشبكة

إحدى الطرق السهلة للتحقّق من الشبكة المتداخلة هي الاطّلاع على جدول جهاز التوجيه.

‫1. التحقّق من إمكانية الاتصال

في العقدة 2، احصل على RLOC16. تمثّل RLOC16 آخر 16 بت من عنوان RLOC IPv6 للجهاز.

> rloc16
5800
Done

على العقدة 1، تحقَّق من جدول جهاز التوجيه الخاص بالعقدة 2 RLOC16. تأكَّد أولاً من أنّ النقطة 2 قد انتقلت إلى حالة جهاز التوجيه.

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQI In | LQI Out | Age | Extended MAC  |
+----+--------+----------+----------+-------+---------+-----+------------------+
| 20 | 0x5000 |       63 |         0 |     0 |      0 |   0 | 96da92ea13534f3b |
| 22 | 0x5800 |       63 |         0 |     3 |      3 |  23 | 5a4eb647eb6bc66c |

يتم العثور على RLOC الخاص بالعقدة 1، وهو 0xa800، في الجدول، ما يؤكّد أنّها متصلة بالشبكة المتداخلة.

‫2. إرسال طلب Ping من العقدة 1 إلى العقدة 2

تأكَّد من إمكانية الاتصال بين جهازَي Thread المحاكَيين. في العقدة 2، ping رقم تعريف EID المخصّص للعقدة 1:

> ping fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
> 16 bytes from fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6: icmp_seq=1
hlim=64 time=12ms

اضغط على enter للرجوع إلى طلب > CLI.

اختبار الشبكة

بعد أن أصبح بإمكانك إرسال طلبات ping بنجاح بين جهازَي Thread محاكَيَين، اختبِر الشبكة المتداخلة عن طريق إيقاف إحدى العُقد.

الرجوع إلى العقدة 1 وإيقاف Thread:

> thread stop
Done

انتقِل إلى Node 2 وتحقَّق من الحالة. في غضون دقيقتَين، يرصد الجهاز Node 2 أنّ الجهاز الرئيسي (Node 1) غير متصل بالإنترنت، ومن المفترض أن تلاحظ أنّ الجهاز Node 2 أصبح leader للشبكة:

> state
router
Done
...
> state
leader
Done

بعد التأكيد، أوقِف Thread وأعِد ضبط Node 2 على الإعدادات الأصلية قبل الخروج. يتم إجراء إعادة الضبط على الإعدادات الأصلية لضمان عدم نقل بيانات اعتماد شبكة Thread التي استخدمناها في هذا التمرين إلى التمرين التالي.

> thread stop
Done
> factoryreset
>
> exit

أعِد أيضًا ضبط Node 1 على الإعدادات الأصلية واخرج منه:

> factoryreset
>
> exit

راجِع مرجع واجهة سطر الأوامر في OpenThread لاستكشاف جميع أوامر واجهة سطر الأوامر المتاحة.

5. مصادقة العُقد باستخدام عملية الإعداد

في التمرين السابق، أعددت شبكة Thread باستخدام جهازَين محاكَيَين وأثبتّ إمكانية الاتصال. ومع ذلك، لا يسمح هذا إلا بمرور حركة بيانات IPv6 المحلية غير المصادَق عليها بين الأجهزة. لتوجيه حركة بيانات IPv6 العالمية بينها (وبين الإنترنت من خلال جهاز توجيه حدودي لبروتوكول Thread)، يجب مصادقة العُقد.

لإجراء المصادقة، يجب أن يعمل أحد الأجهزة كجهاز إعداد. جهاز Commissioner هو خادم المصادقة الذي تم اختياره حاليًا لأجهزة Thread الجديدة، وهو جهاز التفويض الذي يقدّم بيانات اعتماد الشبكة المطلوبة لتتمكّن الأجهزة من الانضمام إلى الشبكة.

في هذا التمرين، سنستخدم بنية الشبكة نفسها التي تتضمّن عقدتَين كما في السابق. للمصادقة، سيعمل جهاز Thread Leader كجهاز Commissioner، وسيعمل جهاز Thread Router كجهاز Joiner.

d6a67e8a0d0b5dcb.png

‫1. إنشاء شبكة

إذا كنت ستتابع من التمرين السابق، يجب أن تكون لديك نافذتا محطة طرفية مفتوحتان. إذا لم يكن الأمر كذلك، تأكَّد من فتح نافذتَين وجاهزيتهما للاستخدام. سيكون أحدهما هو العقدة 1، والآخر هو العقدة 2.

في Node 1، شغِّل عملية سطر الأوامر (CLI):

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

ملاحظة: إذا لم يظهر لك الطلب > بعد تنفيذ هذا الأمر، اضغط على enter.

أنشئ مجموعة بيانات تشغيلية جديدة، واجعلها المجموعة النشطة، ثم ابدأ سلسلة المحادثات:

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 12
Channel Mask: 07fff800
Ext PAN ID: e68d05794bf13052
Mesh Local Prefix: fd7d:ddf7:877b:8756/64
Network Key: a77fe1d03b0e8028a4e13213de38080e
Network Name: OpenThread-8f37
PAN ID: 0x8f37
PSKc: f9debbc1532487984b17f92cd55b21fc
Security Policy: 0, onrcb
Done

إجراء عملية دمج لمجموعة البيانات هذه باعتبارها المجموعة النشطة:

> dataset commit active
Done

افتح واجهة IPv6:

> ifconfig up
Done

عملية بروتوكول بدء سلسلة المحادثات:

> thread start
Done

انتظِر بضع ثوانٍ وتأكَّد من أنّ الجهاز أصبح جهازًا رئيسيًا في شبكة Thread:

> state
leader
Done

‫2. بدء دور "المفوّض"

أثناء البقاء على الجهاز Node 1، ابدأ دور "المفوّض" (Commissioner):

> commissioner start
Done

السماح لأي جهاز Joiner (باستخدام حرف البدل *) لديه بيانات اعتماد J01NME بالانضمام إلى الشبكة الجهاز المضاف هو جهاز يضيفه مشرف بشري إلى شبكة Thread تم إعدادها.

> commissioner joiner add * J01NME
Done

3- بدء دور "المشارك"

في نافذة وحدة طرفية ثانية، أنشئ عملية جديدة لواجهة سطر الأوامر. هذه هي العقدة 2.

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 2

على الجهاز Node 2، فعِّل دور Joiner باستخدام J01NME Joiner Credential.

> ifconfig up
Done
> joiner start J01NME
Done

... يُرجى الانتظار بضع ثوانٍ للتأكيد ...

Join success

بصفتك جهازًا منضمًا، تمكّن الجهاز (العقدة 2) من مصادقة نفسه بنجاح مع جهاز التحكّم (العقدة 1) وتلقّى بيانات اعتماد شبكة Thread.

بعد إكمال مصادقة الجهاز 2، ابدأ شبكة Thread:

> thread start
Done

4. التحقّق من صحة مصادقة الشبكة

تحقَّق من state على العقدة 2 للتأكّد من أنّها انضمّت الآن إلى الشبكة. في غضون دقيقتَين، ينتقل الجهاز Node 2 من child إلى router:

> state
child
Done
...
> state
router
Done

5. إعادة ضبط الإعدادات

للاستعداد للتمرين التالي، أعِد ضبط الإعدادات. على كل عقدة، أوقِف Thread وأعِد الضبط على الإعدادات الأصلية واخرج من جهاز Thread المحاكى:

> thread stop
Done
> factoryreset
>
> exit

قد تحتاج إلى الضغط على enter عدة مرات لإعادة ظهور طلب > بعد تنفيذ الأمر factoryreset.

6. إدارة الشبكة باستخدام OpenThread Daemon

في هذا التمرين، سنحاكي مثيلاً واحدًا لواجهة سطر الأوامر (جهاز Thread واحد مضمّن في نظام على شريحة) ومثيلاً واحدًا لمعالج مساعد لاسلكي (RCP).

ot-daemon هو وضع لتطبيق OpenThread Posix يستخدم مقبس UNIX كإدخال وإخراج، حتى يتمكّن OpenThread الأساسي من العمل كخدمة. يمكن للعميل التواصل مع هذه الخدمة من خلال الاتصال بالمقبس باستخدام واجهة سطر الأوامر OpenThread كبروتوكول.

ot-ctl هي واجهة سطر أوامر تقدّمها ot-daemon لإدارة RCP وإعدادها. باستخدام هذا الرمز، سنربط جهاز RCP بالشبكة التي أنشأها جهاز Thread.

استخدام ot-daemon

سيستخدم هذا التمرين ثلاث نوافذ طرفية، تتوافق مع ما يلي:

  1. مثيل واجهة سطر الأوامر لجهاز Thread محاكى (العقدة 1)
  2. عملية ot-daemon
  3. ot-ctl مثيل واجهة سطر الأوامر

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

‫1. عقدة البدء 1

في نافذة الوحدة الطرفية الأولى، شغِّل عملية واجهة سطر الأوامر لجهاز Thread المحاكى:

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

ملاحظة: إذا لم يظهر لك الطلب > بعد تنفيذ هذا الأمر، اضغط على enter.

أنشئ مجموعة بيانات تشغيلية جديدة، واجعلها المجموعة النشطة، ثم ابدأ سلسلة المحادثات:

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: 97d584bcd493b824
Mesh Local Prefix: fd55:cf34:dea5:7994/64
Network Key: ba6e886c7af50598df1115fa07658a83
Network Name: OpenThread-34e4
PAN ID: 0x34e4
PSKc: 38d6fd32c866927a4dfcc06d79ae1192
Security Policy: 0, onrcb
Done

إجراء عملية دمج لمجموعة البيانات هذه باعتبارها المجموعة النشطة:

> dataset commit active
Done

افتح واجهة IPv6:

> ifconfig up
Done

عملية بروتوكول بدء سلسلة المحادثات:

> thread start
Done

عرض عناوين IPv6 المخصّصة لواجهة Thread في العقدة 1:

> ipaddr
fd55:cf34:dea5:7994:0:ff:fe00:fc00
fd55:cf34:dea5:7994:0:ff:fe00:d000
fd55:cf34:dea5:7994:460:872c:e807:c4ab
fe80:0:0:0:9cd8:aab6:482f:4cdc
Done
>

كما هو موضّح في خطوة محاكاة شبكة Thread، يكون أحد العناوين محليًا للرابط (fe80) وثلاثة عناوين محلية للشبكة (fd). معرّف EID هو العنوان المحلي للشبكة الذي لا يحتوي على ff:fe00 في العنوان. في هذا المثال على الناتج، يكون معرّف الجهاز المضمّن (EID) هو fd55:cf34:dea5:7994:460:872c:e807:c4ab.

حدِّد معرّف EID المحدّد من ناتج ipaddr، والذي سيتم استخدامه للتواصل مع العقدة.

‫2. بدء ot-daemon

في نافذة الوحدة الطرفية الثانية، انتقِل إلى الدليل openthread، وشغِّل ot-daemon لعقدة RCP، وسنسمّيها العقدة 2. استخدِم العلامة -v verbose حتى تتمكّن من الاطّلاع على ناتج السجلّ والتأكّد من أنّه قيد التشغيل، وتأكَّد من استخدام sudo:

$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+forkpty://build/simulation/examples/apps/ncp/ot-rcp?forkpty-arg=2'

عند النجاح، يؤدي ot-daemon في الوضع التفصيلي إلى إنشاء ناتج مشابه لما يلي:

ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05
ot-daemon[12463]: Thread version: 4
ot-daemon[12463]: Thread interface: wpan0
ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10

اترك هذه الوحدة الطرفية مفتوحة ويتم تشغيلها في الخلفية. لن تُدخل أي أوامر أخرى فيه.

3- استخدام ot-ctl للانضمام إلى الشبكة

لم نكلّف Node 2 (جهاز RCP الذي يحمل الرقم ot-daemon) بأي شبكة Thread حتى الآن. وهنا يأتي دور ot-ctl. يستخدم ot-ctl واجهة سطر الأوامر نفسها التي يستخدمها تطبيق OpenThread CLI. وبالتالي، يمكنك التحكّم في عقد ot-daemon بالطريقة نفسها التي تتحكّم بها في أجهزة Thread المحاكية الأخرى.

في نافذة وحدة طرفية ثالثة، ابدأ ot-ctl:

$ sudo ./build/posix/src/posix/ot-ctl
>

ملاحظة: إذا لم يظهر لك الطلب > بعد تنفيذ هذا الأمر، اضغط على enter.

ستستخدم ot-ctl في نافذة الوحدة الطرفية الثالثة لإدارة Node 2 (عقدة RCP) التي بدأتها في نافذة الوحدة الطرفية الثانية باستخدام ot-daemon. تحقَّق من state للعقدة 2:

> state
disabled
Done

احصل على eui64 الخاص بالجهاز Node 2، وذلك لحصر إمكانية الانضمام على الجهاز Joiner المحدّد:

> eui64
18b4300000000001
Done

في Node 1 (نافذة المحطة الطرفية الأولى)، ابدأ تشغيل Commissioner واقتصر على الانضمام إلى eui64 فقط:

> commissioner start
Done
> commissioner joiner add 18b4300000000001 J01NME
Done

في العُقدة 2 (نافذة الوحدة الطرفية الثالثة)، اعرض واجهة الشبكة وانضم إلى الشبكة:

> ifconfig up
Done
> joiner start J01NME
Done

... يُرجى الانتظار بضع ثوانٍ للتأكيد ...

Join success

بصفتك جهازًا منضمًا، تمكّن جهاز RCP (العقدة 2) من إثبات هويته بنجاح لدى جهاز Commissioner (العقدة 1) وتلقّى بيانات اعتماد شبكة Thread.

الآن، اربط العقدة 2 بشبكة Thread:

> thread start
Done

4. التحقّق من صحة مصادقة الشبكة

تحقَّق من state على العقدة 2 للتأكّد من أنّها انضمّت الآن إلى الشبكة. في غضون دقيقتَين، ينتقل الجهاز Node 2 من child إلى router:

> state
child
Done
...
> state
router
Done

5. التحقّق من إمكانية الاتصال

اخرج من ot-ctl باستخدام Ctrl+D أو الأمر exit، ثم في سطر الأوامر على جهازك المضيف، أرسِل طلب اختبار الاتصال إلى Node 1 باستخدام معرّف EID الخاص به مع الأمر ping6. إذا تم ربط مثيل ot-daemon RCP بشبكة Thread والتواصل معها بنجاح، ستنجح عملية اختبار الاتصال:

$ ping6 -c 4 fd55:cf34:dea5:7994:460:872c:e807:c4ab
PING fd55:cf34:dea5:7994:460:872c:e807:c4ab (fd55:cf34:dea5:7994:460:872c:e807:c4ab): 56 data bytes
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=0 ttl=64 time=4.568 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=1 ttl=64 time=6.396 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=2 ttl=64 time=7.594 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=3 ttl=64 time=5.461 ms
--- fd55:cf34:dea5:7994:460:872c:e807:c4ab ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 4.568/6.005/7.594/1.122 ms

7. تهانينا!

لقد نجحت في محاكاة شبكة Thread الأولى باستخدام OpenThread. رائع!

في هذا الدرس العملي، تعلّمت كيفية:

  • إعداد سلسلة أدوات إنشاء OpenThread
  • محاكاة شبكة Thread
  • مصادقة عُقد Thread
  • إدارة شبكة Thread باستخدام OpenThread Daemon

إذا أردت معرفة المزيد، يمكنك الاطّلاع على المراجع التالية: