Google is committed to advancing racial equity for Black communities. See how.
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

شبیه سازی شبکه Thread با استفاده از OpenThread در Docker

26b7f4f6b3ea0700.png

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

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

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

آنچه خواهید آموخت

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

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

  • داکر
  • دانش اولیه لینوکس ، مسیریابی شبکه

این Codelab برای استفاده از Docker در سیستم عامل های لینوکس ، Mac OS X یا ویندوز طراحی شده است. لینوکس محیط پیشنهادی است.

داکر را نصب کنید

Docker را روی سیستم عامل دلخواه خود نصب کنید.

بارگیری Docker

تصویر Docker را بکشید

پس از نصب Docker ، یک پنجره ترمینال را باز کرده و تصویر openthread/codelab_otsim Docker را openthread/codelab_otsim . این تصویر شامل OpenThread و OpenThread Daemon است که از قبل ساخته شده و آماده استفاده برای این Codelab است.

$ docker pull openthread/codelab_otsim:latest

توجه داشته باشید که بارگیری کامل ممکن است چند دقیقه طول بکشد.

در یک پنجره ترمینال ، یک ظرف Docker را از تصویر شروع کرده و به پوسته bash آن متصل شوید:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

به پرچم هایی که برای این Codelab لازم است توجه داشته باشید:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0 - این امکان IPv6 را در ظرف فراهم می کند
  • --cap-add=net_admin - قابلیت NET_ADMIN را فعال می کند ، که به شما امکان می دهد عملیات مربوط به شبکه مانند اضافه کردن مسیرهای IP را انجام دهید

پس از ورود به محفظه ، سریعاً باید دستورالعمل مشابه این را داشته باشید:

root@c0f3912a74ff:/#

در مثال بالا ، c0f3912a74ff شناسه کانتینر است. شناسه Container برای نمونه شما از ظرف Docker با آنچه در درخواست های این Codelab نشان داده شده متفاوت است.

با استفاده از داکر

این Codelab فرض می کند شما اصول استفاده از Docker را می دانید. شما باید در ظرف Docker به طور کامل Codelab بمانید.

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

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

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

6e3aa07675f902dc.png

ایجاد شبکه

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

اگر قبلاً چنین کاری نکرده اید ، در یک پنجره ترمینال ، ظرف Docker را شروع کرده و به پوسته bash آن متصل شوید:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

در محفظه Docker ، به فهرست openthread و فرآیند CLI را برای یک دستگاه Thread شبیه سازی شده با استفاده از باینری ot-cli-ftd تخم ریزی کنید.

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 1

این باینری یک دستگاه OpenThread را که در بالای POSIX شبیه سازی شده است ، پیاده سازی می کند. درایور رادیویی IEEE 802.15.4 در بالای UDP پیاده سازی می شود (فریم های IEEE 802.15.4 از طریق بارهای UDP منتقل می شوند).

آرگومان 1 یک توصیف کننده پرونده است که کمترین بیت های "اختصاص داده شده به کارخانه" IEEE EUI-64 را برای دستگاه شبیه سازی شده نشان می دهد. این مقدار همچنین هنگام اتصال به پورت UDP برای شبیه سازی رادیویی IEEE 802.15.4 (پورت = 9000 + توصیف کننده پرونده) استفاده می شود. هر نمونه از دستگاه Thread تقلید شده در این Codelab از توصیفگر پرونده دیگری استفاده می کند.

توجه: هنگام تخمگذاری فرآیند برای دستگاه شبیه سازی شده ، فقط از توصیف کننده های پرونده 1 یا بالاتر همانطور که در این Codelab ذکر شده استفاده کنید. توصیف کننده فایل 0 برای موارد دیگر محفوظ است.

اگر شما نمی بینید

>

سریع پس از اجرای این دستور ، را فشار دهید

enter

.

یک مجموعه داده عملیاتی جدید ایجاد کنید و آن را به عنوان یک مجموعه فعال متعهد کنید. مجموعه داده عملیاتی پیکربندی شبکه 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
Master 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 Leader تبدیل شده است. Leader دستگاهی است که مسئول تعیین تکلیف شناسه روتر است.

> 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 در خروجی کنسول خود ، آن را یادداشت کنید تا بعداً استفاده شود. در نمونه خروجی فوق ، EID به شرح زیر است:

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

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

ترمینال جدیدی را باز کنید و یک پوسته bash را در محفظه Docker که در حال اجرا است اجرا کنید تا از آن برای Node 2 استفاده کنید.

$ docker exec -it codelab_otsim_ctnr bash

با این openthread جدید bash ، به فهرست openthread و روند CLI را تخم ریزی کنید. این دومین دستگاه موضوع شبیه سازی شده شما است:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

اگر شما نمی بینید

>

سریع پس از اجرای این دستور ، را فشار دهید

enter

.

Thread Master Key و PAN ID را با استفاده از مقادیر مشابه مجموعه داده عملیاتی Node 1 پیکربندی کنید:

> dataset masterkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

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

> dataset commit active
Done

رابط IPv6 را بیاورید:

> ifconfig up
Done

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

> thread start
Done

دستگاه خود را به عنوان یک کودک اولیه می کند. Thread Child معادل End End است که دستگاه Thread است و فقط با دستگاه والدین ترافیک یکپارچه را انتقال و دریافت می کند.

> state
child
Done

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

> state
router
Done

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

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

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

در گره 2 ، RLOC16 را دریافت کنید. RLOC16 آخرین 16 بیت آدرس RLOC IPv6 دستگاه است.

> rloc16
5800
Done

در گره 1 ، جدول روتر را برای NL 2 RLOC16 بررسی کنید. مطمئن شوید که نود 2 ابتدا به حالت روتر تغییر کرده باشد.

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

RLOC گره 2 از 0x5800 در جدول یافت می شود و تأیید اتصال آن به مش است.

2. Ping Node 1 از Node 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

برای بازگشت به دستور > CLI enter فشار دهید.

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

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

بازگشت به گره 1 و توقف موضوع:

> thread stop
Done

به گره 2 بروید و وضعیت را بررسی کنید. در عرض دو دقیقه ، گره 2 متوجه می شود که رهبر (گره 1) آفلاین است و شما باید انتقال گره 2 را به عنوان leader شبکه ببینید:

> state
router
Done
...
> state
leader
Done

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

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

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

> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

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

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

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

d6a67e8a0d0b5dcb.png

داکر

برای هر Node (پنجره ترمینال) در تمرینات باقیمانده ، مطمئن شوید که ظرف Docker را با ساخت OpenThread اجرا می کنید. اگر از تمرین قبلی ادامه می دهید ، باید دو دستور bash در همان ظرف Docker از قبل باز داشته باشید. در غیر این صورت ، به مرحله عیب یابی Docker مراجعه کنید یا به سادگی تمرین شبکه شبیه سازی یک موضوع را دوباره انجام دهید.

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

در گره 1 ، روند CLI را تخم ریزی کنید:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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
Master 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 Leader تبدیل شده است:

> state
leader
Done

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

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

> commissioner start
Done

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

> commissioner joiner add * J01NME
Done

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

در پنجره ترمینال دوم ، در محفظه Docker ، روند جدید CLI را تخم ریزی کنید. این گره 2 است.

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

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

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

به عنوان وصال ، دستگاه (گره 2) با موفقیت در کمیساریا (گره 1) احراز هویت شده و مدارک شبکه موضوع را دریافت کرده است.

اکنون که Node 2 احراز هویت شد ، موضوع را شروع کنید:

> thread start
Done

4. تأیید اعتبار شبکه را تأیید کنید

state Node 2 را بررسی کنید تا تأیید کنید اکنون به شبکه پیوسته است. در عرض دو دقیقه ، گره 2 از child به router انتقال می یابد:

> state
child
Done
...
> state
router
Done

5. تنظیم مجدد تنظیمات

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

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

برای این تمرین ، ما می خواهیم یک نمونه CLI (یک دستگاه SoC Thread تعبیه شده) و یک نمونه Radio Co-Processor (RCP) را شبیه سازی کنیم.

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

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

داکر

برای هر Node (پنجره ترمینال) در این تمرین ، مطمئن شوید که ظرف Docker را با ساخت OpenThread اجرا می کنید. در صورت ادامه تمرین قبلی ، باید دو دستور bash در همان ظرف Docker از قبل باز داشته باشید. در غیر اینصورت ، به مرحله عیب یابی Docker مراجعه کنید.

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

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

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

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

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

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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
Master 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 اختصاص داده شده به رابط موضوع Node 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
>

همانطور که در مرحله شبیه سازی یک شبکه موضوع توضیح داده شده است ، یک آدرس link-local ( fe80 ) و سه آدرس local- fd ( fd ) است. EID یک آدرس محلی-مش است که در آدرس ff:fe00 . در این خروجی نمونه ، EID fd55:cf34:dea5:7994:460:872c:e807:c4ab .

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

2. ot-daemon را شروع کنید

در پنجره ترمینال دوم، ایجاد یک tun گره دستگاه و مجموعه ای مجوز خواندن / نوشتن:

root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200
root@c0f3912a74ff:/# chmod 600 /dev/net/tun

این دستگاه برای انتقال و دریافت بسته در دستگاه های مجازی استفاده می شود. اگر دستگاه قبلاً ایجاد شده باشد ، ممکن است خطایی داشته باشید - این طبیعی است و نمی توان آن را نادیده گرفت.

هدایت به openthread دایرکتوری، و شروع به ot-daemon برای یک گره RCP، که ما پاسخ گره 2. استفاده از -v طولانی پرچم، بنابراین شما می توانید خروجی ورود و تأیید می کند که آن را در حال اجرا است را مشاهده کنید:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-daemon -v \
    'spinel+hdlc+forkpty://output/simulation/bin/ot-rcp?forkpty-arg=2'

در صورت موفقیت ، ot-daemon در حالت پر سر و صدا تولید خروجی مشابه موارد زیر را ایجاد می کند:

ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun 7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun 7 2020 18:06:08

3- برای پیوستن به شبکه از ot-ctl استفاده کنید

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

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

$ docker exec -it codelab_otsim_ctnr bash

پس از ورود به ظرف ، ot-ctl شروع کنید:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-ctl
>

state گره 2 (گره RCP) را که با ot-daemon :

> state
disabled
Done

برای محدود کردن پیوستن به Joiner خاص ، eui64 Node 2 را eui64 :

> 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) انجام داده و اعتبارات شبکه موضوع را دریافت کرده است.

اکنون گره 2 را به شبکه Thread بپیوندید:

> thread start
Done

4. تأیید اعتبار شبکه را تأیید کنید

state Node 2 را بررسی کنید تا تأیید کنید اکنون به شبکه پیوسته است. در عرض دو دقیقه ، گره 2 از child به router انتقال می یابد:

> state
child
Done
...
> state
router
Done

5. اتصال را تأیید کنید

با استفاده از Ctrl + D و در خط فرمان ماشین میزبان خود ، با استفاده از EID آن با دستور ping6 ot-ctl ترک کنید و در خط فرمان ماشین میزبان خود قرار دهید. اگر نمونه RCP ot-daemon با موفقیت به شبکه Thread بپیوندد و با آن ارتباط برقرار کند ، پینگ موفق می شود:

root@c0f3912a74ff:/# 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

اگر از ظرف داکر خارج شده اید

دستورات bash ، ممکن است لازم باشد که بررسی کنید آیا در حال اجرا است یا نه و در صورت لزوم دوباره راه اندازی / دوباره وارد شوید.

برای نشان دادن اینکه کدام ظروف Docker در حال اجرا هستند:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        codelab_otsim       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

برای نشان دادن همه ظروف Docker (هم در حال اجرا و هم در حالت توقف)

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        codelab_otsim       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

اگر ظرف codelab_otsim_ctnr در خروجی دستور codelab_otsim_ctnr docker ps نمی بینید ، دوباره آن را اجرا کنید:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

اگر ظرف متوقف شد (در docker ps -a ذکر شده docker ps -a اما docker ps ) ، آن را دوباره راه اندازی کنید:

$ docker start -i codelab_otsim_ctnr

اگر ظرف داکر از قبل در حال اجرا است (در docker ps ذکر شده است) ، دوباره به ظرف موجود در هر ترمینال متصل شوید:

$ docker exec -it codelab_otsim_ctnr bash

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

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

  • ظرف OpenThread Simulation Docker را شروع و مدیریت کنید
  • شبکه Thread را شبیه سازی کنید
  • تأیید اعتبار گره های موضوع
  • با OpenThread Daemon شبکه Thread را مدیریت کنید

برای کسب اطلاعات بیشتر در مورد Thread و OpenThread ، این منابع را کاوش کنید:

یا ، سعی کنید از OpenThread Border Router در یک ظرف Docker استفاده کنید!