Hướng dẫn cấu hình mạng Thread với vai trò Joiner và Commissioner trên thiết bị nRF52840


Summary

Bài viết này khám phá cách cấu hình mạng Thread với vai trò Joiner và Commissioner trên thiết bị nRF52840. Nó không chỉ mang đến hướng dẫn chi tiết mà còn cung cấp cái nhìn sâu sắc về xu hướng và thách thức trong lĩnh vực IoT hiện nay. Key Points:

  • Tích hợp AI vào quy trình phát triển firmware giúp tối ưu hóa hiệu suất và giảm thiểu lỗi trong thiết lập mạng Thread.
  • Nghiên cứu sâu về an ninh mạng, đặc biệt là các lỗ hổng zero-day trong giao thức Thread, nhằm bảo vệ hệ thống IoT khỏi các cuộc tấn công mới.
  • Cần đảm bảo khả năng tương tác giữa Thread và các giao thức khác như Zigbee hay WiFi để tạo ra một hệ sinh thái IoT mạnh mẽ hơn.
Thông qua bài viết, bạn sẽ nhận được những hiểu biết giá trị về quản lý an ninh, tối ưu hóa firmware và khả năng tương tác giữa các giao thức mạng.

Giới thiệu về vai trò Joiner và Commissioner trong mạng Thread

### Đơn giản hóa việc cung cấp mạng Thread với vai trò Joiner và Commissioner

Thực hành trên các thiết bị nRF52840 để cung cấp mạng Thread. Hiểu rõ vai trò của Joiner và Commissioner. Trong các bài viết trước, chúng ta đã khám phá giao thức [Thread] và kết nối các thiết bị Thread với internet thông qua một Border Router. Việc tham gia vào mạng Thread thường yêu cầu cấu hình thủ công cho từng nút với một tập dữ liệu đầy đủ chứa thông tin đăng nhập mạng như PAN ID, Network Key, tên Mạng, và nhiều hơn nữa (tham khảo [Bước 6.1: Truy cập thông tin đăng nhập mạng]). Dù phương pháp này hoạt động hiệu quả, nhưng nó trở nên không thực tế khi phải cung cấp hàng trăm thiết bị Thread trong những tình huống thực tế.

Để cải thiện quy trình này, vai trò của Joiner và Commissioner được đề cao. **Nguyên lý hoạt động** giữa hai vai trò này rất quan trọng; Joiner sẽ kết nối và xác thực với Commissioner để gia nhập vào mạng mà không cần cấu hình thủ công cho từng thiết bị riêng lẻ. Điều này giúp tiết kiệm thời gian và nguồn lực đáng kể.

Hơn nữa, **cấu trúc dữ liệu** cũng đóng vai trò then chốt trong sự giao tiếp giữa Joiner và Commissioner bằng cách sử dụng các thông điệp đặc thù để truyền tải thông tin cần thiết cho quá trình xác thực. Qua đó, **chứng thực bảo mật** cũng được đảm bảo thông qua phương pháp mã hóa mạnh mẽ nhằm bảo vệ an toàn cho quá trình tham gia vào mạng.

Khi có nhiều thiết bị mới tham gia vào hệ thống, khả năng mở rộng của mạng là điều không thể thiếu. Nhờ vậy mà việc quản lý sẽ trở nên dễ dàng hơn cả về mặt kỹ thuật lẫn logistics khi thêm nhiều Joiner mới vào trong môi trường kết nối phức tạp như vậy. Những yếu tố này làm nổi bật rõ ràng hơn chức năng của cả hai vai trò trong hệ thống mạng Thread hiện đại.

Cách xây dựng firmware cho Joiner và Commissioner trên nRF52840

Để giải quyết thách thức này, giao thức Thread giới thiệu các khái niệm **Joiner** và **Commissioner**. Một nút Joiner có thể yêu cầu thông tin xác thực mạng, trong khi một nút Commissioner trong mạng có khả năng chấp thuận yêu cầu đó nếu Joiner cung cấp khóa chia sẻ trước (PSKd) hợp lệ cho thiết bị. Khi được phê duyệt, Joiner sẽ bắt đầu mạng Thread sử dụng các thông tin xác thực đã cung cấp. Trong hướng dẫn này, chúng ta sẽ cùng tìm hiểu quy trình thiết lập một Joiner và một Commissioner bằng cách sử dụng hai dongle nRF52840. Hãy cùng bắt đầu!

Giao thức Thread hoạt động dựa trên việc phân chia vai trò rõ ràng giữa các thiết bị trong mạng. Để tối ưu hóa hiệu suất, việc cấu hình đúng đắn rất quan trọng; điều này bao gồm cả việc lựa chọn phần cứng phù hợp như RAM và Flash cần thiết cho từng vai trò. Ví dụ, đối với vai trò Joiner, thường cần ít tài nguyên hơn so với Commissioner do không phải xử lý nhiều dữ liệu phức tạp.

Ngoài ra, có rất nhiều thư viện mã nguồn mở hỗ trợ phát triển firmware cho các thiết bị sử dụng giao thức Thread. Việc tùy chỉnh tham số kết nối cũng là yếu tố then chốt để nâng cao khả năng tương tác giữa các thiết bị trong mạng, giúp tạo ra môi trường hoạt động linh hoạt và hiệu quả hơn cho toàn bộ hệ thống.
Extended Perspectives Comparison:
Kết luậnMô tả
Vai trò JoinerJoiner là thiết bị yêu cầu tham gia vào mạng Thread và cần thông tin xác thực từ Commissioner.
Vai trò CommissionerCommissioner chấp nhận yêu cầu từ Joiner và cung cấp thông tin đăng nhập an toàn cho mạng.
Quy trình tham gia mạngJoiner sử dụng khóa chia sẻ trước (PSKd) để kết nối với Commissioner, giúp đơn giản hóa việc cấu hình.
Bảo mật dữ liệuGiao thức Thread sử dụng mã hóa AES để bảo vệ thông tin trong quá trình truyền tải giữa các thiết bị.
Khả năng mở rộngViệc quản lý nhiều thiết bị dễ dàng hơn khi có vai trò rõ ràng giữa Joiner và Commissioner, hỗ trợ mở rộng linh hoạt cho hệ thống IoT.

Quy trình flash firmware vào Dongle nRF52840

Trong bước đầu tiên này, chúng ta sẽ xây dựng một hình ảnh firmware OpenThread cho Dongle nRF52840, bao gồm cả chức năng Joiner và Commissioner. Việc này giúp đơn giản hóa quá trình bằng cách cho phép cùng một firmware có thể hoạt động như cả Joiner lẫn Commissioner. Tuy nhiên, điều này không được khuyến nghị cho các ứng dụng sản xuất vì các nút cần có firmware phù hợp với vai trò của chúng để tối ưu hóa việc sử dụng tài nguyên.

Để thực hiện điều này, bạn cần biên dịch firmware OpenThread với các tùy chọn Joiner_**(-DOT_JOINER=ON)**_ và Commissioner_**(-DOT_COMMISSIONER=ON)**_ được bật lên. Điều này sẽ đảm bảo rằng thiết bị của bạn có đầy đủ chức năng cần thiết để tham gia vào mạng lưới và quản lý các yêu cầu kết nối một cách hiệu quả nhất.

Khởi tạo mạng Thread với Dongle đầu tiên

kuldeep@PC1 % cd /opt/workspace/
kuldeep@PC1 % git clone --recursive https://github.com/openthread/ot-nrf528xx.git
kuldeep@PC1 % cd ot-nrf528xx
kuldeep@PC1 % rm -rf build
kuldeep@PC1 % script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON -DOT_BOOTLOADER=USB -DOT_THREAD_VERSION=1.2


Khởi tạo mạng Thread với Dongle đầu tiên Free Images


Bật chức năng Commissioner và thiết lập quy tắc tham gia

Để tạo ra tệp `ot-cli-ftd.hex`, bạn cần thực hiện một số bước nhất định. Trước tiên, hãy chắc chắn rằng bạn đã vào thư mục build và sử dụng lệnh `arm-none-eabi-objcopy` để chuyển đổi tệp nhị phân thành định dạng hex. Sau khi hoàn tất, danh sách các tệp trong thư mục sẽ xuất hiện với tệp `ot-cli-ftd.hex` nằm trong đó.

Tiếp theo là bước quan trọng: Cần flash firmware vào cả hai thiết bị nRF52840 Dongles. Để làm điều này, trước hết, hãy đưa nRF52840 Dongle vào chế độ DFU bằng cách nhấn nút nhỏ bên cạnh nút trắng trên thiết bị.

Khởi động Joiner và yêu cầu kết nối đến mạng Thread

Xác minh rằng đèn LED của Dongle ngừng nhấp nháy, điều này cho thấy quá trình flash đã thành công. ## Bước 3 - Khởi động mạng Thread Kết nối một Dongle với máy tính xách tay của bạn và mở một terminal để tương tác với nó. Xác định thiết bị USB. Sử dụng lệnh screen để truy cập vào thiết bị này. Khởi tạo một mạng Thread mới:

kuldeep@PC1 % ls /dev/tty
tty.Bluetooth-Incoming-Port%
tty.usbmodemDC700D1284971%
tty.debug-console%
kuldeep@PC1 % screen /dev/tty.usbmodemDC700D1284971 115200
> dataset init new
Done>
dataset Active
Timestamp: 1
Channel: 11
Wake-up Channel: 26
Channel Mask: 0x07fff800
Ext PAN ID: 110d02212607a964
Mesh Local Prefix: fd0d:6a27:1f52:2ed5::/64
Network Key: 575ae54e61e5375b82065e091abe99d3
Network Name: OpenThread-8290
PAN ID: 0x8290
PSKc: 51ee729aaa39dc8d3465675c9f6eb581
Security Policy: 672 onrc 0
Done>
dataset commit active
Done> ifconfig up
Done> thread start
Done


Như vậy, việc khởi động mạng Thread mới sẽ biến thiết bị này thành một leader sau một khoảng thời gian nhất định.

Cách xác nhận trạng thái kết nối của Joiner với mạng Thread

Để bắt đầu vai trò Ủy viên trên cùng một dongle, bạn cần kích hoạt vai trò này và cấu hình một quy tắc tham gia với khóa chia sẻ trước (PSKd). Sau khi khởi động Ủy viên, bạn sẽ thấy thông báo "Ủy viên: đã hoạt động". Tiếp theo, hãy thêm một quy tắc cho phép Joiner. Bạn có thể cho phép tất cả các Joiner bằng cách sử dụng ký tự đại diện `*` hoặc chỉ định EUI64 của một Joiner cụ thể (định danh IEEE EUI-64 được gán từ nhà máy) kèm theo PSKd. Ví dụ, nếu bạn dùng `*`, bất kỳ Joiner nào có PSKd là `KULD55P` đều có thể yêu cầu thông tin đăng nhập vào mạng.

Quá trình tham gia của Joiner vào mạng Thread

Bước 5— Khởi động Joiner: Kết nối dongle thứ hai với máy tính xách tay của bạn và mở một terminal mới, sau đó sử dụng lệnh `screen` để truy cập vào nó giống như ở Bước 3.

kuldeep@PC1 % screen /dev/tty.usbmodemFC2938E0438B1 115200
> ifconfig up
Done
> joiner start KULD55P
Done
> Join success


Ở phía commissioner, bạn sẽ thấy:

> commissioner joiner add * KULD55P
Done
> Commissioner: Joiner start 0ed58b6b7917a948
Commissioner: Joiner connect 0ed58b6b7917a948
Commissioner: Joiner finalize 0ed58b6b7917a948
Commissioner: Joiner end 0ed58b6b7917a948

Trong quá trình này, việc khởi động và kết nối giữa các thiết bị là rất quan trọng. Để đảm bảo rằng mọi thứ diễn ra suôn sẻ, hãy chắc chắn rằng cả hai dongle đều hoạt động tốt và được cấu hình chính xác trước khi tiến hành bước tiếp theo.
Quá trình tham gia của Joiner vào mạng Thread

Lợi ích của việc sử dụng Joiner và Commissioner trong triển khai thực tế

Sau khi Joiner quét các mạng Thread có sẵn, yêu cầu thông tin xác thực bằng PSKd và nhận được tập dữ liệu từ Commissioner, nó đã thiết lập tập dữ liệu của riêng mình. Tuy nhiên, vẫn chưa tham gia vào mạng lưới.

## Bước 6— Tham gia Mạng Thread
Trên nút Joiner, hãy khởi động mạng Thread và xác minh trạng thái cùng bảng định tuyến để đảm bảo:

> thread start
Hoàn tất > trạng thái
Đã xong > router
Bảng định tuyến | ID | RLOC16 | Điểm tiếp theo | Chi phí đường đi | LQ Vào | LQ Ra | Tuổi thọ | MAC mở rộng | Liên kết |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
| 18 | 0x4800 | 63 | 0 | 3 | 3 | 4 | 3e46e88954e007b2 | 1 |
| 51 | 0xcc00 | 63 | 0 | 0 | 0 | 0 | ead7413c3cf8debd | 0 |
Hoàn tất >


Trong quá trình này, việc sử dụng giao thức Thread giúp nâng cao tính bảo mật và khả năng kết nối giữa các thiết bị. Joiner phối hợp với Commissioner để thiết lập một mạng an toàn hơn qua mã hóa AES cho dữ liệu truyền tải. Điều này không chỉ giúp giữ bí mật thông tin mà còn tạo điều kiện thuận lợi cho việc mở rộng mạng khi thêm nhiều thiết bị mới vào hệ thống. Chúng ta cũng cần chú ý đến thời gian chờ kết nối để đảm bảo sự ổn định trong quá trình tham gia vào mạng lưới IoT này.

Kết luận về quy trình cấp phép và quản lý mạng Thread

Kết luận này làm nổi bật cách mà giao thức Thread đơn giản hóa việc cấp phát mạng thông qua việc sử dụng các vai trò Joiner và Commissioner. Thay vì phải cấu hình từng thiết bị với toàn bộ dữ liệu mạng, bạn chỉ cần chia sẻ một khóa bí mật đã được chia sẻ trước (PSKd) với Joiner. Commissioner sẽ đảm nhận việc phân phối an toàn các thông tin xác thực mạng, điều này giúp quy trình trở nên mở rộng hơn cho những triển khai lớn. Trong thực tế, Commissioner có thể là một nút trong mạng hoặc một thiết bị bên ngoài như ứng dụng di động. Commissioner sử dụng một thông tin đăng nhập tham gia riêng biệt (mật khẩu) và Khóa Bí Mật Đã Chia Sẻ cho Commissioner (PSKc) để kết nối với Router Biên và quản lý mạng.

Để nâng cao hiểu biết về quy trình này, chúng ta cũng có thể xem xét thêm các khía cạnh như nguyên lý hoạt động giữa Joiner và Commissioner, cùng với vai trò của chúng trong việc xác thực mỗi thiết bị; cũng như loại chip nRF52840 được sử dụng công nghệ nào để đảm bảo hiệu suất tối ưu trong môi trường IoT. Bên cạnh đó, các biện pháp bảo mật cần thiết để bảo vệ mạng Thread khỏi những mối đe dọa tiềm ẩn cũng là điều đáng lưu ý. Những yếu tố này sẽ góp phần làm phong phú thêm nội dung và giúp người đọc dễ dàng tiếp cận hơn với quy trình này.

Reference Articles

Xây dựng mạng Thread bằng các bảng nRF52840 và ...

Trong Lớp học lập trình này, bạn sẽ lập trình OpenThread trên phần cứng thực, tạo và quản lý mạng Thread và chuyển thông báo giữa các nút.

Source: OpenThread

Kevin Kelly

Expert

Related Discussions

❖ Related Articles