1. مقدمة
خدمة OpenThread التي أصدرتها Google هي خدمة مفتوحة المصدر لبروتوكول شبكة Thread. أطلقت Google Nest أداة OpenThread لإتاحة التكنولوجيا المستخدمة في منتجات Nest على نطاق واسع للمطوّرين، ما يساعد في تسريع عملية تطوير المنتجات للشبكات المنزلية المتصلة.
تحدِّد مواصفات سلسلة المحادثات بروتوكول اتصال من جهاز إلى جهاز لاسلكي موثوق به وآمن ومنخفض الطاقة يستند إلى بروتوكول IPv6، وذلك في التطبيقات المنزلية. ينفِّذ OpenThread جميع طبقات شبكات Thread، بما في ذلك IPv6 و6LoWPAN وIEEE 802.15.4 مع أمان MAC و"إنشاء رابط متداخل" و"توجيه الشبكة المتداخلة".
يرشدك هذا الدرس التطبيقي إلى خطوات محاكاة شبكة Thread على أجهزة تمت محاكاتها.
ما ستتعرَّف عليه
- كيفية إعداد سلسلة أدوات إنشاء OpenThread
- كيفية محاكاة شبكة Thread
- كيفية مصادقة عُقد سلسلة التعليمات
- كيفية إدارة شبكة Thread باستخدام OpenThread Daemon
المتطلبات
- غيت
- معرفة أساسية بنظام التشغيل 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 الأساسية. في هذا التمرين، سنحاكي النقطتين داخل الدائرة الخضراء: قائد سلسلة محادثات وجهاز توجيه مؤشر ترابط بينهما.
اختبار الاتصال بعقدة
1. بدء العقدة 1
انتقِل إلى دليل openthread
وابدأ عملية CLI على جهاز 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:
> thread start Done
انتظِر بضع ثوانٍ وتأكَّد من أنّ الجهاز أصبح قائد سلسلة المحادثات. القائد هو الجهاز المسؤول عن إدارة تعيين رقم تعريف جهاز التوجيه.
> state leader Done
عرض عناوين IPv6 المخصصة لواجهة Thread للعقدة 1 (سيكون مخرجك مختلفًا):
> 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
= شبكة محلية - يبدأ بـ
fe80
= link-local
ويتم تصنيف أنواع العناوين المتداخلة المحلية بشكل أكبر:
- يحتوي على
ff:fe00
= محدِّد مواقع جهاز التوجيه (RLOC) - لا تحتوي على
ff:fe00
= معرّف نقطة النهاية (EID).
حدِّد معرّف EID في وحدة التحكّم ودوِّنه لاستخدامه لاحقًا. في النموذج الناتج أعلاه، يكون معرّف شريحة SIM المضمّنة (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:
> thread start Done
سيُعد الجهاز نفسه في وضع "الأطفال". جهاز Thread Child يكافئ الجهاز النهائي، وهو جهاز Thread يرسل ويستقبل الزيارات الأحادية فقط باستخدام الجهاز الأصلي.
> state child Done
من المفترض أن يتم تبديل الحالة من child
إلى router
في غضون دقيقتين. بإمكان جهاز توجيه سلسلة التعليمات توجيه حركة البيانات بين أجهزة Thread. يشار إليه أيضًا باسم الوالد.
> state router Done
التحقق من الشبكة
من الطرق السهلة للتحقق من الشبكة المتداخلة (mesh) إلقاء نظرة على جدول جهاز التوجيه.
1. التحقّق من إمكانية الاتصال
في العقدة 2، احصل على RLOC16. RLOC16 هو آخر 16 بت من عنوان RLOC IPv6 على الجهاز.
> rloc16 5800 Done
في العقدة 1، تحقق من جدول جهاز التوجيه RLOC16 للعقدة 2. تأكَّد من تبديل العقدة 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
، تم تخصيص معرّف شريحة SIM المضمّنة (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
للرجوع إلى طلب واجهة سطر الأوامر >
.
اختبار الشبكة
والآن بعد أن أصبح بإمكانك إجراء اختبار الاتصال بنجاح بين جهازين من أجهزة Thread، عليك اختبار الشبكة المتداخلة (mesh) من خلال نقل عقدة إلى جهاز واحد بلا اتصال بالإنترنت.
الرجوع إلى العقدة 1 وإيقاف Thread:
> thread stop Done
انتقِل إلى العقدة 2 وتحقَّق من الحالة. في غضون دقيقتين، تكتشف العقدة 2 أن القائد (العقدة 1) غير متصل، ومن المفترض أن ترى انتقال العقدة 2 ليكون leader
للشبكة:
> state router Done ... > state leader Done
بعد التأكيد، أوقِف سلسلة Thread وأعد ضبط العقدة 2 على الإعدادات الأصلية قبل الخروج. يتم إجراء إعادة الضبط على الإعدادات الأصلية للتأكد من أن بيانات اعتماد شبكة Thread التي استخدمناها في هذا التمرين لم يتم نقلها إلى التمرين التالي.
> thread stop Done > factoryreset > > exit
أيضًا إعادة الضبط على الإعدادات الأصلية والخروج من العقدة 1:
> factoryreset > > exit
يمكنك الاطّلاع على مرجع واجهة سطر الأوامر OpenThread لاستكشاف جميع أوامر واجهة سطر الأوامر المتاحة.
5- مصادقة العُقد باستخدام "التفويض"
في التمرين السابق، قمت بإعداد شبكة Thread مع جهازين محاكى واتصال تم التحقق منه. ومع ذلك، يسمح هذا فقط بالمرور بين الأجهزة للزيارات المحلية لرابط IPv6 الذي لم تتم مصادقته. لتوجيه حركة بيانات IPv6 العالمية بينها (والإنترنت عبر موجِّه حدود Thread)، يجب مصادقة العُقد.
ولإجراء المصادقة، يجب أن يكون جهاز واحد مفوَّضًا. المفوّض هو خادم المصادقة المختار حاليًا لأجهزة Thread الجديدة، والمفوِّض لتقديم بيانات اعتماد الشبكة المطلوبة حتى يتم انضمام الأجهزة إلى الشبكة.
في هذا التمرين، سنستخدم نفس طوبولوجيا العقدة كما في السابق. بالنسبة إلى المصادقة، سيلعب قائد سلسلة المحادثات دور المفوَّض، وهو جهاز توجيه سلسلة التعليمات كرابط.
1. إنشاء شبكة
في حالة المتابعة من التمرين السابق، يُفترض أن يكون لديك بالفعل نافذتين طرفيتين مفتوحتين. وإذا لم يكن الأمر كذلك، فتأكد من أن اثنين مفتوحين وجاهزين للاستخدام. سيتم استخدام إحداهما باعتبارها العقدة 1، والأخرى تمثل العقدة 2.
في العقدة 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:
> thread start Done
انتظِر بضع ثوانٍ وتأكَّد من أنّ الجهاز أصبح قائد سلسلة المحادثات:
> state leader Done
2. بدء دور المفوّض
أثناء استخدام العقدة 1، ابدأ دور المفوّض:
> commissioner start Done
يمكنك السماح لأي أداة ربط (باستخدام حرف البدل *
) من خلال "بيانات اعتماد الانضمام" في J01NME
بتجميع البيانات على الشبكة. أداة الانضمام هي جهاز يضيفه مشرف بشري إلى شبكة Thread Network معتمَدة.
> commissioner joiner add * J01NME Done
3- بدء دور "الانضمام"
في نافذة طرفية ثانية، ظهور عملية CLI جديدة. هذه هي العقدة 2.
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 2
في العقدة 2، فعِّل دور "الانضمام" باستخدام "بيانات اعتماد الانضمام" في J01NME
.
> ifconfig up Done > joiner start J01NME Done
... يُرجى الانتظار بضع ثوانٍ للتأكيد ...
Join success
بصفته منضمًا، نجح الجهاز (العقدة 2) في مصادقة نفسه مع المفوّض (العقدة 1) وتلقى بيانات اعتماد شبكة Thread.
الآن بعد أن تمت مصادقة العقدة 2، ابدأ Thread:
> thread start Done
4. التحقّق من مصادقة الشبكة
تحقَّق من state
في العقدة 2 للتحقُّق من انضمامه إلى الشبكة. في غضون دقيقتين، ستنتقل العقدة 2 من child
إلى router
:
> state child Done ... > state router Done
5- إعادة ضبط الإعدادات
للتحضير للتمرين التالي، أعد تعيين التكوين. أوقِف Thread على كل عقدة، وأعِد ضبط الجهاز على الإعدادات الأصلية، ثم اخرج من جهاز Thread الذي تمت محاكاته:
> thread stop Done > factoryreset > > exit
قد تحتاج إلى الضغط على enter
عدة مرات لإعادة عرض الطلب >
بعد إدخال أمر factoryreset
.
6- إدارة الشبكة باستخدام OpenThread Daemon
في هذا التمرين، سنحاكي مثيل واجهة سطر الأوامر (CLI) واحد (جهاز سلك سلكي ذو رقاقة منخفض مضمَّنة) ومثيل واحد معالج لاسلكي مساعد (RCP).
ot-daemon
هو وضع في تطبيق OpenThread Posix يستخدم مقبس UNIX كإدخال وإخراج، حتى يمكن تشغيل خدمة OpenThread الأساسية كخدمة. يمكن للعميل الاتصال بهذه الخدمة من خلال الاتصال بالمقبس باستخدام OpenThread CLI كبروتوكول.
ot-ctl
هو واجهة سطر الأوامر التي يوفّرها ot-daemon
لإدارة RCP وإعداده. باستخدام هذا، سنربط RCP بالشبكة التي أنشأها جهاز Thread.
استخدام البرنامج الخفي
سيستخدم هذا التمرين ثلاث نوافذ طرفية تعادل ما يلي:
- مثيل CLI لجهاز Thread الذي تمت محاكاته (العقدة 1)
- عملية
ot-daemon
- مثيل واحد (
ot-ctl
) لواجهة سطر الأوامر
في حالة المتابعة من التمرين السابق، يجب أن يكون لديك نافذتان طرفيتان مفتوحتان بالفعل. افتح نافذة ثالثة للتأكد من أن لديك ثلاث نوافذ طرفية متاحة لهذا التمرين.
1. بدء العقدة 1
في النافذة الطرفية الأولى، ابدأ عملية واجهة سطر الأوامر (CLI) لجهاز 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:
> 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
). معرّف شريحة SIM المضمّنة (EID) هو عنوان الشبكة المحلية المتداخلة الذي لا يحتوي على ff:fe00
في العنوان. في هذا النموذج الناتج، يكون معرّف شريحة SIM المضمّنة (EID) هو fd55:cf34:dea5:7994:460:872c:e807:c4ab
.
حدِّد معرّف شريحة SIM المضمّنة (EID) المحدَّد من ناتج ipaddr
، والذي سيتم استخدامه للاتصال بالعقدة.
2. بدء البرنامج الخفي
في نافذة الوحدة الطرفية الثانية، انتقِل إلى دليل openthread
، وابدأ تشغيل ot-daemon
لعقدة RCP، التي نطلق عليها اسم العقدة 2. استخدِم علامة -v
المطوَّلة حتى تتمكّن من الاطّلاع على مخرجات السجلّ والتأكد من أنّها قيد التشغيل، مع الحرص على استخدام 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 للانضمام إلى الشبكة
لم نفوّض العقدة 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
في نافذة الوحدة الطرفية الثالثة هذه لإدارة العقدة 2 (عقدة RCP) التي بدأتها في نافذة الوحدة الطرفية الثانية باستخدام ot-daemon
. تحقَّق من state
للعقدة 2:
> state disabled Done
احصل على eui64
للعقدة 2، لتقييد الانضمام إلى عنصر الانضمام المحدَّد:
> eui64 18b4300000000001 Done
في العقدة 1 (نافذة الوحدة الطرفية الأولى)، ابدأ المفوَّض واحصر الانضمام إلى eui64 فقط:
> commissioner start Done > commissioner joiner add 18b4300000000001 J01NME Done
على العقدة 2 (النافذة الطرفية الثالثة)، اعرض واجهة الشبكة وانضم إلى الشبكة:
> ifconfig up Done > joiner start J01NME Done
... يُرجى الانتظار بضع ثوانٍ للتأكيد ...
Join success
بصفته مشاركًا، نجح RCP (العقدة 2) في مصادقة نفسه مع المفوّض (العقدة 1) وتلقى بيانات اعتماد Thread Network.
اربط الآن العقدة 2 بشبكة Thread:
> thread start Done
4. التحقّق من مصادقة الشبكة
تحقَّق من state
في العقدة 2 للتحقُّق من انضمامه إلى الشبكة. في غضون دقيقتين، ستنتقل العقدة 2 من child
إلى router
:
> state child Done ... > state router Done
5- التحقّق من إمكانية الاتصال
عليك إنهاء ot-ctl
باستخدام الأمر Ctrl+D أو exit
، وعلى سطر الأوامر في الجهاز المضيف، ping عقدة 1، باستخدام معرّف شريحة SIM المضمّنة (EID) الخاص به مع الأمر ping6
. في حال انضمام مثيل RCP ot-daemon
إلى شبكة 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 باستخدام OpenThread Daemon
لمزيد من المعلومات، يمكنك الاطّلاع على المراجع التالية: