1. Giới thiệu
Thread & OTNS là gì
Luồng 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, giúp cho việc giao tiếp an toàn giữa các thiết bị với nhau. 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 một điểm lỗi.
OpenThread do Google phát hành là phương thức triển khai nguồn mở của Thread. Mặc dù kích thước mã và dung lượng bộ nhớ nhỏ, OpenThread hỗ trợ tất cả tính năng được xác định trong Đặc tả luồng.
Bạn có thể sử dụng Trình mô phỏng mạng OpenThread (OTNS) để mô phỏng mạng Thread bằng cách chạy các nút OpenThread mô phỏng trên các nền tảng posix. OTNS cung cấp giao diện web dễ sử dụng (OTNS-Web) để hình ảnh hóa và vận hành các mạng Luồng mô phỏng.
Kiến thức bạn sẽ học được
- Cài đặt OTNS và các phần phụ thuộc
- Xây dựng OpenThread cho OTNS
- Cách thêm/di chuyển/xoá nút trong OTNS-Web
- Sử dụng các tính năng hữu ích khác của OTNS-Web để vận hành mô phỏng mạng
- Xác minh lỗi OpenPoint không phải là điểm đơn
Lớp học lập trình này sẽ tập trung vào OTNS-CLI và OTNS-Web. Các tính năng khác của OTNS, chẳng hạn như tập lệnh Python, sẽ không được đề cập.
Những gì bạn cần
- Linux x86_64 hoặc Mac OS.
- Git.
- Tiếp cận phiên bản 1.13 trở lên.
- Trình duyệt web. OTNS-Web sử dụng trình duyệt web để hiển thị các kết quả mô phỏng.
- Câu lệnh luồng. Bạn cần phải có các khái niệm cơ bản về Chuỗi để hiểu nội dung được dạy trong Lớp học lập trình này.
2. Cài đặt
Cài đặt Go
OTNS yêu cầu phiên bản Go 1.13+ để xây dựng.
- Cài đặt Go từ https://golang.org/dl/
- Thêm
$(go env GOPATH)/bin
(thông thường là$HOME/go/bin
) vào$PATH
:
$ export PATH=$PATH:$(go env GOPATH)/bin
Nhận mã OTNS
$ git clone https://github.com/openthread/ot-ns.git ./otns $ cd otns
Cài đặt phần phụ thuộc
$ ./script/install-deps grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy
Bạn có thể được yêu cầu nhập mật khẩu cho sudo
.
Cài đặt otns
Cài đặt otns
thành $GOPATH/bin
:
$ ./script/install otns installed: /usr/local/google/home/simonlin/go/bin/otns
Hãy kiểm tra xem otns
đã được cài đặt đúng cách hay chưa
- Chạy
which otns
để kiểm tra xem có thể tìm kiếm được tệpotns
trong$PATH.
hay không - Nếu không tìm thấy lệnh
otns
, hãy xác minh rằng bạn đã thêm$(go env GOPATH)/bin
vào$PATH.
3. Xây dựng OpenThread cho OTNS
Nhận mã OpenThread từ GitHub
$ mkdir -p ~/src $ git clone https://github.com/openthread/openthread ~/src/openthread
Tạo OpenThread bằng OTNS=1
$ cd ~/src/openthread $ ./script/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999
Bạn có thể tìm thấy các tệp thực thi OpenThread trong thư mục build
:
$ ls ~/src/openthread/build/simulation/examples/apps/cli/ ot-cli-ftd ot-cli-mtd ot-cli-radio
Bây giờ, đã đến lúc chạy OTNS...
4. Chạy OTNS
Chạy otns
:
$ cd ~/src/openthread/build/simulation/examples/apps/cli $ otns > ← OTNS-CLI prompt
Khi bắt đầu thành công, OTNS sẽ nhập một bảng điều khiển CLI (OTNS-CLI
) và chạy một trình duyệt web để trực quan hoá và quản lý mạng (OTNS-Web
):
Nếu bạn chỉ thấy một trang trống cho OTNS-Web, thì rất có thể WebGL không được bật trong trình duyệt của bạn. Vui lòng tham khảohttps://superuser.com/a/836833 về cách bật WebGL.
Trong các phần sau, bạn sẽ tìm hiểu cách quản lý các mô phỏng OTNS thông qua OTNS-CLI
và OTNS-Web
.
5. Tìm hiểu về OTNS-CLI và OTNS-Web
OTNS – CLI
OTNS-CLI
cung cấp Giao diện dòng lệnh (CLI) để quản lý các hoạt động mô phỏng OTNS.
$ cd ~/src/openthread/build/simulation/examples/apps/cli $ otns > ← OTNS-CLI prompt
Bạn có thể nhập các lệnh thông qua OTNS-CLI
. Tham khảo tài liệu tham khảo OTNS CLI để biết danh sách đầy đủ các lệnh. Đừng lo, bạn sẽ chỉ sử dụng một vài lệnh trong số này trong Lớp học lập trình này.
OTNS-Web
OTNS-Web
là công cụ quản lý và trực quan hóa mạng của OTNS. Dữ liệu này cung cấp hình ảnh trực quan về các nút, thông báo và đường liên kết của Mạng luồng mô phỏng. Hãy lưu ý các phần tử khác nhau của OTNS-Web
:
6. Thêm nút
Thêm các nút thông qua OTNS-CLI
Thêm Bộ định tuyến tại vị trí (300, 100)
> add router x 300 y 100 1 Done
Bạn sẽ thấy một nút được tạo trong OTNS-Web
. Nút này bắt đầu dưới dạng Trình định tuyến và trở thành Lãnh đạo sau vài giây:
Thêm các nút khác thông qua OTNS-CLI
> add fed x 200 y 100 2 Done > add med x 400 y 100 3 Done > add sed x 300 y 200 4 Done
Đợi vài giây để các nút hợp nhất thành một phân vùng. Bạn sẽ thấy các nút trong OTNS-WEB
:
Thêm các nút theo OTNS-Web
Bạn cũng có thể thêm các nút thông qua OTNS-Web
. Nhấp vào nút New Router
của Action Bar
. Bạn sẽ thấy một nút đang được tạo ngay phía trên nút New Router
. Kéo nút đó đến gần nút Lãnh đạo mà bạn đã tạo thông qua OTNS-CLI
. Cuối cùng, tất cả các nút phải hợp nhất thành một phân vùng:
Ngoài ra, hãy nhấp vào các nút FED, MED và SED trên thanh thao tác để tạo các loại nút khác. Kéo chúng vào các vị trí gần các nút hiện có để đính kèm vào nút Thread đó:
Bây giờ, bạn đã tạo mạng Thread của một phân vùng chứa nhiều nút. Trong phần tiếp theo, chúng ta sẽ điều chỉnh tốc độ mô phỏng để mô phỏng chạy nhanh hơn.
7. Điều chỉnh tốc độ
Hiện tại, quá trình mô phỏng phải chạy ở tốc độ 1X
, tức là thời gian mô phỏng đã trôi qua tính giống với thời gian thực tế kể từ khi chúng ta tạo nút đầu tiên.
Điều chỉnh tốc độ qua OTNS-CLI
Bạn có thể điều chỉnh tốc độ mô phỏng thông qua OTNS-CLI
.
Đặt tốc độ mô phỏng thành 100X
> speed 100 Done
Bạn sẽ thấy các nút gửi thông báo thường xuyên hơn trước đây.
Đặt tốc độ mô phỏng thành MAX
> speed max Done
Bây giờ, OTNS đang cố gắng mô phỏng nhanh nhất có thể, vì vậy, bạn sẽ thấy các nút gửi số lượng lớn thư.
Tạm dừng mô phỏng
> speed 0 Done
Việc đặt tốc độ mô phỏng thành 0
sẽ tạm dừng quá trình mô phỏng.
Khôi phục mô phỏng ở tốc độ bình thường
> speed 1 Done
Việc mô phỏng tốc độ thành giá trị lớn hơn 0
sẽ tiếp tục mô phỏng.
Điều chỉnh tốc độ qua OTNS-Web
Nút điều khiển tốc độ
Tìm các nút điều khiển tốc độ trên
Action Bar
. Các nút hiển thị tốc độ mô phỏng hiện tại và có thể được dùng để điều chỉnh tốc độ mô phỏng và tạm dừng/tiếp tục mô phỏng.
Tăng tốc độ mô phỏng
Bạn có thể tăng tốc độ mô phỏng bằng cách nhấp vào nút cho đến khi tốc độ đạt
MAX
: .
Mô phỏng tốc độ chậm
Bạn có thể làm chậm quá trình mô phỏng bằng cách nhấp vào nút .
Tạm dừng mô phỏng
Nhấp vào nút để tạm dừng quá trình mô phỏng khi đang chạy. Nút này sẽ được đổi thành
.
Tiếp tục mô phỏng
Nhấp vào nút để tiếp tục quá trình mô phỏng khi mô phỏng bị tạm dừng. Nút này sẽ được đổi về
.
Đặt tốc độ mô phỏng thành 10X
Để tiết kiệm thời gian, hãy sử dụng
OTNS-CLI
để điều chỉnh tốc độ mô phỏng thành
10X
để chúng tôi có thể quan sát các thay đổi về cấu trúc liên kết trong mạng nhanh hơn nhiều.
> speed 10 Done
8. Bật/Tắt đài
Giờ đây, mô phỏng phải chứa 2 Router (hình lục giác) và nhiều thành phần con, và chạy ở tốc độ 10X.
Tìm Người lãnh đạo hiện tại (đường viền màu đỏ) của 2 Bộ định tuyến, nhấp một lần để chọn:
Tắt radio
Nhấp vào nút trên Thanh tác vụ để tắt đài của nút Lãnh đạo:
Nhà lãnh đạo sẽ không thể gửi hoặc nhận tin nhắn khi đài đang tắt.
Đợi khoảng 12 giây (120 giây trong thời gian mô phỏng) để Bộ định tuyến khác trở thành Trưởng nhóm mới:
Mạng chuỗi tự động khôi phục sau lỗi Lãnh đạo bằng cách tạo phân vùng mới với một Nhà lãnh đạo mới. Phân vùng mới cũng có màu phân vùng mới.
Bật radio
Chọn Lãnh đạo đã tắt đài. Nhấp vào nút trên
Action Bar
để khôi phục kết nối radio:
Nhà lãnh đạo phải kết nối lại với mạng sau khi kết nối đài được khôi phục.
9. Di chuyển nút
OTNS cho phép người dùng dễ dàng di chuyển các nút thông qua OTNS-CLI
hoặc OTNS-Web
.
Di chuyển nút qua OTNS-CLI
Di chuyển nút 5 đến một vị trí mới:
> move 5 600 300 Done
Vì nút 5 cách xa Bộ định tuyến khác, nên chúng sẽ mất kết nối với nhau và sau khoảng 12 giây (120 giây trong thời gian mô phỏng), cả hai đều trở thành những người dẫn đầu trong phân vùng của riêng họ:
Di chuyển nút thông qua OTNS-Web
Di chuyển nút 5 trở lại vị trí ban đầu bằng cách kéo. Hai phân vùng này cần hợp nhất trở lại thành một phân vùng:
10. Xóa nút
Xoá các nút thông qua OTNS-CLI
Xóa nút 8:
> del 8 Done
Nút 8 sẽ biến mất khỏi phần mô phỏng:
Xoá các nút thông qua OTNS-Web
Chọn nút 5 và nhấp vào nút trên
Action Bar
để xóa nút 5:
Node 1
phải trở thành Người lãnh đạo và Node 7
phải tách ra vì không thể tiếp cận bất kỳ Bộ định tuyến nào.
Xoá phần mô phỏng (xoá tất cả các nút)
Bạn có thể xoá hoạt động mô phỏng bằng cách xoá tất cả các nút thông qua OTNS-Web
.
Nhấp vào nút trên
Action Bar.
Tất cả các nút sẽ biến mất cùng một lúc.
Trước khi tiếp tục...
Bạn có thể tự thêm một số nút vào phần mô phỏng để có thể tiếp tục trong hướng dẫn này.
11. Ngữ cảnh nút OTNS-CLI
OTNS-CLI
cung cấp chế độ ngữ cảnh nút để dễ dàng tương tác với các nút nhằm giúp nhà phát triển chẩn đoán trạng thái của một nút.
Vào chế độ ngữ cảnh của nút
Nhập ngữ cảnh nút của nút 1:
> node 1 Done node 1>
Lời nhắc CLI thay đổi thành node 1>
, cho biết ngữ cảnh nút hiện tại. Bạn có thể nhập vào các lệnh OpenC CLI để thực thi trên nút như thể bạn đang tương tác trực tiếp với nút này.
Thực thi các lệnh trong ngữ cảnh nút
node 1> state leader Done node 1> channel 11 Done node 1> panid 0xface Done node 1> networkname OpenThread Done node 1> ipaddr fdde:ad00:beef:0:0:ff:fe00:fc00 fdde:ad00:beef:0:0:ff:fe00:d800 fdde:ad00:beef:0:2175:8a67:1000:6352 fe80:0:0:0:2075:82c2:e9e9:781d Done
Chuyển sang một ngữ cảnh nút khác
node 1> node 2 Done node 2>
Thoát ngữ cảnh nút
node 1> exit Done >
12. Xin chúc mừng
Xin chúc mừng, bạn đã thực hiện thành công mô phỏng OTNS đầu tiên của mình!
Bạn đã tìm hiểu cách cài đặt OTNS và các phần phụ thuộc. Bạn đã tạo OpenThread cho OTNS và bắt đầu mô phỏng OTNS bằng các phiên bản mô phỏng OpenThread. Bạn đã học cách thao tác mô phỏng theo nhiều cách thông qua cả OTNS-CLI
và OTNS-Web
.
Giờ đây, bạn đã biết OTNS là gì và cách sử dụng OTNS để mô phỏng các mạng OpenThread.
Tiếp theo là gì?
Hãy xem một số lớp học lập trình này...
- Mô phỏng Mạng luồng bằng OpenThread
- Mô phỏng Mạng Thread bằng OpenThread trong Docker
- Xây dựng mạng Luồng bằng bảng nRF52840 và OpenThread