محاكاة شبكات Thread باستخدام OTNS

1. مقدمة

5abd22afa2f2ee9a.png

ما هي Thread & خدمات OTNS

Thread هو بروتوكول للشبكات اللاسلكية المتداخلة يستند إلى بروتوكول الإنترنت (IP) ويتيح إجراء الاتصالات الآمنة من جهاز إلى آخر ومن جهاز إلى آخر في السحابة الإلكترونية. يمكن أن تتكيّف شبكات سلاسل المحادثات مع التغييرات في الهيكلية لتجنّب حدوث نقطة عطل واحدة.

خدمة OpenThread التي طرحتها Google هي خدمة مفتوحة المصدر لسلسلة Thread. على الرغم من صغر حجم الرمز البرمجي وحجم الذاكرة، تتيح أداة OpenThread جميع الميزات المحدّدة في مواصفات سلسلة المحادثات.

يمكن استخدام OpenThread Network Simulator (OTNS) لمحاكاة شبكات Thread من خلال تشغيل عُقد OpenThread التي تمت محاكاتها على أنظمة أساسية posix. توفّر خدمة OTNS واجهة ويب (OTNS-Web) سهلة الاستخدام لعرض وتشغيل شبكات Thread التي تمت محاكاتها.

ما ستتعرَّف عليه

  • تثبيت خدمة OTNS وتبعياتها
  • إنشاء OpenThread لخدمات OTNS
  • كيفية إضافة/نقل/حذف العُقد في OTNS-Web
  • استخدِم ميزات OTNS-Web المفيدة الأخرى لتشغيل محاكاة الشبكة.
  • التحقق من نقطة إخفاق OpenThread

يركّز هذا الدرس التطبيقي حول الترميز على OTNS-CLI وOTNS-Web. ولا يشمل التقرير الميزات الأخرى في OTNS، مثل البرمجة النصية في Python.

المتطلبات

2. تثبيت

تثبيت Go

تتطلب خدمة OTNS إنشاء الإصدار 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

تثبيت التبعيات

$ ./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 غير مفعَّلة في المتصفّح. يُرجى الرجوع إلىhttps://superuser.com/a/836833 حول كيفية تفعيل WebGL.

في الأقسام التالية، ستتعرف على كيفية إدارة عمليات محاكاة OTNS من خلال OTNS-CLI وOTNS-Web.

5- التعرّف على OTNS-CLI و شبكة OTNS على الويب

OTNS-CLI

يوفّر OTNS-CLI واجهة سطر الأوامر (CLI) لإدارة عمليات محاكاة OTNS.

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

يمكنك كتابة الأوامر من خلال OTNS-CLI. يمكنك الرجوع إلى مرجع واجهة سطر الأوامر OTNS للحصول على قائمة كاملة بالأوامر. لا داعي للقلق، ستستخدم عددًا قليلاً من هذه الأوامر في هذا الدرس التطبيقي حول الترميز.

شبكة OTNS على الويب

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" مباشرةً. اسحب العقدة لتكون بالقرب من القائد الذي أنشأته من خلال OTNS-CLI. ومن المفترض أن يتم دمج جميع العُقد في نهاية المطاف في قسم واحد:

420258bb92561146.png

انقر أيضًا على أزرار FED وMED وSED في شريط الإجراءات لإنشاء أنواع أخرى من العُقد. اسحبها إلى مواضع بالقرب من العُقد الحالية لإرفاقها بشبكة 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. تشغيل/إيقاف الراديو

والآن، يجب أن تتضمن المحاكاة جهازين توجيه (شكل سداسي) والعديد من الأطفال، وتعمل بسرعة 10X.

ابحث عن القائد الحالي (الحد الأحمر) لجهازَي التوجيه، بنقرة واحدة لاختياره:

8c6a2e191cdae0c7.png

إيقاف اللاسلكي

انقر على الزر 7ca085f470491dd4.png في شريط الإجراءات لإيقاف الراديو من عقدة القائد:

a3bf58d9d125f95f.png

لن يتمكن القائد من إرسال رسائل أو تلقّيها عندما يكون الراديو متوقفًا.

انتظر لمدة 12 ثانية تقريبًا (120 ثانية في وقت المحاكاة) حتى يصبح جهاز التوجيه الآخر القائد الجديد:

e3d32f85c4a1b990.png

تتعافى شبكة Thread تلقائيًا من تعذُّر استخدام "القائد" من خلال إنشاء قسم جديد باستخدام قائد جديد. وسيظهر أيضًا لون قسم جديد في القسم الجديد.

تشغيل اللاسلكي

اختَر القائد الذي تم إيقاف الراديو له. انقر على الزر 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>

تم تغيير طلب واجهة سطر الأوامر إلى 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.

ما هي الخطوات التالية؟

اطّلع على بعض هذه الدروس التطبيقية حول الترميز...

المستندات المرجعية