OTNS का इस्तेमाल करके, Thread नेटवर्क को सिम्युलेट करें

1. परिचय

Thread मेश नेटवर्क टोपोलॉजी का इंप्रेशन

Thread और OTNS क्या है

Thread, आईपी पर आधारित कम पावर वाला वायरलेस मेश नेटवर्किंग प्रोटोकॉल है. यह डिवाइस-से-डिवाइस और डिवाइस-से-क्लाउड के बीच सुरक्षित तरीके से कम्यूनिकेशन करने की सुविधा देता है. थ्रेड नेटवर्क, टोपोलॉजी में होने वाले बदलावों के हिसाब से खुद को अडजस्ट कर सकते हैं, ताकि किसी एक पॉइंट पर गड़बड़ी होने से बचा जा सके.

Google ने OpenThread को रिलीज़ किया है. यह Thread का ओपन-सोर्स वर्शन है. OpenThread का कोड साइज़ और मेमोरी फ़ुटप्रिंट कम होने के बावजूद, यह Thread Specification में बताई गई सभी सुविधाओं के साथ काम करता है.

OpenThread Network Simulator (OTNS) का इस्तेमाल, Thread नेटवर्क को सिम्युलेट करने के लिए किया जा सकता है. इसके लिए, posix प्लैटफ़ॉर्म पर सिम्युलेट किए गए OpenThread नोड चलाए जाते हैं. OTNS, सिम्युलेट किए गए थ्रेड नेटवर्क को विज़ुअलाइज़ करने और उन्हें ऑपरेट करने के लिए, इस्तेमाल में आसान वेब इंटरफ़ेस (OTNS-Web) उपलब्ध कराता है. स्क्रिप्ट किए गए सिम्युलेशन (Python की मदद से) भी किए जा सकते हैं.

आपको क्या सीखने को मिलेगा

  • OTNS और इसकी डिपेंडेंसी इंस्टॉल करना
  • OTNS-CLI की बुनियादी बातों के बारे में जानें
  • OTNS-Web में OpenThread नोड जोड़ने/ले जाने/मिटाने का तरीका
  • नेटवर्क सिम्युलेशन को कंट्रोल करने के लिए, OTNS-Web की अन्य काम की सुविधाओं का इस्तेमाल करना
  • OpenThread के नो-सिंगल-पॉइंट-ऑफ़-फ़ेल्योर की पुष्टि करना
  • Wireshark में OpenThread नोड के बीच डेटा ट्रैफ़िक देखना

इस कोडलैब में, इंटरैक्टिव तरीके से इस्तेमाल करने के लिए OTNS-CLI और OTNS-Web पर फ़ोकस किया गया है. इसमें OTNS की अन्य सुविधाएं शामिल नहीं हैं, जैसे कि Python स्क्रिप्टिंग.

आपको किन चीज़ों की ज़रूरत होगी

  • थ्रेड प्राइमर. इस कोडलैब में बताई गई बातों को समझने के लिए, आपको Thread के बुनियादी सिद्धांतों के बारे में पता होना चाहिए.
  • Linux x86_64 या Mac OS के साथ Homebrew का इस्तेमाल करना बेहतर होता है. Windows WSL2 में Ubuntu 24 या इसके बाद के वर्शन पर भी यह काम करना चाहिए. हालांकि, इसके लिए आपको सेटिंग में कुछ बदलाव करने पड़ सकते हैं.
  • Git.
  • वेब ब्राउज़र. OTNS-Web, सिम्युलेशन दिखाने के लिए वेब ब्राउज़र का इस्तेमाल करता है.
  • Wireshark नेटवर्क प्रोटोकॉल ऐनालाइज़र (ज़रूरी नहीं).
  • Go का 1.23 या इसके बाद का वर्शन.
    • इंस्टॉलेशन स्क्रिप्ट, इंस्टॉल किए गए Go वर्शन की जाँच करेगी.
    • अगर Go इंस्टॉल नहीं है, तो यह पैकेज मैनेजर से उपलब्ध होने पर, >= 1.23 वर्शन इंस्टॉल करेगा.
    • अगर यह पैकेज मैनेजर से उपलब्ध नहीं है, तो इसे मैन्युअल तरीके से इंस्टॉल करना होगा.
    • ध्यान दें कि Ubuntu 24.04 या इससे पहले के वर्शन पर, Go 1.23 अपने-आप काम नहीं करता. ज़्यादा जानकारी के लिए, Ubuntu के दस्तावेज़ में Golang के उपलब्ध वर्शन पेज देखें. snap या अन्य तरीकों का इस्तेमाल करके, मैन्युअल तरीके से इंस्टॉल किया जा सकता है.
  • Python का 3.9 या इसके बाद वाला वर्शन.
    • इंस्टॉलेशन स्क्रिप्ट, इंस्टॉल किए गए Python वर्शन की जांच करेगी.
    • अगर Python 3 अब तक इंस्टॉल नहीं किया गया है, तो पैकेज मैनेजर से उपलब्ध होने पर, यह >= 3.9 वर्शन इंस्टॉल करेगा.
    • अगर यह पैकेज मैनेजर से उपलब्ध नहीं है, तो इसे मैन्युअल तरीके से इंस्टॉल करना होगा.

शब्दावली

"राउटर" शब्द का इस्तेमाल, Thread मेश एक्सटेंडर के लिए तकनीकी शब्द के तौर पर किया जाता है. इसे पहले Thread राउटर कहा जाता था. "नोड" का मतलब, OTNS सिम्युलेशन में किसी भी सिम्युलेटेड OpenThread डिवाइस से है.

2. इंस्टॉल करना

ओटीएनएस कोड पाना

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

इस कोडलैब में, कंसोल के सभी बाद के निर्देश otns डायरेक्ट्री से चलाए जाते हैं.

बूटस्ट्रैप और इंस्टॉल करना

bootstrap स्क्रिप्ट, ज़रूरी सॉफ़्टवेयर (ज़रूरत पड़ने पर Python 3 और Go/Golang भी शामिल है) इंस्टॉल करेगी. साथ ही, OTNS इंस्टॉल करेगी. ध्यान दें कि अगर स्क्रिप्ट, Python के वर्शन >= 3.9 या Go के वर्शन >= 1.23 जैसी कुछ डिपेंडेंसी अपने-आप इंस्टॉल नहीं कर पाती है, तो स्क्रिप्ट काम करना बंद कर सकती है. अपने-आप इंस्टॉल होने की सुविधा के लिए, यह ज़रूरी है कि पैकेज, ऑपरेटिंग सिस्टम की कॉन्फ़िगर की गई पैकेज रिपॉज़िटरी में मौजूद हों.

यह स्क्रिप्ट, अलग-अलग तरह के ओटी नोड भी बनाती है. इनका इस्तेमाल सीधे तौर पर सिम्युलेशन में किया जा सकता है. साथ ही, यह कुछ बुनियादी टेस्ट भी करती है. नोड बनाने की वजह से, इसमें कुछ मिनट लग सकते हैं.

$ ./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.
$

इस मामले में, आपको अपने $PATH वैरिएबल में $(go env GOPATH)/bin जोड़ना होगा.

अन्य गड़बड़ियों के मामले में, GitHub issue बनाई जा सकती है.

3. पहली बार OTNS चलाना

रन otns:

$ otns
>_ ← OTNS-CLI prompt

सफलतापूर्वक शुरू होने पर, OTNS एक सीएलआई कंसोल (OTNS-CLI) में चला जाएगा. साथ ही, नेटवर्क विज़ुअलाइज़ेशन और मैनेजमेंट (OTNS-Web) के लिए एक वेब ब्राउज़र लॉन्च करेगा:

OTNS-Web विंडो की शुरुआत

अगर आपको OTNS-Web के लिए सिर्फ़ एक खाली पेज दिखता है, तो हो सकता है कि आपके ब्राउज़र में WebGL चालू न हो. WebGL चालू करने का तरीका जानने के लिए, कृपया https://superuser.com/a/836833 पर जाएं.

यहां दिए गए सेक्शन में, आपको OTNS-CLI और OTNS-Web की मदद से, ओटीएनएस सिमुलेशन मैनेज करने के बारे में जानकारी मिलेगी.

4. OTNS-CLI और OTNS-Web के बारे में जानकारी

OTNS-CLI

OTNS-CLI, OTNS सिमुलेशन को मैनेज करने के लिए कमांड लाइन इंटरफ़ेस (सीएलआई) है.

$ otns
>_ ← OTNS-CLI prompt

OTNS-CLI के ज़रिए निर्देश टाइप किए जा सकते हैं. कमांड की पूरी सूची के लिए, OTNS सीएलआई का रेफ़रंस देखें. चिंता न करें, इस कोडलैब में आपको इनमें से कुछ ही कमांड इस्तेमाल करनी होंगी.

सीएलआई कमांड की खास जानकारी पाने के लिए, help कमांड टाइप करें. यह सूची, सीएलआई के रेफ़रंस के जैसी ही है.

> 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 का नेटवर्क विज़ुअलाइज़ेशन और मैनेजमेंट टूल है. यह सिम्युलेट किए गए थ्रेड नेटवर्क के नोड, मैसेज, और लिंक को विज़ुअल तौर पर दिखाता है. OTNS-Web के अलग-अलग एलिमेंट पर ध्यान दें:

OTNS-वेब एलिमेंट के बारे में जानकारी

5. नोड जोड़ना

OTNS-CLI की मदद से नोड जोड़ना

सिमुलेशन में, router नोड टाइप का इस्तेमाल करके एक मेश एक्सटेंडर जोड़ें:

> add router
1
Done

आपको OTNS-Web में बनाया गया नोड दिखेगा. नोड, मेश एक्सटेंडर के तौर पर शुरू होता है और कुछ ही सेकंड में लीडर बन जाता है:

लीडर की भूमिका में एक नोड

सिमुलेशन को इंटरैक्टिव तरीके से आसानी से शुरू करने के लिए, हर नए OpenThread नोड को डिफ़ॉल्ट रूप से नेटवर्क पैरामीटर के स्टैंडर्ड सेट के साथ कमीशन किया जाता है.

OTNS-CLI के ज़रिए ज़्यादा नोड जोड़ना

अब हम अलग-अलग तरह के कुछ नोड जोड़ेंगे.

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

नोड को एक पार्टीशन में मर्ज होने में कुछ सेकंड लगेंगे. आपको OTNS-Web में नोड दिखने चाहिए:

चार नोड वाला Thread नेटवर्क

इसके अलावा, OTNS-Web में किसी भी नोड को चुनकर, नोड के बारे में ज़्यादा जानकारी वाला पैनल पाया जा सकता है. उदाहरण के लिए, नीचे दिए गए फ़िगर में नोड 1 को चुना गया है. पैनल में मौजूद "भूमिका" एंट्री से पुष्टि होती है कि यह लीडर है.

चार नोड वाला थ्रेड नेटवर्क, जिसमें नोड 1 को चुना गया है

OTNS-Web के हिसाब से नोड जोड़ें

OTNS-Web का इस्तेमाल करके भी नोड जोड़े जा सकते हैं. Action Bar के New Router बटन पर क्लिक करें. आपको चुने गए नोड के दाईं ओर एक नोड बनता हुआ दिखेगा. नया मेश एक्सटेंडर, मौजूदा थ्रेड पार्टीशन से जुड़ना चाहिए:

मेश नेटवर्क फैलाने में मदद करने वाली मशीन जोड़ी गई, कुल पांच नोड

इसके अलावा, ऐक्शन बार में मौजूद FED, MED, SSED, और BR बटन पर क्लिक करके, इस तरह के अन्य नोड बनाए जा सकते हैं. अब कुल नौ नोड होने चाहिए. अगर आपको कोई अलग फ़िज़िकल नेटवर्क टोपोलॉजी बनानी है, तो कुछ नोड को खींचकर दूसरी जगहों पर ले जाएं.

कई नए नोड जोड़े गए, कुल नौ नोड

अब आपने एक ऐसे पार्टीशन का थ्रेड नेटवर्क बना लिया है जिसमें कई नोड शामिल हैं. अगले सेक्शन में, हम सिम्युलेटिंग की स्पीड को अडजस्ट करेंगे, ताकि सिम्युलेशन तेज़ी से चल सके.

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: सिमुलेशन की ज़्यादा से ज़्यादा स्पीड का इंडिकेटर तक न पहुंच जाए.

सिमुलेशन की स्पीड कम करना

स्पीड कम करने वाला बटन बटन पर क्लिक करके, सिम्युलेशन की स्पीड कम की जा सकती है.

सिमुलेशन रोकें

सिम्युलेशन के चालू होने पर, उसे रोकने के लिए पॉज़ करें बटन बटन पर क्लिक करें. बटन का नाम बदलकर चलाएं बटन कर दिया जाएगा.

सिम्युलेशन फिर से शुरू करें

सिम्युलेशन को रोकने पर, उसे फिर से शुरू करने के लिए चलाएं बटन बटन पर क्लिक करें. बटन को वापस पॉज़ करें बटन पर सेट कर दिया जाएगा.

सिमुलेशन की स्पीड को 10X पर सेट करें

समय बचाने के लिए,

OTNS-CLI पर क्लिक करके, सिम्युलेशन की स्पीड को

10X ताकि हम नेटवर्क में टोपोलॉजी से जुड़े बदलावों को ज़्यादा तेज़ी से देख सकें.

> speed 10
Done

7. रेडियो चालू/बंद करना

अब सिम्युलेशन में कम से कम दो मेश एक्सटेंडर (षट्भुज आकार), एक बॉर्डर राउटर (स्क्वेयर आकार), और कई चाइल्ड होने चाहिए. साथ ही, यह 10 गुना तेज़ी से चलना चाहिए.

दो मेश एक्सटेंडर में से, मौजूदा लीडर (लाल बॉर्डर) को ढूंढें. इसे चुनने के लिए, एक बार क्लिक करें:

लीडर नोड 1 को चुनने वाला थ्रेड नेटवर्क

रेडियो बंद करें

लीडर नोड के रेडियो को बंद करने के लिए, ऐक्शन बार में मौजूद रेडियो बंद करने का बटन बटन पर क्लिक करें. रेडियो बंद होने पर, लीडर न तो मैसेज भेज पाएगा और न ही उसे कोई मैसेज मिलेगा.

दूसरे मेश एक्सटेंडर या बॉर्डर राऊटर को नया लीडर बनने में करीब 12 सेकंड (सिमुलेशन के समय में 120 सेकंड) लगेंगे:

नोड 9 को नया लीडर बनाकर, नया पार्टीशन बनाया गया

लीडर नोड के काम न करने पर, थ्रेड नेटवर्क अपने-आप ठीक हो जाता है. इसके लिए, वह एक नया पार्टीशन बनाता है और उसमें एक नया लीडर नोड चुनता है. नए पार्टीशन का रंग भी नया है.

रेडियो चालू करें

उस लीडर को चुनें जिसका रेडियो बंद कर दिया गया था. रेडियो कनेक्टिविटी वापस लाने के लिए, Action Bar पर मौजूद रेडियो चालू करने का बटन बटन पर क्लिक करें:

रेडियो चालू होने के बाद, नोड 1 पार्टीशन में शामिल हो जाता है

रेडियो कनेक्टिविटी ठीक होने के बाद, लीडर को नेटवर्क से फिर से कनेक्ट करना चाहिए.

8. नोड को दूसरी जगह ले जाना

OTNS की मदद से, उपयोगकर्ता OTNS-CLI या OTNS-Web के ज़रिए नोड को आसानी से मूव कर सकते हैं.

OTNS-CLI की मदद से नोड को मूव करना

बॉर्डर राउटर नोड 9 को नई जगह पर ले जाएं:

> move 9 50 50
Done

OTNS-Web के ज़रिए नोड को दूसरी जगह ले जाना

नोड 5 को खींचकर, सबसे नीचे दाईं ओर ले जाएं. नोड 5 अब अन्य मेश एक्सटेंडर की रेडियो कवरेज से बाहर है. इसलिए, यह नए पार्टीशन आईडी के साथ अपना खुद का पार्टीशन बनाता है. नोड पर क्लिक करके, नोड की जानकारी वाले पैनल में जाकर पार्टीशन आईडी देखे जा सकते हैं.

नोड 5 को अन्य नोड से अलग कर दिया जाता है और वह एक नया पार्टीशन बनाता है

ध्यान दें कि नोड 5 और नोड 9 के बीच अब भी एक हरी लाइन खींची गई है. ऐसा अक्सर बच्चे की पुरानी जानकारी की वजह से होता है. यह जानकारी, माता-पिता के तौर पर चुने गए किसी व्यक्ति की चाइल्ड टेबल में अब भी मौजूद होती है. इसके अलावा, यह भी हो सकता है कि नोड 9 और नोड 5 के बीच पहले से मौजूद Mesh Extender लिंक के बारे में पुरानी जानकारी दिख रही हो. (ऐसा हो सकता है कि इस मामले में, रेंडरिंग से जुड़ी कोई गड़बड़ी हो.) आखिरकार, सही टाइम आउट के बाद नोड पर पुरानी जानकारी को हटा दिया जाता है.

9. नोड मिटाएं

OTNS-CLI का इस्तेमाल करके नोड मिटाना

नोड 5 मिटाएं:

> del 5
Done

सिमुलेशन से नोड 5 गायब हो जाना चाहिए:

नोड 5 को सिम्युलेशन से मिटा दिया गया है

OTNS-Web का इस्तेमाल करके नोड मिटाना

बॉर्डर राउटर नोड 9 को चुनें और नोड 9 को मिटाने के लिए, Action Bar पर मौजूद 'मिटाएं' बटन बटन पर क्लिक करें:

बॉर्डर राऊटर नोड 9 मिटा दिया गया है

Node 1 को नए पार्टीशन का लीडर बनना चाहिए. साथ ही, बाकी सभी नोड, नोड 1 से चाइल्ड के तौर पर जुड़ जाएंगे.

10. 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
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 है. उदाहरण के लिए, लॉग फ़ाइल का कुछ हिस्सा यहां दिखाया गया है:

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 से फ़्रेम को डिक्रिप्ट करना आसान हो.

Wireshark में OpenThread पैकेट की जांच करने का उदाहरण देखने के लिए, नीचे दिया गया स्क्रीनशॉट देखें.

Wireshark में OpenThread पैकेट के विश्लेषण का स्क्रीनशॉट

डिक्रिप्शन कुंजी को कॉन्फ़िगर करने के लिए, मेन्यू में बदलाव करें -> प्राथमिकताएं चुनें. इसके बाद, प्राथमिकताओं वाली विंडो में जाकर, प्रोटोकॉल -> IEEE 802.15.4 चुनें. "डिक्रिप्शन कुंजियां" के बगल में मौजूद, बदलाव करें... बटन पर क्लिक करें. नई एंट्री बनाने के लिए, + पर क्लिक करें. इसके बाद, 00112233445566778899aabbccddeeff (32 वर्ण) डालें और "की हैश" फ़ील्ड में "थ्रेड हैश" चुनें. "डिक्रिप्शन कुंजी इंडेक्स" को 0 पर छोड़ा जा सकता है. इसके बाद, ठीक है पर क्लिक करें. इसके बाद, ठीक है पर फिर से क्लिक करें. अब लोड होने पर, OTNS पीकैप फ़ाइल सही तरीके से डिक्रिप्ट हो जाएगी.

"समय" कॉलम में दिखाए गए टाइमस्टैंप (सेकंड में), OpenThread नोड के लॉग में दिखाए गए सिम्युलेशन के कुल समय की वैल्यू से मेल खाते हैं. इससे, लॉग मैसेज को ट्रांसमिट किए गए या मिले रेडियो फ़्रेम से जोड़ना आसान हो जाता है. हालांकि, वैल्यू आम तौर पर एक माइक्रोसेकंड तक सटीक नहीं होती हैं: सिम्युलेट किया गया IEEE 802.15.4 रेडियो हार्डवेयर, OpenThread स्टैक से रेडियो फ़्रेम भेजने का अनुरोध किए जाने के बाद, कुछ अतिरिक्त देरी जोड़ सकता है.

12. बधाई हो

बधाई हो, आपने पहला ओटीएनएस सिम्युलेशन पूरा कर लिया है!

आपने OTNS और इसकी डिपेंडेंसी इंस्टॉल करने का तरीका जान लिया है. आपने OpenThread के सिम्युलेट किए गए नोड के साथ OTNS सिम्युलेशन शुरू किया है. आपने OTNS-CLI और OTNS-Web, दोनों की मदद से सिमुलेशन में अलग-अलग तरह के बदलाव करने का तरीका जान लिया है.

अब आपको पता चल गया है कि OTNS क्या है और OpenThread नेटवर्क को सिम्युलेट करने के लिए, OTNS का इस्तेमाल कैसे किया जा सकता है.

आगे क्या करना है?

इन कोडलैब को आज़माएं...

रेफ़रंस के लिए दस्तावेज़