1. Pengantar
Apa yang dimaksud dengan Thread?
Thread adalah protokol jaringan mesh nirkabel berdaya rendah berbasis IP yang memungkinkan komunikasi perangkat ke perangkat dan perangkat ke cloud yang aman. Jaringan thread dapat beradaptasi dengan perubahan topologi untuk menghindari kegagalan titik tunggal.
Apa itu OpenThread?
OpenThread yang dirilis oleh Google adalah implementasi open source Thread®.
Apa yang dimaksud dengan Router Pembatas OpenThread?
OpenThread Border Router (OTBR) yang dirilis oleh Google adalah implementasi open source dari Thread Border Router.
Multicast IPv6
Thread menentukan serangkaian fitur untuk mendukung multicast di seluruh jaringan heterogen (segmen Jaringan Thread dan Wi-Fi/Ethernet) untuk alamat multicast dengan cakupan yang lebih besar dari lokal wilayah.
Thread Border Router mendaftarkan Set Data Router Backbone (BBR), dan layanan BBR yang dipilih adalah Primary Backbone Router (PBBR), yang bertanggung jawab untuk meneruskan multicast masuk/keluar.
Perangkat Thread mengirim pesan CoAP untuk mendaftarkan alamat multicast ke PBBR (Pendaftaran Pemroses Multicast, MLR) jika alamatnya lebih besar dari lokal realm. PBBR menggunakan MLDv2 di Antarmuka Eksternalnya untuk berkomunikasi dengan LAN/WAN IPv6 yang lebih luas tentang grup multicast IPv6 yang perlu didengarkan, atas nama Jaringan Thread lokalnya. Selain itu, PBBR hanya meneruskan traffic multicast ke Jaringan Thread jika tujuan berlangganan oleh setidaknya satu perangkat Thread.
Untuk Perangkat Akhir Minimal Thread, perangkat tersebut dapat bergantung pada induknya untuk menggabungkan alamat multicast dan melakukan MLR atas namanya, atau mendaftarkan dirinya sendiri jika induknya adalah Thread 1.1.
Untuk detail selengkapnya, lihat Spesifikasi Thread.
Yang akan Anda buat
Dalam codelab ini, Anda akan menyiapkan Thread Border Router dan dua perangkat Thread, lalu mengaktifkan dan memverifikasi fitur Multicast di perangkat Thread dan perangkat Wi-Fi.
Yang akan Anda pelajari
- Cara mem-build firmware nRF52840 dengan dukungan untuk Multicast IPv6.
- Cara berlangganan alamat multicast IPv6 di perangkat Thread.
Yang Anda butuhkan
- Workstation Linux, untuk mem-build dan mem-flash Thread RCP, OpenThread CLI, dan menguji multicast IPv6.
- Raspberry Pi untuk router pembatas Thread.
- 2 Dongle USB nRF52840 Nordic Semiconductor (satu untuk RCP dan dua untuk perangkat akhir Thread).
2. Menyiapkan OTBR
Cara tercepat untuk menyiapkan OTBR adalah dengan mengikuti Panduan Penyiapan OTBR.
Setelah penyiapan OTBR selesai, gunakan ot-ctl
untuk memvalidasi bahwa OTBR menjadi Router Backbone Utama dalam hitungan detik.
> bbr state Primary Done > bbr BBR Primary: server16: 0xF800 seqno: 21 delay: 5 secs timeout: 3600 secs Done
3. Mem-build dan mem-flash perangkat Thread
Build aplikasi Thread CLI dengan Multicast dan flash dua board nRF52840 DK.
Mem-build firmware nRF52840 DK
Ikuti petunjuk untuk meng-clone project dan mem-build firmware nRF52840.
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
Lanjutkan dengan Mem-build jaringan Thread dengan board nRF52840 dan codelab OpenThread seperti yang ditulis. Setelah perangkat akhir di-flash dengan image CLI, ikuti Bergabung ke node kedua ke jaringan Thread untuk menambahkan perangkat Thread ke jaringan Thread. Ulangi untuk perangkat akhir Thread kedua.
4. Berlangganan alamat multicast IPv6
Berlangganan ff05::abcd di Perangkat Akhir nRF52840 1:
> ipmaddr add ff05::abcd Done
Pastikan ff05::abcd
berhasil berlangganan:
> 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
Berlangganan ff05::abcd di Laptop:
Kita memerlukan skrip Python subscribe6.py
untuk berlangganan alamat multicast di Laptop.
Salin kode di bawah dan simpan sebagai 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.')
Jalankan subscribe6.py
untuk berlangganan ff05::abcd
di antarmuka jaringan Wi-Fi (misalnya, wlan0):
$ sudo python3 subscribe6.py wlan0 ff05::abcd Subscribed ff05::abcd on interface wlan0. Press ENTER to quit.
Topologi jaringan akhir dengan langganan multicast ditampilkan di bawah:
Setelah berlangganan alamat multicast IPv6 di Perangkat Akhir nRF52840 1 di jaringan Thread dan Laptop di jaringan Wi-Fi, kita akan memverifikasi keterjangkauan multicast IPv6 dua arah di bagian berikut.
5. Memverifikasi Multicast IPv6 Masuk
Sekarang, kita dapat menjangkau Perangkat Akhir nRF52840 1 di jaringan Thread dan Laptop menggunakan alamat multicast IPv6 ff05::abcd
dari jaringan Wi-Fi.
Ping ff05::abcd di OTBR melalui antarmuka Wi-Fi:
$ 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
Kita dapat melihat bahwa OTBR dapat menerima dua balasan ping dari Perangkat Akhir nRF52840 1 dan Laptop karena keduanya telah berlangganan ff05::abcd
. Hal ini menunjukkan bahwa OTBR dapat meneruskan paket multicast Permintaan Ping IPv6 dari jaringan Wi-Fi ke jaringan Thread.
6. Memverifikasi Multicast IPv6 Keluar
Ping ff05::abcd di Perangkat Akhir nRF52840 2:
> 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
Perangkat Akhir nRF52840 2 dapat menerima balasan ping dari Perangkat Akhir nRF52840 1 dan Laptop. Hal ini menunjukkan bahwa OTBR dapat meneruskan paket multicast IPv6 Ping Reply dari jaringan Thread ke jaringan Wi-Fi.
7. Selamat
Selamat, Anda telah berhasil menyiapkan Router Pembatas Thread dan memverifikasi multicast IPv6 dua arah.
Untuk informasi selengkapnya tentang OpenThread, buka openthread.io.
Dokumen referensi: