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 yang dimaksud dengan OpenThread?
OpenThread yang dirilis oleh Google adalah penerapan open source Thread®.
Apa itu Router Thread OpenThread?
OpenThread Border Router (OTBR) yang dirilis oleh Google merupakan implementasi open source dari Thread Border Router.
Thread 1.2 Multicast
Thread 1.2 menentukan serangkaian fitur untuk mendukung multicast di seluruh jaringan yang heterogen (segmen Thread dan Wi-Fi/Ethernet Network) untuk alamat multicast dengan cakupan yang lebih besar daripada lokal lokal.
Thread 1.2 Border Router mendaftarkan Set Data Backbone Router (BBR), dan layanan BBR yang dipilih adalah Primary Backbone Router (PBBR), yang bertanggung jawab atas penerusan multicast masuk/keluar.
Perangkat Thread 1.2 mengirim pesan CoAP untuk mendaftarkan alamat multicast ke PBBR (Pendaftaran Pemroses Multicast, disingkat MLR) jika alamatnya lebih besar dari lokal lokal. PBBR menggunakan MLDv2 pada Antarmuka Eksternalnya untuk berkomunikasi dengan LAN/WAN IPv6 yang lebih luas tentang grup multicast IPv6 yang perlu didengarkan, atas nama Jaringan Thread lokalnya. Dan PBBR hanya meneruskan traffic multicast ke Jaringan Thread jika tujuan berlangganan setidaknya oleh satu perangkat Thread.
Untuk Thread 1.2 Perangkat Akhir Minimal, mereka mungkin bergantung pada induknya untuk menggabungkan alamat multicast dan melakukan MLR atas nama mereka, atau mendaftarkan diri mereka sendiri jika induknya adalah Thread 1.1.
Untuk detail selengkapnya, lihat Thread 1.2 Spesifikasi Bagian 5.24 Penerusan Multicast untuk Lingkup Realm-Local.
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 fitur Thread 1.2 Multicast.
- Cara berlangganan alamat multicast IPv6 di perangkat Thread.
Yang akan Anda perlukan
- Perangkat Raspberry Pi 3/4 dan kartu SD dengan kemampuan minimal 8 GB.
- 3 board nRF52840 DK Nordic Semiconductor.
- Wi-Fi AP tanpa IPv6 Router Advertisingment Guard diaktifkan di router.
- Laptop Linux/macOS (Raspberry Pi juga berfungsi) dengan Python3 yang terinstal.
2. Siapkan OTBR
Ikuti codelab Thread Border Router - Konektivitas Dua Arah IPv6 dan DNS-Based Service Discovery untuk menyiapkan Thread Border Router di Raspberry Pi.
Setelah selesai, Raspberry Pi seharusnya membuat jaringan Thread yang berfungsi dan terhubung ke jaringan Wi-Fi.
OTBR akan menjadi Router Backbone Utama dalam hitungan detik.
$ sudo ot-ctl bbr state Primary Done $ sudo ot-ctl bbr BBR Primary: server16: 0xD800 seqno: 23 delay: 1200 secs timeout: 3600 secs Done
3. Perangkat Build dan Flash Thread
Mem-build aplikasi Thread 1.2 CLI dengan Multicast dan mem-flash dua board DRF nRF52840.
Mem-build firmware nRF52840 DK
Ikuti petunjuk untuk meng-clone project dan mem-build firmware nRF52840.
$ mkdir -p ~/src $ cd ~/src $ git clone --recurse-submodules --depth 1 https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx/ $ script/build nrf52840 USB_trans -DOT_MLR=ON -DOT_THREAD_VERSION=1.2 $ arm-none-eabi-objcopy -O ihex build/bin/ot-cli-ftd ot-cli-ftd.hex
Kami dapat menemukan firmware HEX yang berhasil dibuat di ot-cli-ftd.hex
.
Firmware Flash nRF52840 DK
Lakukan flash firmware ke nRF52840 DK menggunakan nrfjprog
, yang merupakan bagian dari nRF Command Line Tools.
$ nrfjprog -f nrf52 --chiperase --program ot-cli-ftd.hex --reset
4. Memasang perangkat Thread ke jaringan Thread
OTBR telah membuat jaringan Thread di langkah sebelumnya. Sekarang kita dapat menambahkan DRF nRF52840 ke jaringan Thread:
Dapatkan Set Data Aktif mentah dari OTBR:
$ sudo ot-ctl dataset active -x 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Sambungkan ke board DK nRF52840:
$ screen /dev/ttyACM0 115200
Mengonfigurasi Set Data Aktif untuk nRF52840 DK:
> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff Done
Mulai stack Thread dan tunggu beberapa detik dan pastikan perangkat berhasil dipasang:
> ifconfig up Done > thread start Done > state child
Ulangi langkah-langkah di atas untuk memasang board nRF52840 DK lainnya ke jaringan Thread.
Kami kini telah berhasil menyiapkan jaringan Thread dengan 3 perangkat Thread: OTBR dan dua papan DK nRF52840.
5. Siapkan Jaringan Wi-Fi
Siapkan jaringan Wi-Fi pada OTBR dan Laptop sehingga terhubung ke AP Wi-Fi yang sama.
Kita dapat menggunakan raspi-config untuk menyiapkan SSID dan frasa sandi Wi-Fi pada OTBR Raspberry Pi.
Topologi jaringan final ditunjukkan di bawah ini:
6. Berlangganan alamat multicast IPv6
Berlangganan ff05::abcd di Perangkat Akhir nRF52840 1:
> ipmaddr add ff05::abcd Done
Verifikasi bahwa ff05::abcd
berhasil berlangganan:
> ipmaddr ff33:40:fdde:ad00:beef:0:0:1 ff32:40:fdde:ad00:beef:0:0:1 ff05:0:0:0:0:0:0:abcd <--- ff05::abcd subscribed 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 final dengan langganan multicast ditampilkan di bawah:
Sekarang kami telah berlangganan alamat multicast IPv6 di Perangkat Akhir 1RF52840 di jaringan Thread dan Laptop di jaringan Wi-Fi, kami akan memverifikasi jangkauan multicast IPv6 dua arah di bagian berikut.
7. Verifikasi Multicast IPv Masuk
Sekarang, kita seharusnya dapat menjangkau Perangkat Akhir 1RF52840 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 dan Laptop karena keduanya telah berlangganan ff05::abcd
. Ini menunjukkan bahwa OTBR dapat meneruskan paket multicast Permintaan IPv6 dari jaringan Wi-Fi ke jaringan Thread.
8. Verifikasi 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
nRF52840 End Device 2 dapat menerima balasan ping dari nRF52840 End Device 1 dan Laptop. Hal ini menunjukkan bahwa OTBR dapat meneruskan paket multicast Ping Reply IPv6 dari jaringan Thread ke jaringan Wi-Fi.
9. Selamat
Selamat, Anda berhasil menyiapkan Border Border Router dan multicast IPv6 dua arah yang terverifikasi!
Untuk mengetahui informasi selengkapnya tentang OpenThread, buka openthread.io.
Dokumen referensi: