شبیه سازی شبکه Thread با OpenThread

۱. مقدمه

۲۶b7f4f6b3ea0700.png

OpenThread که توسط گوگل منتشر شده است، یک پیاده‌سازی متن‌باز از پروتکل شبکه Thread است. گوگل نست (Google Nest) OpenThread را منتشر کرده است تا فناوری مورد استفاده در محصولات Nest را به طور گسترده در دسترس توسعه‌دهندگان قرار دهد تا توسعه محصولات برای خانه‌های متصل را تسریع کند.

مشخصات Thread یک پروتکل ارتباطی بی‌سیم دستگاه به دستگاه مبتنی بر IPv6، قابل اعتماد، امن و کم‌مصرف را برای کاربردهای خانگی تعریف می‌کند. OpenThread تمام لایه‌های شبکه Thread شامل IPv6، 6LoWPAN، IEEE 802.15.4 را با امنیت MAC، ایجاد لینک مش و مسیریابی مش پیاده‌سازی می‌کند.

این Codelab شما را در شبیه‌سازی یک شبکه Thread روی دستگاه‌های شبیه‌سازی شده راهنمایی می‌کند.

آنچه یاد خواهید گرفت

  • نحوه تنظیم ابزار ساخت OpenThread
  • نحوه شبیه‌سازی یک شبکه Thread
  • نحوه احراز هویت گره‌های Thread
  • نحوه مدیریت شبکه Thread با OpenThread Daemon

آنچه نیاز دارید

  • گیت
  • آشنایی اولیه با لینوکس، مسیریابی شبکه

۲. سیستم ساخت را راه‌اندازی کنید

گیت

برای تکمیل این Codelab به Git نیاز است. قبل از ادامه آن را دانلود و نصب کنید.

پس از نصب، دستورالعمل‌های مربوط به سیستم عامل خاص خود را برای دانلود و ساخت OpenThread دنبال کنید.

XCode برای سیستم عامل مک

برای نصب و ساخت OpenThread در Mac OS X، به XCode نیاز است.

پس از نصب XCode، ابزارهای خط فرمان XCode را نصب کنید:

$ xcode-select --install

ساخت بر روی لینوکس / مک او اس ایکس

این دستورالعمل‌های نصب روی Ubuntu Server 14.04 LTS و Mac OS X Sierra 10.12.6 آزمایش شده‌اند.

OpenThread را نصب کنید. دستورات bootstrap اطمینان حاصل می‌کنند که toolchain نصب شده و محیط به درستی پیکربندی شده است:

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

با استفاده از ویندوز

اگر ویندوز را ترجیح می‌دهید، توصیه می‌کنیم نسخه داکر این Codelab را امتحان کنید.

۳. برنامه‌های OpenThread را بسازید

پس از اتمام نصب، برنامه نمونه OpenThread را بسازید. برای این Codelab ما از مثال شبیه‌سازی استفاده می‌کنیم.

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

اکنون OpenThread Daemon را بسازید:

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

۴. شبیه‌سازی یک شبکه Thread

برنامه نمونه‌ای که برای این Codelab استفاده خواهید کرد، یک برنامه OpenThread مینیمال را نشان می‌دهد که رابط‌های پیکربندی و مدیریت OpenThread را از طریق یک رابط خط فرمان (CLI) پایه در معرض نمایش قرار می‌دهد.

این تمرین شما را با حداقل مراحل مورد نیاز برای پینگ کردن یک دستگاه Thread شبیه‌سازی شده از یک دستگاه Thread شبیه‌سازی شده دیگر آشنا می‌کند.

شکل زیر یک توپولوژی شبکه Thread پایه را توصیف می‌کند. برای این تمرین، دو گره درون دایره سبز را شبیه‌سازی خواهیم کرد: یک Thread Leader و یک Thread Router با یک اتصال واحد بین آنها.

6e3aa07675f902dc.png

پینگ کردن یک گره

۱. گره ۱ را شروع کنید

به دایرکتوری openthread بروید و با استفاده از فایل باینری ot-cli-ftd فرآیند CLI را برای یک دستگاه Thread شبیه‌سازی شده ایجاد کنید.

$ 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 (پورت = ۹۰۰۰ + توصیف‌گر فایل) استفاده می‌شود. هر نمونه از یک دستگاه Thread شبیه‌سازی‌شده در این Codelab از یک توصیف‌گر فایل متفاوت استفاده خواهد کرد.

توجه: فقط از توصیف‌گرهای فایل 1 یا بزرگتر، همانطور که در این Codelab ذکر شده است، هنگام ایجاد فرآیند برای یک دستگاه شبیه‌سازی شده استفاده کنید. توصیف‌گر فایل 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

چند ثانیه صبر کنید و تأیید کنید که دستگاه به عنوان رهبر رشته (Thread Leader) انتخاب شده است. رهبر، دستگاهی است که مسئولیت مدیریت تخصیص شناسه روتر (router ID) را بر عهده دارد.

> state
leader
Done

آدرس‌های IPv6 اختصاص داده شده به رابط 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 شروع می‌شود = لینک-محلی

انواع آدرس‌های محلی مش به صورت زیر طبقه‌بندی می‌شوند:

  • شامل ff:fe00 = یابنده مسیریاب (RLOC)
  • شامل ff:fe00 = شناسه نقطه پایانی (EID) نمی‌شود.

EID را در خروجی کنسول خود مشخص کنید و آن را برای استفاده‌های بعدی یادداشت کنید. در خروجی نمونه بالا، EID به صورت زیر است:

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

۲. گره ۲ را شروع کنید

یک ترمینال جدید باز کنید و به دایرکتوری openthread بروید و فرآیند CLI را اجرا کنید. این دومین دستگاه Thread شبیه‌سازی شده شماست:

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

نکته: اگر بعد از اجرای این دستور، اعلان > را مشاهده نکردید، enter فشار دهید.

کلید شبکه نخ و شناسه PAN را با استفاده از همان مقادیر مجموعه داده‌های عملیاتی گره ۱ پیکربندی کنید:

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

این مجموعه داده را به عنوان مجموعه داده فعال ثبت کنید:

> dataset commit active
Done

رابط IPv6 را اجرا کنید:

> ifconfig up
Done

شروع عملیات پروتکل Thread:

> thread start
Done

دستگاه خود را به عنوان یک Child مقداردهی اولیه می‌کند. یک Thread Child معادل یک End Device است که یک دستگاه Thread است که ترافیک Unicast را فقط با یک دستگاه Parent ارسال و دریافت می‌کند.

> state
child
Done

ظرف ۲ دقیقه باید شاهد تغییر وضعیت از child به router باشید. یک روتر Thread قادر به مسیریابی ترافیک بین دستگاه‌های Thread است. به آن والد نیز گفته می‌شود.

> state
router
Done

شبکه را تأیید کنید

یک راه آسان برای تأیید شبکه مش، نگاه کردن به جدول روتر است.

۱. اتصال را بررسی کنید

در گره ۲، RLOC16 را دریافت کنید. RLOC16 آخرین ۱۶ بیت آدرس RLOC IPv6 دستگاه است.

> rloc16
5800
Done

در گره ۱، جدول روتر را برای RLOC16 گره ۲ بررسی کنید. مطمئن شوید که گره ۲ ابتدا به حالت روتر تغییر وضعیت داده است.

> 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 گره ۱ که 0xa800 است در جدول یافت می‌شود که اتصال آن به شبکه را تأیید می‌کند.

۲. پینگ کردن گره ۱ از گره ۲

اتصال بین دو دستگاه Thread شبیه‌سازی شده را تأیید کنید. در گره ۲، EID اختصاص داده شده به گره ۱ ping :

> 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

برای بازگشت به اعلان > CLI، enter فشار دهید.

شبکه را آزمایش کنید

حالا که می‌توانید با موفقیت بین دو دستگاه Thread شبیه‌سازی شده پینگ کنید، شبکه مش را با آفلاین کردن یک گره آزمایش کنید.

بازگشت به گره ۱ و متوقف کردن نخ:

> thread stop
Done

به گره ۲ سوئیچ کنید و وضعیت را بررسی کنید. ظرف دو دقیقه، گره ۲ تشخیص می‌دهد که رهبر (گره ۱) آفلاین است و باید شاهد انتقال گره ۲ به leader شبکه باشید:

> state
router
Done
...
> state
leader
Done

پس از تأیید، Thread را متوقف کنید و قبل از خروج، Node 2 را به تنظیمات کارخانه برگردانید. تنظیم مجدد کارخانه برای اطمینان از اینکه اعتبارنامه‌های شبکه Thread که در این تمرین استفاده کردیم به تمرین بعدی منتقل نمی‌شوند، انجام می‌شود.

> thread stop
Done
> factoryreset
>
> exit

همچنین تنظیمات کارخانه را بازنشانی کنید و از گره ۱ خارج شوید:

> factoryreset
>
> exit

برای بررسی تمام دستورات CLI موجود، به مرجع OpenThread CLI مراجعه کنید.

۵. احراز هویت گره‌ها با راه‌اندازی

در تمرین قبلی، شما یک شبکه Thread با دو دستگاه شبیه‌سازی شده و اتصال تأیید شده راه‌اندازی کردید. با این حال، این فقط به ترافیک لینک-محلی IPv6 احراز هویت نشده اجازه عبور بین دستگاه‌ها را می‌دهد. برای مسیریابی ترافیک جهانی IPv6 بین آنها (و اینترنت از طریق یک روتر مرزی Thread)، گره‌ها باید احراز هویت شوند.

برای احراز هویت، یک دستگاه باید به عنوان کمیسر عمل کند. کمیسر، سرور احراز هویت منتخب فعلی برای دستگاه‌های جدید Thread و مجوز دهنده برای ارائه اعتبارنامه‌های شبکه مورد نیاز برای پیوستن دستگاه‌ها به شبکه است.

در این تمرین، ما از همان توپولوژی دو گره‌ای قبلی استفاده خواهیم کرد. برای احراز هویت، Thread Leader به عنوان کمیسر و Thread Router به عنوان Joiner عمل خواهند کرد.

d6a67e8a0d0b5dcb.png

۱. یک شبکه ایجاد کنید

اگر از تمرین قبلی ادامه می‌دهید، باید از قبل دو پنجره ترمینال باز داشته باشید. در غیر این صورت، مطمئن شوید که دو پنجره باز و آماده استفاده هستند. یکی به عنوان گره ۱ و دیگری به عنوان گره ۲ عمل خواهد کرد.

در گره ۱، فرآیند CLI را ایجاد کنید:

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

نکته: اگر بعد از اجرای این دستور، اعلان > را مشاهده نکردید، enter فشار دهید.

یک مجموعه داده عملیاتی جدید ایجاد کنید، آن را به عنوان مجموعه داده فعال ثبت کنید و Thread را شروع کنید:

> 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

۲. نقش کمیسر را شروع کنید

در حالی که هنوز در گره ۱ هستید، نقش کمیسر را شروع کنید:

> commissioner start
Done

به هر Joiner (با استفاده از علامت * ) که دارای اعتبارنامه Joiner J01NME است، اجازه دهید تا به شبکه متصل شود. Joiner دستگاهی است که توسط یک مدیر انسانی به یک شبکه Thread متصل شده اضافه می‌شود.

> commissioner joiner add * J01NME
Done

۳. نقش Joiner را شروع کنید

در پنجره ترمینال دوم، یک فرآیند CLI جدید ایجاد کنید. این Node 2 است.

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

در گره ۲، نقش Joiner را با استفاده از اعتبارنامه J01NME Joiner فعال کنید.

> ifconfig up
Done
> joiner start J01NME
Done

... چند ثانیه برای تأیید صبر کنید ...

Join success

به عنوان یک Joiner، دستگاه (Node 2) با موفقیت خود را توسط Commissioner (Node 1) احراز هویت کرده و اعتبارنامه‌های شبکه Thread را دریافت کرده است.

حالا که نود ۲ احراز هویت شد، Thread را شروع کنید:

> thread start
Done

۴. اعتبارسنجی احراز هویت شبکه

state گره ۲ را بررسی کنید تا تأیید شود که اکنون به شبکه پیوسته است. ظرف دو دقیقه، گره ۲ از child به router منتقل می‌شود:

> state
child
Done
...
> state
router
Done

۵. تنظیمات را ریست کنید

برای آماده شدن برای تمرین بعدی، پیکربندی را مجدداً تنظیم کنید. در هر گره، Thread را متوقف کنید، آن را به تنظیمات کارخانه برگردانید و از دستگاه Thread شبیه‌سازی شده خارج شوید:

> thread stop
Done
> factoryreset
>
> exit

ممکن است لازم باشد چند بار enter فشار دهید تا بعد از دستور factoryreset اعلان > نمایش داده شود.

۶. مدیریت شبکه با OpenThread Daemon

برای این تمرین، ما قصد داریم یک نمونه CLI (یک دستگاه SoC Thread تعبیه‌شده) و یک نمونه کمک‌پردازنده رادیویی (RCP) را شبیه‌سازی کنیم.

ot-daemon حالتی از برنامه OpenThread Posix است که از یک سوکت یونیکس به عنوان ورودی و خروجی استفاده می‌کند، به طوری که هسته OpenThread می‌تواند به عنوان یک سرویس اجرا شود. یک کلاینت می‌تواند با اتصال به سوکت با استفاده از OpenThread CLI به عنوان پروتکل، با این سرویس ارتباط برقرار کند.

ot-ctl یک رابط خط فرمان (CLI) است که توسط ot-daemon برای مدیریت و پیکربندی RCP ارائه شده است. با استفاده از این، RCP را به شبکه ایجاد شده توسط دستگاه Thread متصل خواهیم کرد.

از ot-daemon استفاده کنید

این تمرین از سه پنجره ترمینال استفاده خواهد کرد که مربوط به موارد زیر هستند:

  1. نمونه CLI از دستگاه Thread شبیه‌سازی شده (گره ۱)
  2. فرآیند ot-daemon
  3. نمونه خط فرمان ot-ctl

اگر تمرین قبلی را ادامه می‌دهید، باید دو پنجره ترمینال از قبل باز شده باشد. برای اطمینان از اینکه سه پنجره ترمینال برای این تمرین در دسترس دارید، پنجره سوم را نیز باز کنید.

۱. گره ۱ را شروع کنید

در اولین پنجره ترمینال، فرآیند CLI را برای دستگاه Thread شبیه‌سازی شده خود ایجاد کنید:

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

نکته: اگر بعد از اجرای این دستور، اعلان > را مشاهده نکردید، enter فشار دهید.

یک مجموعه داده عملیاتی جدید ایجاد کنید، آن را به عنوان مجموعه داده فعال ثبت کنید و Thread را شروع کنید:

> 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 گره ۱ را مشاهده کنید:

> 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 توضیح داده شد، یک آدرس link-local ( fe80 ) و سه آدرس mesh-local ( fd ) هستند. EID آدرس mesh-local است که شامل ff:fe00 در آدرس نیست. در این خروجی نمونه، EID به fd55:cf34:dea5:7994:460:872c:e807:c4ab است.

EID خاص را از خروجی ipaddr خود شناسایی کنید، که برای ارتباط با گره استفاده خواهد شد.

۲. شروع ot-daemon

در پنجره ترمینال دوم، به دایرکتوری openthread بروید و ot-daemon برای یک گره RCP که ما آن را گره ۲ می‌نامیم، شروع کنید. از پرچم verbose -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 در حالت verbose خروجی مشابه زیر تولید می‌کند:

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

این ترمینال را باز و در پس‌زمینه اجرا کنید. هیچ دستور دیگری در آن وارد نخواهید کرد.

۳. برای اتصال به شبکه از ot-ctl استفاده کنید

ما هنوز Node 2 ( ot-daemon RCP) را به هیچ شبکه Thread ای راه اندازی نکرده ایم. اینجاست که ot-ctl وارد عمل می شود. ot-ctl از همان رابط خط فرمان (CLI) برنامه OpenThread CLI استفاده می کند. بنابراین، می توانید گره های ot-daemon را به همان روشی که سایر دستگاه های Thread شبیه سازی شده کنترل می کنید، کنترل کنید.

در یک پنجره ترمینال سوم، ot-ctl را اجرا کنید:

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

نکته: اگر بعد از اجرای این دستور، اعلان > را مشاهده نکردید، enter فشار دهید.

شما در این پنجره ترمینال سوم ot-ctl برای مدیریت گره ۲ (گره RCP) که در پنجره ترمینال دوم با ot-daemon شروع کرده‌اید، استفاده خواهید کرد. state گره ۲ را بررسی کنید:

> state
disabled
Done

برای محدود کردن اتصال به Joiner خاص، eui64 گره ۲ را دریافت کنید:

> eui64
18b4300000000001
Done

در گره ۱ (پنجره ترمینال اول)، کمیسر را اجرا کنید و اتصال را فقط به آن eui64 محدود کنید:

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

در گره ۲ (پنجره ترمینال سوم)، رابط شبکه را باز کنید و به شبکه بپیوندید:

> ifconfig up
Done
> joiner start J01NME
Done

... چند ثانیه برای تأیید صبر کنید ...

Join success

به عنوان یک عضو، RCP (گره ۲) با موفقیت خود را نزد کمیسر (گره ۱) احراز هویت کرده و اعتبارنامه‌های شبکه Thread را دریافت کرده است.

حالا گره ۲ را به شبکه Thread وصل کنید:

> thread start
Done

۴. اعتبارسنجی احراز هویت شبکه

state گره ۲ را بررسی کنید تا تأیید شود که اکنون به شبکه پیوسته است. ظرف دو دقیقه، گره ۲ از child به router منتقل می‌شود:

> state
child
Done
...
> state
router
Done

۵. اعتبارسنجی اتصال

با استفاده از Ctrl+D یا دستور exit ot-ctl خارج شوید و در خط فرمان دستگاه میزبان خود، Node 1 را با استفاده از 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

۷. تبریک می‌گویم!

شما با موفقیت اولین شبکه Thread خود را با استفاده از OpenThread شبیه‌سازی کردید. عالی!

در این Codelab شما یاد گرفتید که چگونه:

  • ابزار ساخت OpenThread را تنظیم کنید
  • شبیه‌سازی یک شبکه Thread
  • احراز هویت گره‌های Thread
  • مدیریت شبکه Thread با OpenThread Daemon

اگر می‌خواهید بیشتر بدانید، این منابع را بررسی کنید: