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

درباره این codelab
schedule۳۰ دقیقه
subjectآخرین به‌روزرسانی: ۲۵ اردیبهشت ۱۴۰۴
account_circleنویسنده: Simon Lin, Colin Tan, Esko Dijk

1. مقدمه

برداشت یک توپولوژی شبکه Thread mesh

Thread & OTNS چیست

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

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

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

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

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

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

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

  • ترجیحاً Linux x86_64 یا Mac OS با Homebrew . اوبونتو 22/24 در ویندوز WSL2 نیز باید کار کند، اما ممکن است نیاز به تغییرات دستی تنظیمات داشته باشد.
  • گیت .
  • مرورگر وب. OTNS-Web از یک مرورگر وب برای نمایش شبیه سازی ها استفاده می کند.
  • پرایمر نخ . برای درک آنچه در این Codelab آموزش داده می شود، باید مفاهیم اولیه Thread را بدانید.

اصطلاحات

اصطلاح Router به عنوان اصطلاح فنی برای Thread Mesh Extender استفاده می شود که در ابتدا Thread Router نامیده می شد. "Node" به هر دستگاه OpenThread شبیه سازی شده در یک شبیه سازی OTNS اشاره دارد.

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

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

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

تمام دستورات بعدی کنسول در این Codelab از دایرکتوری otns اجرا می شوند.

بوت استرپ کنید و نصب کنید

اسکریپت bootstrap وابستگی ها (از جمله Python3 و Go/Golang، در صورت نیاز) را نصب می کند و OTNS را نصب می کند. همچنین انواع مختلفی از گره های OT را ایجاد می کند که می توانند مستقیماً در یک شبیه سازی استفاده شوند و برخی از آزمایشات اساسی را انجام می دهد. با توجه به ساخت گره، ممکن است چند دقیقه طول بکشد.

$ ./script/bootstrap
....
....
OTNS installed - use 'otns' to start it.
$

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

اگر otns به درستی نصب نشده باشد

اسکریپت ممکن است خطایی مانند:

....
OTNS installed - please add ~/go/bin to your PATH variable first, to use it.
$

در این مورد، باید $(go env GOPATH)/bin به $PATH.

در صورت بروز خطاهای دیگر، مشکل GitHub می تواند ایجاد شود.

3. OTNS را برای اولین بار اجرا کنید

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

$ otns
>_ ← OTNS-CLI prompt

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

پنجره OTNS-Web در شروع

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

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

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

OTNS-CLI

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

$ otns
>_ ← OTNS-CLI prompt

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

دستور help را برای یک نمای کلی از دستورات CLI تایپ کنید. این لیست با مرجع CLI یکسان است.

> help
add             Add a node to the simulation and get the node ID.
....
....
Done
> 

برای دریافت راهنمایی بیشتر در مورد یک دستور خاص، از نام دستور استفاده کنید، به عنوان مثال:

> help add
add
  Add a node to the simulation and get the node ID.
  
Definition:
....
....
> 

OTNS-Web

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

عناصر OTNS-Web توضیح داده شد

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

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

یک Thread Router به شبیه سازی اضافه کنید:

> add router
1
Done

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

یک گره در نقش رهبر

برای آسان کردن شروع شبیه سازی به صورت تعاملی، هر گره OpenThread جدید به طور پیش فرض با مجموعه ای استاندارد از پارامترهای شبکه راه اندازی می شود.

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

اکنون تعدادی گره از انواع مختلف را اضافه می کنیم.

> add fed
2
Done
> add med
3
Done
> add sed
4
Done

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

شبکه موضوعی با 4 گره

همچنین در OTNS-Web ، این امکان وجود دارد که هر یک از گره ها را انتخاب کنید تا پانلی با اطلاعات بیشتر در مورد گره دریافت کنید. برای مثال در شکل زیر گره 1 انتخاب شده است. ورودی "نقش" در پانل تأیید می کند که یک رهبر است.

شبکه موضوعی با 4 گره، گره 1 انتخاب شده است

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

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

یک روتر اضافه شده است، در مجموع 5 گره

همچنین روی دکمه‌های FED، MED، SSED و BR در Action Bar کلیک کنید تا این انواع دیگر گره‌ها را ایجاد کنید. اکنون در مجموع باید 9 گره وجود داشته باشد. اگر می خواهید، تعدادی گره را به موقعیت های دیگر بکشید تا توپولوژی شبکه فیزیکی متفاوتی ایجاد کنید.

چندین گره جدید اضافه شد، در مجموع 9 گره

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

6. تنظیم سرعت

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

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

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

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

> speed 100
Done

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

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

> speed max
Done

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

شبیه سازی مکث

> speed 0
Done

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

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

> speed 1
Done

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

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

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

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

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

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

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

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

شبیه سازی مکث

را کلیک کنید دکمه مکث دکمه توقف شبیه سازی در هنگام اجرا. دکمه به تغییر خواهد کرد دکمه پخش .

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

را کلیک کنید دکمه پخش دکمه برای از سرگیری شبیه سازی در صورت توقف. دکمه به تغییر خواهد کرد دکمه مکث .

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

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

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

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

> speed 10
Done

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

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

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

شبکه موضوعی با گره لیدر 1 انتخاب شده است

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

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

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

پارتیشن جدید با گره 9 به عنوان Leader جدید تشکیل شده است

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

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

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

گره 1 پس از روشن شدن مجدد رادیو به پارتیشن می پیوندد

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

8. حرکت گره ها

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

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

نود 9 Border Router را به یک مکان جدید منتقل کنید:

> move 9 50 50
Done

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

با کشیدن گره 5 را تا انتها به سمت راست پایین ببرید. از آنجا که گره 5 اکنون از پوشش رادیویی سایر روترها خارج است، پارتیشن خود را با شناسه پارتیشن جدید تشکیل می دهد. شناسه های پارتیشن را می توان در پانل اطلاعات گره با کلیک روی گره ها بررسی کرد.

گره 5 از سایر گره ها دور شده و یک پارتیشن جدید تشکیل می دهد

توجه داشته باشید که هنوز یک خط سبز منفرد بین گره 5 و گره 9 کشیده می شود. این اغلب به دلیل اطلاعات قدیمی در مورد یک کودک است که هنوز در جدول فرزند یکی از والدین سابق نگهداری می شود. یا ممکن است اطلاعات قدیمی مربوط به پیوند روتر به روتر قبلی بین گره 9 و گره 5 باشد. (یا احتمالاً، در این مورد، حتی یک اشکال رندر.) در نهایت، اطلاعات قدیمی پس از مهلت زمانی مناسب روی گره ها پاک می شوند.

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

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

حذف گره 5:

> del 5
Done

گره 5 باید از شبیه سازی محو شود:

گره 5 از شبیه سازی حذف می شود

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

گره Border Router 9 را انتخاب کرده و روی آن کلیک کنید دکمه حذف دکمه روی Action Bar برای حذف گره 9:

نود 9 روتر مرزی حذف شده است

Node 1 باید Leader یک پارتیشن جدید شود و تمام گره های باقی مانده به عنوان Child به گره 1 متصل می شوند.

10. زمینه گره 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
otns
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:b400
fd00:f00d:cafe:0:2505:8719:3685:ebfb
fdde:ad00:beef:0:4fd9:b9ba:44e0:96cb
fe80:0:0:0:e86a:e07:ec97:777
Done

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

node 1> node 2
Done
node 2> 

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

node 1> exit
Done
>

یک راه جایگزین برای خروج از زمینه گره، دستور node 0 است.

11. مشاهده سیاهههای مربوط به گره و ضبط بسته

گزارش گره های OpenThread

به‌طور پیش‌فرض، OTNS فایل‌های گزارش دقیق را برای همه گره‌های OpenThread شبیه‌سازی شده تولید می‌کند. اینها را می توان در دایرکتوری ./tmp مشاهده کرد. نام فایل 0_ .log است 0_ .log . به عنوان مثال، گزیده ای از فایل log در زیر نشان داده شده است:

7616488 00:00:06.326 [I] MeshForwarder-: Received IPv6 UDP msg, len:90, chksum:5915, ecn:no, from:ca72650db7b856af, sec:no, prio:net, rss:-58.0
7616488 00:00:06.326 [I] MeshForwarder-:     src:[fe80:0:0:0:c872:650d:b7b8:56af]:19788
7616488 00:00:06.326 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
7616488 00:00:06.326 [D] Mle-----------: Receive MLE message
7616488 00:00:06.326 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7657544 00:00:06.367 [D] Mac-----------: ==============================[RX len=063]==============================
7657544 00:00:06.367 [D] Mac-----------: | 41 D8 7F CE FA FF FF 46 | 74 5A 33 9E 76 51 4E 7F | A......FtZ3.vQN. |
7657544 00:00:06.367 [D] Mac-----------: | 3B 02 F0 4D 4C 4D 4C 81 | E6 00 15 03 00 00 00 00 | ;..MLML......... |
7657544 00:00:06.367 [D] Mac-----------: | 00 00 00 01 46 86 7D FE | 06 CC DB 94 86 9C 88 0B | ....F.}......... |
7657544 00:00:06.367 [D] Mac-----------: | 1C 1E 26 9B 8D 21 2E 65 | 53 5A 43 4E A2 59 D6    | ..&..!.eSZCN.Y.  |
7657544 00:00:06.367 [D] Mac-----------: ------------------------------------------------------------------------
7657544 00:00:06.367 [I] MeshForwarder-: Received IPv6 UDP msg, len:84, chksum:81e6, ecn:no, from:4e51769e335a7446, sec:no, prio:net, rss:-48.0
7657544 00:00:06.367 [I] MeshForwarder-:     src:[fe80:0:0:0:4c51:769e:335a:7446]:19788
7657544 00:00:06.367 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
7657544 00:00:06.367 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7833912 00:00:06.543 [I] Mle-----------: AttachState ParentReq -> Idle
7833912 00:00:06.543 [N] RouterTable---: Allocate router id 12
7833912 00:00:06.543 [N] Mle-----------: RLOC16 fffe -> 3000
7833912 set node RLOC16: fffe -> 3000
7833912 00:00:06.543 [D] SubMac--------: RadioShortAddress: 0x3000
7833912 00:00:06.543 [N] Mle-----------: Role detached -> leader
7833912 00:00:06.543 [N] Mle-----------: Partition ID 0x24c35f10
7833912 00:00:06.543 [I] RouterTable---: Route table
7833912 00:00:06.543 [I] RouterTable---:     12 0x3000 - me - leader

زمان شبیه سازی مطلق بر حسب میکروثانیه در سمت چپ نشان داده شده است. مهر زمانی hh:mm:ss نشان‌دهنده زمان ثبت خود گره OpenThread است که ممکن است با زمان شبیه‌سازی مطلق متفاوت باشد.

ضبط بسته های Wireshark

به‌طور پیش‌فرض، تمام فریم‌های ارسالی IEEE 802.15.4 در فایل PCAP current.pcap ضبط می‌شوند. این فایل توسط Wireshark در حین یا بعد از شبیه سازی قابل خواندن است. با توجه به رمزگذاری لایه پیوند Thread، برای تنظیم صحیح کلید رمزگشایی برای OTNS، یک عمل پیکربندی یک بار در Wireshark لازم است. به طور پیش فرض، از یک کلید شبکه معروف استفاده می شود تا رمزگشایی فریم توسط Wireshark آسان شود.

برای نمونه ای از بازرسی بسته OpenThread در Wireshark به تصویر زیر مراجعه کنید.

تصویری از تحلیل بسته OpenThread در Wireshark

برای پیکربندی کلید رمزگشایی، در منوی Edit -> Preferences را انتخاب کنید. سپس در پنجره تنظیمات، Protocols -> IEEE 802.15.4 را انتخاب کنید. روی دکمه ویرایش... در کنار «کلیدهای رمزگشایی» کلیک کنید. برای ایجاد یک ورودی جدید روی + کلیک کنید و کلید 00112233445566778899aabbccddeeff (32 کاراکتر) را وارد کنید و در قسمت "Key hash" گزینه "Thread hash" را انتخاب کنید. "شاخص کلید رمزگشایی" را می توان روی 0 گذاشت. سپس بر روی OK کلیک کنید و دوباره OK کنید . اکنون فایل OTNS PCAP باید هنگام بارگذاری به درستی رمزگشایی شود.

مهرهای زمانی نشان داده شده در ستون "زمان" (بر حسب ثانیه) با مقادیر زمان شبیه سازی مطلق نشان داده شده در گزارش گره های OpenThread مطابقت دارد. این کار ارتباط پیام های گزارش را با فریم های رادیویی ارسال شده یا دریافتی آسان تر می کند. با این حال، مقادیر معمولاً با دقت یک میکروثانیه یکسان نیستند: سخت افزار رادیویی IEEE 802.15.4 شبیه سازی شده ممکن است پس از درخواست یک فریم رادیویی برای ارسال توسط پشته OpenThread، تأخیر بیشتری اضافه کند.

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

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

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

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

بعدش چی؟

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

اسناد مرجع