1. مقدمة
ما هي 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.
المتطلبات
- Linux x86_64 أو Mac OS.
- Git.
- الانتقال إلى الإصدار 1.13 أو الإصدارات الأحدث
- متصفح الويب. يستخدم OTNS-Web متصفح ويب لعرض عمليات المحاكاة.
- Thread Primer ستحتاج إلى معرفة المفاهيم الأساسية لسلسلة المحادثات كي تفهم ما سيتم تدريسه في هذا الدرس التطبيقي حول الترميز.
2. تثبيت
تثبيت Go
تتطلب خدمة OTNS إنشاء الإصدار 1.13 أو الإصدارات الأحدث.
- تثبيت تطبيق Go من https://golang.org/dl/
- إضافة
$(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
بشكل صحيح.
- شغِّل
which otns
للتحقّق مما إذا كان ملفotns
التنفيذي قابلاً للبحث في$PATH.
. - في حال عدم العثور على الأمر
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
):
إذا ظهرت لك صفحة فارغة فقط لبروتوكول 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
:
6- إضافة عُقد
إضافة عُقد من خلال OTNS-CLI
إضافة جهاز توجيه في الموضع (300، 100)
> add router x 300 y 100 1 Done
من المفترض أن تظهر لك عقدة تم إنشاؤها في OTNS-Web
. تبدأ العقدة كجهاز توجيه وتصبح قائدًا خلال بضع ثوانٍ:
إضافة المزيد من العُقد من خلال 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
:
إضافة عُقد بواسطة OTNS-Web
يمكنك أيضًا إضافة عُقد من خلال OTNS-Web
. انقر على الزر New Router
في Action Bar
. من المفترض أن تظهر لك عقدة يتم إنشاؤها أعلى الزر "New Router
" مباشرةً. اسحب العقدة لتكون بالقرب من القائد الذي أنشأته من خلال OTNS-CLI
. ومن المفترض أن يتم دمج جميع العُقد في نهاية المطاف في قسم واحد:
انقر أيضًا على أزرار FED وMED وSED في شريط الإجراءات لإنشاء أنواع أخرى من العُقد. اسحبها إلى مواضع بالقرب من العُقد الحالية لإرفاقها بشبكة Thread هذه:
لقد أنشأت الآن شبكة 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
أزرار التحكّم في السرعة
يمكنك العثور على أزرار التحكّم في السرعة على "Action Bar
". تعرض الأزرار سرعة المحاكاة الحالية ويمكن استخدامها لضبط سرعة المحاكاة وإيقاف المحاكاة مؤقتًا واستئنافها.
تسريع المحاكاة
يمكنك تسريع المحاكاة من خلال النقر على الزر إلى أن تصل السرعة إلى MAX
: .
محاكاة الإبطاء
يمكنك إبطاء المحاكاة من خلال النقر على الزر .
إيقاف المحاكاة
انقر على زر لإيقاف المحاكاة مؤقتًا عندما تكون قيد التشغيل. سيتغيّر الزر ليصبح .
استئناف المحاكاة
انقر على الزر لاستئناف المحاكاة عند إيقافها مؤقتًا. سيعود الزر إلى .
ضبط سرعة المحاكاة على 10X
لتوفير الوقت، استخدم
OTNS-CLI
لضبط سرعة المحاكي على
10X
حتى نتمكّن من ملاحظة التغييرات في المخطط في الشبكة بشكلٍ أسرع.
> speed 10 Done
8. تشغيل/إيقاف الراديو
والآن، يجب أن تتضمن المحاكاة جهازين توجيه (شكل سداسي) والعديد من الأطفال، وتعمل بسرعة 10X.
ابحث عن القائد الحالي (الحد الأحمر) لجهازَي التوجيه، بنقرة واحدة لاختياره:
إيقاف اللاسلكي
انقر على الزر في شريط الإجراءات لإيقاف الراديو من عقدة القائد:
لن يتمكن القائد من إرسال رسائل أو تلقّيها عندما يكون الراديو متوقفًا.
انتظر لمدة 12 ثانية تقريبًا (120 ثانية في وقت المحاكاة) حتى يصبح جهاز التوجيه الآخر القائد الجديد:
تتعافى شبكة Thread تلقائيًا من تعذُّر استخدام "القائد" من خلال إنشاء قسم جديد باستخدام قائد جديد. وسيظهر أيضًا لون قسم جديد في القسم الجديد.
تشغيل اللاسلكي
اختَر القائد الذي تم إيقاف الراديو له. انقر على الزر في Action Bar
لاستعادة الاتصال اللاسلكي:
على القائد إعادة الاتصال بالشبكة بعد استعادة الاتصال اللاسلكي.
9. نقل العُقد
تتيح OTNS للمستخدمين نقل العُقد بسهولة من خلال OTNS-CLI
أو OTNS-Web
.
نقل العقدة خلال OTNS-CLI
نقل العقدة 5 إلى موقع جديد:
> move 5 600 300 Done
بما أنّ العقدة 5 بعيدة الآن عن جهاز التوجيه الآخر، من المفترض أن تفقد إمكانية الاتصال ببعضها بعضًا، وبعد حوالي 12 ثانية (120 ثانية في محاكاة الوقت)، يصبح كل منهما قائدًا للقسم الخاص به:
نقل العُقدة من خلال OTNS-Web
انقل العقدة 5 مرة أخرى إلى الموقع الأصلي عن طريق السحب. ويجب دمج القسمَين مجددًا في قسم واحد:
10. حذف العُقد
حذف العُقد من خلال OTNS-CLI
حذف العقدة 8:
> del 8 Done
يجب أن تختفي العقدة 8 من المحاكاة:
حذف العُقد من خلال OTNS-Web
حدد العقدة 5 وانقر على الزر في Action Bar
لحذف العقدة 5:
يجب أن يصبح Node 1
قائدًا ويجب فصل Node 7
بسبب عدم إمكانية الوصول إلى أي جهاز توجيه.
محو المحاكاة (حذف جميع العُقد)
يمكنك محو المحاكاة من خلال حذف جميع العُقد من خلال OTNS-Web
.
انقر على الزر في 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.
ما هي الخطوات التالية؟
اطّلع على بعض هذه الدروس التطبيقية حول الترميز...
- محاكاة شبكة Thread باستخدام OpenThread
- محاكاة شبكة Thread باستخدام OpenThread في Docker
- إنشاء شبكة Thread باستخدام لوحات nRF52840 وOpenThread