Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Bộ định tuyến đường viền ren - Chủ đề 1.2 Multicast

1. Giới thiệu

608c4c35050eb280.png

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:

5d0f36fd69eregex9a.png

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:

b118448c98b2d583.png

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: