1. परिचय
थ्रेड क्या है?
Thread, आईपी पर आधारित कम पावर वाला वायरलेस मेश नेटवर्किंग प्रोटोकॉल है. यह डिवाइस-से-डिवाइस और डिवाइस-से-क्लाउड कम्यूनिकेशन को सुरक्षित बनाता है. सिंगल-पॉइंट फ़ेलियर से बचने के लिए, थ्रेड नेटवर्क टोपोलॉजी में बदलाव कर सकते हैं.
OpenThread क्या है?
Google की ओर से रिलीज़ किया गया OpenThread, Thread® का ओपन-सोर्स वर्शन है.
OpenThread बॉर्डर राऊटर क्या है?
Google ने OpenThread Border Router (OTBR) रिलीज़ किया है. यह Thread Border Router का ओपन-सोर्स वर्शन है.
IPv6 मल्टीकास्ट
Thread, अलग-अलग नेटवर्क (Thread और वाई-फ़ाई/ईथरनेट नेटवर्क सेगमेंट) पर मल्टीकास्ट करने के लिए, कई सुविधाएं उपलब्ध कराता है. ये सुविधाएं, मल्टीकास्ट पतों के लिए उपलब्ध होती हैं. इनका स्कोप, रीऐल्म लोकल से ज़्यादा होता है.
थ्रेड बॉर्डर राउटर, अपने बैकबोन राउटर (बीबीआर) डेटासेट को रजिस्टर करता है. साथ ही, चुना गया बीबीआर, प्राइमरी बैकबोन राउटर (पीबीबीआर) होता है. यह मल्टीकास्ट इनबाउंडिंग/आउटबाउंडिंग फ़ॉरवर्ड के लिए ज़िम्मेदार होता है.
अगर पता, रीऐल्म लोकल से बड़ा है, तो थ्रेड डिवाइस, पीबीबीआर (मल्टीकास्ट लिसनर रजिस्ट्रेशन, इसे एमएलआर भी कहा जाता है) को CoAP मैसेज भेजता है, ताकि मल्टीकास्ट पते को रजिस्टर किया जा सके. PBBR, अपने बाहरी इंटरफ़ेस पर MLDv2 का इस्तेमाल करता है. इससे वह IPv6 मल्टीकास्ट ग्रुप के बारे में, IPv6 LAN/WAN से कम्यूनिकेट कर पाता है. इन ग्रुप को उसे अपने लोकल थ्रेड नेटवर्क की ओर से सुनना होता है. साथ ही, PBBR सिर्फ़ तब मल्टीकास्ट ट्रैफ़िक को Thread नेटवर्क में फ़ॉरवर्ड करता है, जब डेस्टिनेशन की सदस्यता कम से कम एक Thread डिवाइस ने ली हो.
थ्रेड के कम से कम एंड डिवाइसों के लिए, मल्टीकास्ट पते को इकट्ठा करने और उनकी ओर से एमएलआर करने के लिए, वे अपने पैरंट पर निर्भर हो सकते हैं. इसके अलावा, अगर उनका पैरंट थ्रेड 1.1 का है, तो वे खुद को रजिस्टर कर सकते हैं.
ज़्यादा जानकारी के लिए, कृपया थ्रेड स्पेसिफ़िकेशन देखें.
आपको क्या बनाना है
इस कोडलैब में, आपको Thread बॉर्डर राऊटर और दो Thread डिवाइस सेट अप करने हैं. इसके बाद, Thread डिवाइसों और वाई-फ़ाई डिवाइसों पर मल्टीकास्ट की सुविधाएं चालू करनी हैं और उनकी पुष्टि करनी है.
आपको क्या सीखने को मिलेगा
- IPv6 मल्टीकास्ट के साथ काम करने वाला nRF52840 फ़र्मवेयर बनाने का तरीका.
- Thread डिवाइसों पर IPv6 मल्टीकास्ट पतों की सदस्यता लेने का तरीका.
आपको किन चीज़ों की ज़रूरत होगी
- Linux वर्कस्टेशन, ताकि Thread RCP और OpenThread CLI बनाया और फ़्लैश किया जा सके. साथ ही, IPv6 मल्टीकास्ट की टेस्टिंग की जा सके.
- Thread बॉर्डर राऊटर के लिए Raspberry Pi.
- दो Nordic Semiconductor nRF52840 यूएसबी डोंगल (एक आरसीपी के लिए और दो थ्रेड एंड डिवाइसों के लिए).
2. OTBR सेटअप करना
OTBR सेटअप गाइड को फ़ॉलो करके, OTBR को तुरंत सेट अप किया जा सकता है.
OTBR का सेटअप पूरा होने के बाद, ot-ctl
का इस्तेमाल करके यह पुष्टि करें कि OTBR, कुछ ही सेकंड में प्राइमरी बैकबोन राऊटर बन गया है.
> bbr state Primary Done > bbr BBR Primary: server16: 0xF800 seqno: 21 delay: 5 secs timeout: 3600 secs Done
3. Thread डिवाइसों को बिल्ड और फ़्लैश करना
मल्टीकास्ट की सुविधा के साथ Thread CLI ऐप्लिकेशन बनाएं और दोनों nRF52840 DK बोर्ड को फ़्लैश करें.
nRF52840 DK फ़र्मवेयर बनाना
प्रोजेक्ट को क्लोन करने और nRF52840 फ़र्मवेयर बनाने के लिए, निर्देशों का पालन करें.
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
nRF52840 बोर्ड और OpenThread कोडलैब की मदद से थ्रेड नेटवर्क बनाएं कोडलैब में दिए गए निर्देशों का पालन करें. एंड डिवाइस पर सीएलआई इमेज फ़्लैश करने के बाद, Thread डिवाइस को Thread नेटवर्क में जोड़ने के लिए, दूसरे नोड को Thread नेटवर्क में जोड़ें को फ़ॉलो करें. दूसरे थ्रेड एंड डिवाइस के लिए भी यही तरीका दोहराएं.
4. IPv6 मल्टीकास्ट पते की सदस्यता लेना
nRF52840 End Device 1 पर ff05::abcd को सब्सक्राइब करें:
> ipmaddr add ff05::abcd Done
पुष्टि करें कि ff05::abcd
की सदस्यता ले ली गई है:
> ipmaddr ff05:0:0:0:0:0:0:abcd <--- ff05::abcd subscribed ff33:40:fdde:ad00:beef:0:0:1 ff32:40:fdde:ad00:beef:0:0:1 ff02:0:0:0:0:0:0:2 ff03:0:0:0:0:0:0:2 ff02:0:0:0:0:0:0:1 ff03:0:0:0:0:0:0:1 ff03:0:0:0:0:0:0:fc Done
लैपटॉप पर ff05::abcd की सदस्यता लेना:
हमें लैपटॉप पर मल्टीकास्ट पते की सदस्यता लेने के लिए, Python स्क्रिप्ट subscribe6.py
की ज़रूरत है.
यहां दिए गए कोड को कॉपी करें और इसे subscribe6.py
के तौर पर सेव करें:
import ctypes
import ctypes.util
import socket
import struct
import sys
libc = ctypes.CDLL(ctypes.util.find_library('c'))
ifname, group = sys.argv[1:]
addrinfo = socket.getaddrinfo(group, None)[0]
assert addrinfo[0] == socket.AF_INET6
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
interface_index = libc.if_nametoindex(ifname.encode('ascii'))
mreq = group_bin + struct.pack('@I', interface_index)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
print("Subscribed %s on interface %s." % (group, ifname))
input('Press ENTER to quit.')
वाई-फ़ाई नेटवर्क इंटरफ़ेस (जैसे, wlan0) पर ff05::abcd
की सदस्यता लेने के लिए, subscribe6.py
चलाएं:
$ sudo python3 subscribe6.py wlan0 ff05::abcd Subscribed ff05::abcd on interface wlan0. Press ENTER to quit.
मल्टीकास्ट सदस्यता वाली फ़ाइनल नेटवर्क टोपोलॉजी यहां दिखाई गई है:
अब हमने Thread नेटवर्क में मौजूद nRF52840 एंड डिवाइस 1 और वाई-फ़ाई नेटवर्क में मौजूद लैपटॉप, दोनों पर आईपीवी6 मल्टीकास्ट पते की सदस्यता ले ली है. अब हम यहां दिए गए सेक्शन में, दोनों दिशाओं में आईपीवी6 मल्टीकास्ट रीच की पुष्टि करेंगे.
5. इनबाउंड IPv6 मल्टीकास्ट की पुष्टि करना
अब हम वाई-फ़ाई नेटवर्क से, IPv6 मल्टीकास्ट पते ff05::abcd
का इस्तेमाल करके, Thread नेटवर्क में मौजूद nRF52840 एंड डिवाइस 1 और लैपटॉप, दोनों तक पहुंच सकते हैं.
वाई-फ़ाई इंटरफ़ेस के ज़रिए, OTBR पर ff05::abcd को पिंग करें:
$ ping -6 -b -t 5 -I wlan0 ff05::abcd PING ff05::abcd(ff05::abcd) from 2401:fa00:41:801:83c1:a67:ae22:5346 wlan0: 56 data bytes 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=1 ttl=64 time=57.4 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=1 ttl=64 time=84.9 ms (DUP!) 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=2 ttl=64 time=54.8 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=2 ttl=64 time=319 ms (DUP!) 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=3 ttl=64 time=57.5 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=3 ttl=64 time=239 ms (DUP!) # If using MacOS, use this command. The interface is typically not "wlan0" for Mac. $ ping6 -h 5 -I wlan0 ff05::abcd
हम देख सकते हैं कि OTBR को nRF52840 End Device 1 और लैपटॉप, दोनों से पिंग के दो जवाब मिल सकते हैं. ऐसा इसलिए, क्योंकि दोनों ने ff05::abcd
की सदस्यता ली है. इससे पता चलता है कि OTBR, वाई-फ़ाई नेटवर्क से Thread नेटवर्क पर IPv6 पिंग अनुरोध वाले मल्टीकास्ट पैकेट फ़ॉरवर्ड कर सकता है.
6. आउटबाउंड आईपीवी6 मल्टीकास्ट की पुष्टि करें
nRF52840 End Device 2 पर ff05::abcd को पिंग करें:
> ping ff05::abcd 100 10 1 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=12 hlim=64 time=297ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=12 hlim=63 time=432ms 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=13 hlim=64 time=193ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=13 hlim=63 time=306ms 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=14 hlim=64 time=230ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=14 hlim=63 time=279ms
nRF52840 End Device 2, nRF52840 End Device 1 और लैपटॉप, दोनों से पिंग के जवाब पा सकता है. इससे पता चलता है कि ओटीबीआर, Thread नेटवर्क से वाई-फ़ाई नेटवर्क पर आईपीवी6 पिंग रिप्लाई मल्टीकास्ट पैकेज फ़ॉरवर्ड कर सकता है.
7. बधाई हो
बधाई हो, आपने Thread बॉर्डर राऊटर को सेट अप कर लिया है. साथ ही, दोनों दिशाओं में IPv6 मल्टीकास्ट की पुष्टि कर ली है!
OpenThread के बारे में ज़्यादा जानने के लिए, openthread.io पर जाएं.
रेफ़रंस दस्तावेज़: