1. Giới thiệu
Chuỗi cuộc trò chuyện là gì?
Chuỗi cuộc trò chuyện là một giao thức mạng lưới không dây công suất thấp dựa trên IP, cho phép giao tiếp giữa các thiết bị và đám mây bảo mật theo thiết bị. Các mạng chuỗi có thể thích ứng với các thay đổi về cấu trúc liên kết để tránh các lỗi về một điểm.
Openthread là gì?
OpenThread do Google phát hành là phương thức triển khai nguồn mở của Thread®.
Bộ định tuyến đường viền mở là gì?
Bộ định tuyến đường viền chuỗi (OTBR) do Google phát hành là phương thức triển khai nguồn mở của Bộ định tuyến đường viền chuỗi.
Đa chuỗi chuỗi 1.2
Chuỗi 1.2 xác định một loạt các tính năng hỗ trợ phát đa hướng trên một mạng không đồng nhất (phân đoạn Mạng và Chuỗi Wi-Fi/Ethernet) cho các địa chỉ đa hướng có phạm vi lớn hơn cục bộ của vùng.
Bộ định tuyến biên Thread 1.2 đăng ký Bộ định tuyến đường hầm (BBR) của nó. Dịch vụ BBR được chọn là Bộ định tuyến đường trục chính (PBBR), chịu trách nhiệm về đầu vào/hướng ra ngoài đa hướng.
Một thiết bị theo chuỗi 1.2 sẽ gửi thông báo CoAP để đăng ký địa chỉ đa hướng đến PBBR (Đăng ký trình xử lý đa hướng, viết tắt là MLR) nếu địa chỉ lớn hơn trong vùng cục bộ. PBBR sử dụng MLDv2 trên Giao diện bên ngoài để giao tiếp với mạng đa kênh/mạng LAN IPv6 về các nhóm đa hướng IPv6 mà họ cần nghe thay mặt cho mạng chuỗi cuộc trò chuyện cục bộ. Và PBBR chỉ chuyển tiếp lưu lượng truy cập đa hướng vào Mạng chuỗi cuộc trò chuyện nếu đích đến được đăng ký bởi ít nhất một thiết bị Chuỗi.
Đối với Thiết bị kết thúc tối thiểu ở chuỗi 1.2, thiết bị này có thể phụ thuộc vào cha mẹ của họ để tổng hợp địa chỉ đa hướng và tự thay đổi MLR, hoặc đăng ký nếu cha mẹ của họ là Chủ đề 1.1.
Để biết thêm thông tin chi tiết, vui lòng tham khảo Nhắn mục đặc tả chuỗi 1.2 Mục 5.24 Chuyển tiếp đa hướng để biết phạm vi lớn hơn Phạm vi địa phương.
Nội dung bạn sẽ tạo
Trong lớp học lập trình này, bạn sẽ thiết lập một Bộ định tuyến biên chuỗi và 2 thiết bị Chuỗi, sau đó bật và xác minh các tính năng Đa hướng trên thiết bị Chuỗi và Wi-Fi.
Những điều bạn sẽ tìm hiểu
- Cách xây dựng chương trình cơ sở nRF52840 với các tính năng Đa chuỗi 1.2.
- Cách đăng ký địa chỉ đa hướng IPv6 trên các thiết bị theo chuỗi.
Những điều bạn cần có
- Thiết bị Raspberry Pi 3/4 và thẻ SD có dung lượng tối thiểu 8 GB.
- 3 bảng bán dẫn Bắc Âu nRF52840 DK.
- AP-Wi-Fi không cóBảo vệ quảng cáo bộ định tuyến IPv6 đã bật trên bộ định tuyến.
- Máy tính xách tay Linux/macOS (Raspberry Pi cũng hoạt động) khi cài đặt Python3.
2. Thiết lập OTBR
Thực hiện theoBộ định tuyến đường viền chuỗi – Gói kết nối IPv6 và Khám phá dịch vụ dựa trên DNS để thiết lập Bộ định tuyến đường viền chuỗi trên Raspberry Pi.
Sau khi hoàn tất, Raspberry Pi sẽ tạo ra một mạng Chuỗi đang hoạt động và có kết nối với mạng Wi-Fi.
OTBR sẽ trở thành Bộ định tuyến đường hầm chính trong vài giây.
$ 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. Thiết bị Flash và chuỗi thiết bị
Xây dựng ứng dụng CLI trong chuỗi 1.2 với Multicast và flash hai bảng nRF52840 DK.
Xây dựng chương trình cơ sở nRF52840 DK
Làm theo hướng dẫn để sao chép dự án và xây dựng chương trình cơ sở 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
Chúng tôi có thể tìm thấy chương trình cơ sở HEX được tạo thành công tại ot-cli-ftd.hex
.
Chương trình cơ sở Flash nRF52840 DK
Chuyển chương trình cơ sở vào nRF52840 DK bằng nrfjprog
, một phần của Công cụ dòng lệnh nRF.
$ nrfjprog -f nrf52 --chiperase --program ot-cli-ftd.hex --reset
4. Đính kèm thiết bị theo chuỗi vào mạng Chuỗi
Trong các bước trước đó, OTBR đã tạo mạng Chuỗi. Bây giờ chúng ta có thể thêm DKRF52840 DK vào mạng Thread:
Nhận tập dữ liệu thô đang hoạt động từ OTBR:
$ sudo ot-ctl dataset active -x 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Kết nối với bảng nRF52840 DK:
$ screen /dev/ttyACM0 115200
Định cấu hình Tập dữ liệu đang hoạt động cho nRF52840 DK:
> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff Done
Khởi động Ngăn xếp chuỗi rồi đợi vài giây và xác minh rằng thiết bị đã đính kèm thành công:
> ifconfig up Done > thread start Done > state child
Lặp lại các bước trên để đính kèm bảng nRF52840 DK khác vào mạng Thread.
Hiện chúng tôi đã thiết lập thành công mạng Thread với 3 thiết bị Thread: OTBR và 2 bảng nRF52840 DK.
5. Thiết lập mạng Wi-Fi
Thiết lập mạng Wi-Fi trên OTBR và Máy tính xách tay để kết nối với cùng một mạng Wi-Fi AP.
Chúng tôi có thể sử dụng raspi-config để thiết lập SSID Wi-Fi và cụm mật khẩu trên Raspberry Pi OTBR.
Cấu trúc liên kết mạng cuối cùng được hiển thị dưới đây:
6. Đăng ký địa chỉ đa hướng IPv6
Đăng ký ff05::abcd trên Thiết bị cuối nRF52840:
> ipmaddr add ff05::abcd Done
Xác minh rằng ff05::abcd
đã đăng ký thành công:
> 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
Đăng ký ff05::abcd trên máy tính xách tay:
Chúng tôi cần một tập lệnh Python subscribe6.py
để đăng ký một địa chỉ đa hướng trên Máy tính xách tay.
Sao chép mã bên dưới và lưu mã ở dạng 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.')
Hãy chạy subscribe6.py
để đăng ký ff05::abcd
trên giao diện mạng Wi-Fi (ví dụ: wlan0):
$ sudo python3 subscribe6.py wlan0 ff05::abcd Subscribed ff05::abcd on interface wlan0. Press ENTER to quit.
Cấu trúc liên kết mạng cuối cùng chứa các gói đăng ký đa hướng:
Hiện tại, chúng tôi đã đăng ký địa chỉ đa hướng IPv6 trên cả mạng Thiết bị cuối nRF52840 nRF5 và máy tính xách tay trong mạng Wi-Fi, chúng tôi sẽ xác minh khả năng truy cập đa hướng IPv6 hai chiều trong các phần sau.
7. Xác minh chế độ phát đa hướng IPv6 đến
Giờ đây, chúng ta sẽ có thể kết nối cả nRF52840 Thiết bị cuối 1 trong mạng Chuỗi và Máy tính xách tay sử dụng địa chỉ đa hướng IPv6 ff05::abcd
từ mạng Wi-Fi.
Ping ff05::abcd trên OTBR qua giao diện 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!)
Chúng ta có thể thấy rằng OTBR có thể nhận được hai phản hồi ping từ cả Thiết bị cuối nRF52840 và Máy tính xách tay vì cả hai người đều đã đăng ký ff05::abcd
. Điều này cho thấy rằng OTBR có thể chuyển tiếp các gói đa hướng ping Yêu cầu IPv6 từ mạng Wi-Fi sang mạng Chuỗi.
8. Xác minh chế độ phát đa hướng IPv6 đi
Ping ff05::abcd trên thiết bị cuối 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 Thiết bị cuối 2 có thể nhận phản hồi ping từ cả Thiết bị cuối nRF52840 1 và Máy tính xách tay. Điều này cho thấy rằng OTBR có thể chuyển tiếp các gói đa hướng Ping IPv6 Ping từ mạng Thread đến mạng Wi-Fi.
9. Chúc mừng
Xin chúc mừng, bạn đã thiết lập thành công Bộ định tuyến đường viền chuỗi và xác minh đa hướng IPv6 hai chiều!
Để biết thêm thông tin về OpenThread, hãy truy cập vào openthread.io.
Tài liệu tham khảo: