1. Pengantar
Apa itu 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 satu titik.
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 daripada lokal realm.
Thread Border Router mendaftarkan Dataset Backbone Router (BBR), dan layanan BBR yang dipilih adalah Primary Backbone Router (PBBR), yang bertanggung jawab atas penerusan masuk/keluar multicast.
Perangkat Thread mengirim pesan CoAP untuk mendaftarkan alamat multicast ke PBBR (Multicast Listener Registration, MLR) jika alamatnya lebih besar dari realm lokal. PBBR menggunakan MLDv2 di Antarmuka Eksternalnya untuk berkomunikasi dengan LAN/WAN IPv6 yang lebih luas tentang grup multicast IPv6 yang perlu didengarkannya, atas nama Jaringan Thread lokalnya. Selain itu, PBBR hanya meneruskan traffic multicast ke Jaringan Thread jika tujuan telah didaftarkan oleh setidaknya satu perangkat Thread.
Untuk Perangkat Akhir Minimal Thread, perangkat tersebut mungkin bergantung pada induknya untuk menggabungkan alamat multicast dan melakukan MLR atas nama mereka, atau mendaftarkan diri jika induknya adalah Thread 1.1.
Untuk mengetahui detail selengkapnya, lihat Spesifikasi Thread.
Yang akan Anda build
Dalam codelab ini, Anda akan menyiapkan Router Pembatas Thread dan dua perangkat Thread, lalu mengaktifkan dan memverifikasi fitur Multicast di perangkat Thread dan perangkat Wi-Fi.
Yang akan Anda pelajari
- Cara membuat firmware nRF52840 dengan dukungan untuk Multicast IPv6.
- Cara berlangganan alamat multicast IPv6 di perangkat Thread.
Yang Anda butuhkan
- Workstation Linux, untuk membuat dan mem-flash RCP Thread, OpenThread CLI, dan menguji multicast IPv6.
- Raspberry Pi untuk router pembatas Thread.
- 2 Dongle USB Nordic Semiconductor nRF52840 (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. Membangun dan Mem-flash perangkat Thread
Bangun aplikasi Thread CLI dengan Multicast dan flash dua papan nRF52840 DK.
Bangun firmware nRF52840 DK
Ikuti petunjuk untuk meng-clone project dan membuat firmware nRF52840.
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
Lanjutkan Build a Thread network with nRF52840 boards and OpenThread codelab seperti yang ditulis. Setelah perangkat akhir di-flash dengan image CLI, ikuti Gabungkan node kedua ke jaringan Thread untuk menambahkan perangkat Thread ke jaringan Thread. Ulangi untuk perangkat akhir Thread kedua.
4. Berlangganan alamat multicast IPv6
Berlangganan ke 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 ke 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 mendaftarkan 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 kita mendaftarkan alamat multicast IPv6 di nRF52840 End Device 1 dalam jaringan Thread dan Laptop dalam jaringan Wi-Fi, kita akan memverifikasi kemampuan jangkauan multicast IPv6 dua arah di bagian berikut.
5. Memverifikasi Multicast IPv6 Masuk
Sekarang, kita dapat menjangkau nRF52840 End Device 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 respons ping dari nRF52840 End Device 1 dan Laptop karena keduanya telah berlangganan ff05::abcd
. Hal ini menunjukkan bahwa OTBR dapat meneruskan paket multitransmisi Permintaan Ping IPv6 dari jaringan Wi-Fi ke jaringan Thread.
6. Memverifikasi Multicast IPv6 Keluar
Ping ff05::abcd di nRF52840 End Device 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
nRF52840 End Device 2 dapat menerima balasan ping dari nRF52840 End Device 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 mengetahui informasi selengkapnya tentang OpenThread, buka openthread.io.
Dokumen referensi: