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

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

26b7f4f6b3ea0700.png

OpenThread منتشر شده توسط Google یک اجرای منبع باز از پروتکل شبکه 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 نیاز است. قبل از ادامه آن را بارگیری و نصب کنید.

Git را بارگیری کنید

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

XCode برای Mac OS X

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

XCode را بارگیری کنید

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

$ xcode-select --install

بر روی Linux / Mac OS X بسازید

این دستورالعمل های نصب روی اوبونتو سرور 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
$ ./bootstrap

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

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

شبیه سازی OpenThread در داکر

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

$ cd ~/src/openthread
$ make -f examples/Makefile-simulation

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

$ cd ~/src/openthread
$ make -f src/posix/Makefile-posix DAEMON=1

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

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

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

6e3aa07675f902dc.png

گره زدن

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

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

$ cd ~/src/openthread
$ ./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 را شروع کنید

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

$ cd ~/src/openthread
$ ./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 | 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 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 را مجدداً تنظیم کنید بازنشانی به کارخانه انجام می شود تا اطمینان حاصل شود که اعتبار شبکه Thread که در این تمرین استفاده کردیم به تمرین بعدی منتقل نمی شود.

> thread stop
Done
> factoryreset
>
> exit

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

> factoryreset
>
> exit

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

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

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

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

d6a67e8a0d0b5dcb.png

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

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

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

$ cd ~/src/openthread
$ ./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 را شروع کنید

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

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 2

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

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

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

اکنون که 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

ممکن است مجبور 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 متصل می کنیم.

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

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

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

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

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

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

$ cd ~/src/openthread
$ ./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 اختصاص داده شده به رابط موضوع گره 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 را شروع کنید

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

$ cd ~/src/openthread
$ ./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 شبیه سازی شده کنترل کنید.

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

$ ./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 بپیوندد و با آن ارتباط برقرار کند ، پینگ موفق می شود:

$ 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

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

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

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

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