Router Pembatas Thread - IPv6 Multicast

1. Pengantar

608c4c35050eb280.png

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:

b118448c98b2d583.png

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: