थ्रेड बॉर्डर राऊटर - IPv6 मल्टीकास्ट

1. परिचय

608c4c35050eb280.png

थ्रेड क्या है?

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.

मल्टीकास्ट सदस्यता वाली फ़ाइनल नेटवर्क टोपोलॉजी यहां दिखाई गई है:

b118448c98b2d583.png

अब हमने 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 पर जाएं.

रेफ़रंस दस्तावेज़: