Router Pembatas Thread - Thread 1.2 Multicast

1. Pengantar

608c4c35050eb280.pngS

Apa itu Thread?

Thread adalah protokol jaringan mesh nirkabel berdaya rendah berbasis IP yang memungkinkan komunikasi antarperangkat 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 merupakan implementasi open source dari Thread®.

Apa itu Router Pembatas OpenThread?

OpenThread Border Router (OTBR) yang dirilis oleh Google merupakan implementasi open source dari Thread Border Router.

Thread 1.2 Multicast

Thread 1.2 mendefinisikan serangkaian fitur untuk mendukung multicast di seluruh jaringan heterogen (segmen Thread dan Wi-Fi/Ethernet Network) untuk alamat multicast dengan cakupan yang lebih besar daripada realm lokal.

Border Router Thread 1.2 mendaftarkan Set Data Backbone Router (BBR), dan layanan BBR yang dipilih adalah Primary Backbone Router (PBBR), yang bertanggung jawab untuk melakukan perjalanan masuk/keluar multicast ke depan.

Thread 1.2 Device mengirim pesan CoAP untuk mendaftarkan alamat multicast ke PBBR (Multicast Listener Registration, MLR disingkat) jika alamat tersebut lebih besar dari {i>realm local<i}. PBBR menggunakan MLDv2 pada Antarmuka Eksternal-nya untuk berkomunikasi dengan LAN/WAN IPv6 yang lebih luas tentang grup multicast IPv6 yang perlu didengarkan, atas nama Jaringan Thread lokal. Dan PBBR hanya meneruskan traffic multicast ke Jaringan Thread jika tujuan berlangganan oleh setidaknya satu perangkat Thread.

Untuk Thread 1.2 Minimal End Devices, mereka mungkin bergantung pada induk mereka 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 Specification Bagian 5.24 Multicast Penerusan untuk cakupan yang lebih besar dari Realm-Local Scope.

Yang akan Anda buat

Dalam codelab ini, Anda akan menyiapkan Router Pembatas Thread dan dua perangkat Thread, lalu mengaktifkan dan memverifikasi fitur Multicast pada perangkat Thread dan perangkat Wi-Fi.

Yang akan Anda pelajari

  • Cara membangun firmware nRF52840 dengan fitur Thread 1.2 Multicast.
  • Cara berlangganan alamat multicast IPv6 di perangkat Thread.

Yang Anda butuhkan

  • Perangkat Raspberry Pi 3/4 dan kartu SD dengan kemampuan minimal 8 GB.
  • 3 board Nordic Semiconductor nRF52840 DK.
  • Wi-Fi AP tanpa IPv6 Router Broadcastment Guard yang diaktifkan di router.
  • Laptop Linux/macOS (Raspberry Pi juga berfungsi) dengan Python3 terinstal.

2. Siapkan OTBR

Ikuti codelab Thread Border Router - Bidirectional IPv6 Connectivity and DNS-Based Service Discovery untuk menyiapkan Thread Border Router di Raspberry Pi.

Setelah selesai, Raspberry Pi seharusnya telah 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

Bangun aplikasi CLI Thread 1.2 dengan Multicast dan flash kedua board DK nRF52840.

Membuat 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

Kita dapat menemukan firmware HEX yang berhasil dibuat di ot-cli-ftd.hex.

Firmware DK nRF52840 flash

Flash firmware ke nRF52840 DK menggunakan nrfjprog, yang merupakan bagian dari Alat Command Line nRF.

$ 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 DK nRF52840 ke jaringan Thread:

Mendapatkan Set Data Aktif mentah dari OTBR:

$ sudo ot-ctl dataset active -x
0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff

Menghubungkan ke board DK nRF52840:

$ screen /dev/ttyACM0 115200

Konfigurasikan Set Data Aktif untuk DK nRF52840:

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

Mulai stack Thread, lalu tunggu beberapa detik dan pastikan perangkat telah berhasil dipasang:

> ifconfig up
Done
> thread start
Done
> state
child

Ulangi langkah-langkah di atas untuk memasang board DK nRF52840 lainnya ke jaringan Thread.

Kita telah berhasil menyiapkan jaringan Thread dengan 3 perangkat Thread: OTBR dan dua board DK nRF52840.

5. Siapkan Jaringan Wi-Fi

Siapkan jaringan Wi-Fi di OTBR dan Laptop agar terhubung ke AP Wi-Fi yang sama.

Kita dapat menggunakan raspi-config untuk menyiapkan SSID dan frasa sandi Wi-Fi di OTBR Raspberry Pi.

Topologi jaringan akhir ditunjukkan di bawah ini:

5d0f36fd69ebcc9a.pngS

6. Berlangganan alamat multicast IPv6

Berlangganan ff05::abcd di nRF52840 Perangkat Akhir 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 akhir dengan langganan multicast ditampilkan di bawah ini:

b118448c98b2d583.png

Sekarang setelah berlangganan alamat multicast IPv6 pada jaringan nRF52840 End Device 1 di Thread dan Laptop di jaringan Wi-Fi, kita akan memverifikasi keterjangkauan multicast IPv6 dua arah di bagian berikut.

7. Verifikasi Multicast IPv6 Masuk

Sekarang, kita akan dapat menjangkau nRF52840 Perangkat Akhir 1 di jaringan Thread dan Laptop yang 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 nRF52840 Perangkat Akhir 1 dan Laptop karena keduanya telah berlangganan ff05::abcd. Gambar ini menunjukkan bahwa OTBR dapat meneruskan paket multicast Permintaan Ping IPv6 dari jaringan Wi-Fi ke jaringan Thread.

8. Memverifikasi Multicast IPv6 Keluar

Ping ff05::abcd di nRF52840 Perangkat Akhir 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. Ini menunjukkan bahwa OTBR dapat meneruskan paket multicast Ping Reply IPv6 dari jaringan Thread ke jaringan Wi-Fi.

9. Selamat

Selamat, Anda telah berhasil menyiapkan Thread Border Router dan memverifikasi multicast IPv6 dua arah!

Untuk mengetahui informasi selengkapnya tentang OpenThread, kunjungi openthread.io.

Dokumen referensi: