شبکه های Thread را با استفاده از OTNS شبیه سازی کنید

1. معرفی

5abd22afa2f2ee9a.png

Thread & OTNS چیست

Thread یک پروتکل شبکه بی سیم کم مصرف مبتنی بر IP است که ارتباطات دستگاه به دستگاه و دستگاه به ابر را ایمن می کند. شبکه های نخ می توانند با تغییرات توپولوژی سازگار شوند تا از یک نقطه شکست جلوگیری کنند.

OpenThread منتشر شده توسط گوگل یک پیاده سازی منبع باز Thread است. OpenThread علیرغم اندازه کد کوچک و ردپای حافظه اش، از تمام ویژگی های تعریف شده در Thread Specification پشتیبانی می کند.

از OpenThread Network Simulator (OTNS) می توان برای شبیه سازی شبکه های Thread با اجرای گره های OpenThread شبیه سازی شده بر روی پلتفرم های posix استفاده کرد. OTNS یک رابط وب با کاربری آسان (OTNS-Web) برای تجسم و عملکرد شبکه های Thread شبیه سازی شده فراهم می کند.

چیزی که یاد خواهید گرفت

  • OTNS و وابستگی های آن را نصب کنید
  • OpenThread را برای OTNS بسازید
  • نحوه افزودن/انتقال/حذف گره ها در OTNS-Web
  • از دیگر ویژگی های مفید OTNS-Web برای اجرای شبیه سازی شبکه استفاده کنید
  • عدم وجود یک نقطه شکست OpenThread را تأیید کنید

این کد لبه روی OTNS-CLI و OTNS-Web متمرکز شده است. سایر ویژگی‌های OTNS، مانند برنامه‌نویسی پایتون، پوشش داده نمی‌شوند.

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

  • Linux x86_64 یا Mac OS.
  • گیت .
  • برو 1.13+ .
  • مرورگر اینترنت. OTNS-Web از یک مرورگر وب برای نمایش شبیه سازی ها استفاده می کند.
  • پرایمر نخ . برای درک آنچه در این Codelab آموزش داده می شود، باید مفاهیم اولیه Thread را بدانید.

2. نصب و راه اندازی

Go را نصب کنید

OTNS برای ساخت به Go 1.13+ نیاز دارد.

  1. Go را از https://golang.org/dl/ نصب کنید
  2. $(go env GOPATH)/bin (معمولا $HOME/go/bin ) را به $PATH اضافه کنید:
$ export PATH=$PATH:$(go env GOPATH)/bin

کد OTNS را دریافت کنید

$ git clone https://github.com/openthread/ot-ns.git ./otns
$ cd otns

Dependencies را نصب کنید

$ ./script/install-deps
grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy

ممکن است از شما خواسته شود که یک رمز عبور برای sudo وارد کنید.

otns را نصب کنید

otns در $GOPATH/bin نصب کنید:

$ ./script/install
otns installed: /usr/local/google/home/simonlin/go/bin/otns

بیایید بررسی کنیم که آیا otns به درستی نصب شده است یا خیر

  1. which otns اجرا کنید تا بررسی کنید که آیا فایل اجرایی otns در $PATH.
  2. اگر دستور otns پیدا نشد، بررسی کنید که $(go env GOPATH)/bin به $PATH.

3. OpenThread را برای OTNS بسازید

کد OpenThread را از GitHub دریافت کنید

$ mkdir -p ~/src
$ git clone https://github.com/openthread/openthread ~/src/openthread

OpenThread را با OTNS=1 بسازید

$ cd ~/src/openthread
$ ./script/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999

می توانید فایل های اجرایی OpenThread را در دایرکتوری build پیدا کنید:

$ ls ~/src/openthread/build/simulation/examples/apps/cli/
ot-cli-ftd        ot-cli-mtd        ot-cli-radio

اکنون زمان اجرای OTNS است...

4. OTNS را اجرا کنید

otns را اجرا کنید:

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

هنگامی که با موفقیت شروع شد، OTNS وارد یک کنسول CLI ( OTNS-CLI ) می شود و یک مرورگر وب را برای تجسم و مدیریت شبکه راه اندازی می کند ( OTNS-Web ):

a0e05178d66929b1.png

اگر فقط می توانید یک صفحه خالی برای OTNS-Web ببینید، به احتمال زیاد WebGL در مرورگر شما فعال نیست. لطفاً در مورد نحوه فعال کردن WebGL به https://superuser.com/a/836833 مراجعه کنید.

در بخش‌های بعدی، مدیریت شبیه‌سازی‌های OTNS را از طریق OTNS-CLI و OTNS-Web یاد خواهید گرفت.

5. OTNS-CLI و OTNS-Web را بشناسید

OTNS-CLI

OTNS-CLI یک رابط خط فرمان (CLI) برای مدیریت شبیه سازی های OTNS فراهم می کند.

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

می توانید دستورات را از طریق OTNS-CLI تایپ کنید. برای لیست کامل دستورات به مرجع OTNS CLI مراجعه کنید. نگران نباشید، شما فقط از تعدادی از این دستورات در این Codelab استفاده می کنید.

OTNS-Web

OTNS-Web ابزار تجسم و مدیریت شبکه OTNS است. این یک نمایش بصری از گره ها، پیام ها و پیوندهای شبکه Thread شبیه سازی شده را ارائه می دهد. به عناصر مختلف OTNS-Web توجه کنید:

4c5b43509a2ca0d0.png

6. گره ها را اضافه کنید

اضافه کردن گره ها از طریق OTNS-CLI

اضافه کردن یک روتر در موقعیت (300، 100)

> add router x 300 y 100
1
Done

شما باید یک گره ایجاد شده در OTNS-Web را ببینید. گره به عنوان یک روتر شروع می شود و در چند ثانیه به یک رهبر تبدیل می شود:

6ca8c2e63ed9818d.png

گره های بیشتری را از طریق OTNS-CLI اضافه کنید

> add fed x 200 y 100
2
Done
> add med x 400 y 100
3
Done
> add sed x 300 y 200
4
Done

چند ثانیه صبر کنید تا گره ها در یک پارتیشن ادغام شوند. شما باید گره ها را در OTNS-WEB ببینید:

3ee67903c01aa612.png

اضافه کردن گره توسط OTNS-Web

شما همچنین می توانید گره ها را از طریق OTNS-Web اضافه کنید. روی دکمه New Router در Action Bar کلیک کنید. باید ببینید که یک گره درست بالای دکمه New Router ایجاد می شود. گره را بکشید تا نزدیک Leader باشد که از طریق OTNS-CLI ایجاد کرده‌اید. تمام گره ها باید در نهایت در یک پارتیشن ادغام شوند:

420258bb92561146.png

همچنین روی دکمه های FED، MED و SED در Action Bar کلیک کنید تا انواع دیگر گره ها ایجاد شود. آنها را به موقعیت های نزدیک گره های موجود بکشید تا به آن شبکه Thread متصل شوند:

fe15d6f9726a099e.png

اکنون یک شبکه Thread از یک پارتیشن ایجاد کرده اید که شامل گره های زیادی است. در قسمت بعدی قصد داریم سرعت شبیه سازی را تنظیم کنیم تا شبیه سازی سریعتر اجرا شود.

7. تنظیم سرعت

در حال حاضر، شبیه سازی باید با سرعت 1X اجرا شود، به این معنی که زمان شبیه سازی سپری شده تا کنون با زمان واقعی از زمان ایجاد اولین گره یکسان است.

سرعت را از طریق OTNS-CLI تنظیم کنید

می توانید سرعت شبیه سازی را از طریق OTNS-CLI تنظیم کنید.

سرعت شبیه سازی را روی 100X تنظیم کنید

> speed 100
Done

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

سرعت شبیه سازی را روی MAX تنظیم کنید

> speed max
Done

اکنون، OTNS سعی می‌کند بهترین کار را برای شبیه‌سازی با حداکثر سرعت ممکن انجام دهد، بنابراین باید گره‌هایی را ببینید که تعداد زیادی پیام ارسال می‌کنند.

شبیه سازی مکث

> speed 0
Done

با تنظیم سرعت شبیه سازی روی 0 ، شبیه سازی متوقف می شود.

بازیابی شبیه سازی با سرعت عادی

> speed 1
Done

تنظیم سرعت شبیه سازی روی مقداری بزرگتر از 0 ، شبیه سازی را از سر می گیرد.

تنظیم سرعت از طریق OTNS-Web

دکمه های کنترل سرعت

دکمه های کنترل سرعت را پیدا کنید 9329157c1bd12672.png در Action Bar دکمه‌ها سرعت شبیه‌سازی فعلی را نشان می‌دهند و می‌توانند برای تنظیم سرعت شبیه‌سازی و توقف/ازسرگیری شبیه‌سازی استفاده شوند.

افزایش سرعت شبیه سازی

شما می توانید با کلیک بر روی شبیه سازی سرعت عمل را افزایش دهید 39b88331779277ad.png را فشار دهید تا سرعت به MAX برسد: f5f460b2586d299b.png .

کاهش سرعت شبیه سازی

شما می توانید با کلیک کردن بر روی آن سرعت شبیه سازی را کاهش دهید 31cca8d5b52fa900.png دکمه.

شبیه سازی مکث

کلیک کنید بر روی 46cc2088c9aa7ab6.png دکمه توقف شبیه سازی در هنگام اجرا. دکمه به تغییر خواهد کرد ce25eda3496ffcd4.png .

از سرگیری شبیه سازی

کلیک کنید بر روی ce25eda3496ffcd4.png دکمه برای از سرگیری شبیه سازی در صورت توقف. دکمه به تغییر خواهد کرد 46cc2088c9aa7ab6.png .

سرعت شبیه سازی را روی 10X تنظیم کنید

به منظور صرفه جویی در زمان، استفاده کنید

OTNS-CLI برای تنظیم سرعت شبیه سازی

10X تا بتوانیم تغییرات توپولوژی را در شبکه بسیار سریعتر مشاهده کنیم.

> speed 10
Done

8. رادیو را روشن/خاموش کنید

در حال حاضر، شبیه سازی باید شامل 2 روتر (شکل شش ضلعی) و تعداد زیادی کودک باشد و با سرعت 10X اجرا شود.

لیدر فعلی (حاشیه قرمز) 2 روتر را پیدا کنید، برای انتخاب آن تنها کلیک کنید:

8c6a2e191cdae0c7.png

رادیو را خاموش کنید

کلیک کنید بر روی 7ca085f470491dd4.png دکمه روی Action Bar برای خاموش کردن رادیو گره Leader:

a3bf58d9d125f95f.png

رهبر نمی تواند با رادیو خاموش پیام ارسال یا دریافت کند.

حدود 12 ثانیه (120 ثانیه در زمان شبیه سازی) صبر کنید تا روتر دیگر رهبر جدید شود:

e3d32f85c4a1b990.png

شبکه Thread با ایجاد یک پارتیشن جدید با یک Leader به طور خودکار از شکست Leader بازیابی می شود. پارتیشن جدید یک رنگ پارتیشن جدید نیز دارد.

رادیو را روشن کنید

لیدری که رادیو آن خاموش است را انتخاب کنید. کلیک کنید بر روی 2d9cecb8612b42aa.png دکمه روی Action Bar برای بازیابی اتصال رادیویی:

7370a7841861aa3a.png

رهبر باید پس از بازیابی اتصال رادیویی دوباره به شبکه متصل شود.

9. گره ها را جابجا کنید

OTNS کاربران را قادر می سازد تا گره ها را به راحتی از طریق OTNS-CLI یا OTNS-Web جابجا کنند.

گره را از طریق OTNS-CLI منتقل کنید

گره 5 را به مکان جدید منتقل کنید:

> move 5 600 300
Done

از آنجایی که اکنون گره 5 از روتر دیگر دور است، باید اتصال خود را به یکدیگر از دست بدهند و پس از حدود 12 ثانیه (120 ثانیه در زمان شبیه سازی) هر دو رهبر پارتیشن خود می شوند:

c06b4d0a4f183299.png

گره را از طریق OTNS-Web منتقل کنید

گره 5 را با کشیدن به محل اصلی برگردانید. دو پارتیشن باید دوباره در یک پارتیشن ادغام شوند:

9ba305c4c5a5f892.png

10. گره ها را حذف کنید

حذف گره ها از طریق OTNS-CLI

حذف گره 8:

> del 8
Done

گره 8 باید از شبیه سازی ناپدید شود:

18156770d9f8bf83.png

حذف گره ها از طریق OTNS-Web

گره 5 را انتخاب کرده و روی آن کلیک کنید 7ff6afd565f4eafc.png دکمه روی Action Bar برای حذف گره 5:

d4079cceea0105f0.png

Node 1 باید به لیدر تبدیل شود و Node 7 باید جدا شود زیرا نمی تواند به هیچ روتری دسترسی پیدا کند.

پاک کردن شبیه سازی (حذف تمام گره ها)

شما می توانید شبیه سازی را با حذف تمام گره ها از طریق OTNS-Web پاک کنید.

کلیک 89618191721e79a0.png دکمه روی Action Bar. همه گره ها به یکباره ناپدید می شوند.

قبل از ادامه...

تعدادی گره را خودتان به شبیه سازی اضافه کنید تا بتوانید در این آموزش ادامه دهید.

11. زمینه گره OTNS-CLI

OTNS-CLI حالت زمینه گره را برای تعامل آسان با گره ها فراهم می کند تا به توسعه دهندگان کمک کند تا وضعیت یک گره را تشخیص دهند.

حالت بافت گره را وارد کنید

زمینه گره گره 1 را وارد کنید:

> node 1
Done
node 1>

اعلان CLI به node 1> تغییر کرد که زمینه گره فعلی را نشان می دهد. می‌توانید دستورات OpenThread CLI را تایپ کنید تا روی گره اجرا شوند، انگار که مستقیماً با گره در تعامل هستید.

دستورات را در زمینه گره اجرا کنید

node 1> state
leader
Done
node 1> channel
11
Done
node 1> panid
0xface
Done
node 1> networkname
OpenThread
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:d800
fdde:ad00:beef:0:2175:8a67:1000:6352
fe80:0:0:0:2075:82c2:e9e9:781d
Done

به زمینه گره دیگری بروید

node 1> node 2
Done
node 2> 

خروج از بافت گره

node 1> exit
Done
>

12. تبریک می گویم

تبریک می‌گوییم، شما اولین شبیه‌سازی OTNS خود را با موفقیت اجرا کردید!

شما یاد گرفته اید که چگونه OTNS و وابستگی های آن را نصب کنید. شما OpenThread را برای OTNS ساختید و شبیه سازی OTNS را با نمونه های شبیه سازی OpenThread شروع کردید. شما یاد گرفته اید که چگونه شبیه سازی را به روش های مختلف از طریق OTNS-CLI و OTNS-Web دستکاری کنید.

اکنون می دانید OTNS چیست و چگونه می توانید از OTNS برای شبیه سازی شبکه های OpenThread استفاده کنید.

بعدش چی؟

برخی از این کدها را بررسی کنید...

اسناد مرجع