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

1- المقدمة

5abd22afa2f2ee9a.png

ما المقصود بسلسلة المحادثات وOTNS

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

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

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

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

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

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

المتطلبات

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

تثبيت المهام التابعة

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

قد يُطلب منك إدخال كلمة مرور لـ sudo.

تثبيت خدمات البث المباشر

تثبيت 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. إنشاء سلسلة محادثات مفتوحة من أجل OOTNS

الحصول على رمز OpenThread من GitHub

$ mkdir -p ~/src
$ git clone https://github.com/openthread/openthread ~/src/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 بنجاح، ستدخل وحدة تحكّم واجهة سطر الأوامر (OTNS-CLI) وتشغّل متصفّح ويب للتمثيل البصري للشبكة وإدارتها (OTNS-Web):

a0e05178d66929b1.png

إذا ظهرت لك صفحة فارغة فقط لبروتوكول OTNS-Web، يعني ذلك أنّه يتعذَّر تفعيل WebGL في المتصفِّح. يُرجى الرجوع إلىhttps://superuser.com/a/836833 لمعرفة كيفية تفعيل WebGL.

في الأقسام التالية، ستتعرّف على كيفية إدارة عمليات محاكاة 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. يمكنك الرجوع إلى مرجع COTNS للاطّلاع على قائمة كاملة بالأوامر. لا داعي للقلق، ستستخدم فقط بعض هذه الأوامر في هذا الدرس التطبيقي حول الترميز.

شبكة OTNS-Web

OTNS-Web هو أداة للتمثيل البصري للشبكة وإدارتها من خلال OTNS. ويوفّر هذا التقرير تمثيلاً مرئيًا للعُقد والرسائل والروابط لشبكة محاكاة سلسلة المحادثات. يُرجى ملاحظة عناصر 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 في شريط الإجراءات لإنشاء أنواع أخرى من العُقد. اسحبها إلى مواضع بالقرب من العُقد الحالية لإضافتها إلى شبكة سلسلة المحادثات هذه:

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- تشغيل/إيقاف الراديو

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

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

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>

تم تغيير إشعار CLI إلى node 1>، ما يشير إلى سياق العُقدة الحالي. يمكنك إدخال أوامر OpenLI 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.

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

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

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