Mô phỏng mạng luồng bằng OTNS

1. Giới thiệu

5abd22afa2f2ee9a.png.

Luồng và OTNS là gì

Thread là giao thức nối 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 an toàn giữa thiết bị và thiết bị với đám mây. Mạng luồng có thể thích ứng với sự thay đổi của cấu trúc liên kết để tránh lỗi một điểm.

OpenThread do Google phát hành là một 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ả các tính năng được xác định trong Đặc tả luồng.

Bạn có thể sử dụng OpenThread Network Simulator (OTNS) để mô phỏng mạng Thread bằng cách chạy các nút OpenThread mô phỏng trên nền tảng posix. OTNS cung cấp giao diện Web (OTNS-Web) dễ sử dụng để trực quan hoá và vận hành các mạng Thread được 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 của OTNS
  • Xây dựng OpenThread cho OTNS
  • Cách thêm/di chuyển/xóa 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 điểm không lỗi duy nhất của OpenThread

Lớp học lập trình này 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, không được đề cập.

Bạn cần có

  • Linux x86_64 hoặc Mac OS.
  • Git.
  • 1.13 trở lên.
  • Trình duyệt web. OTNS-Web sử dụng trình duyệt web để hiển thị mô phỏng.
  • Luồng Primer. Bạn cần nắm được các khái niệm cơ bản về luồng để 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 cần có phiên bản Go 1.13+ để xây dựng.

  1. Cài đặt Go từ https://golang.org/dl/
  2. Thêm $(go env GOPATH)/bin (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 cho $GOPATH/bin:

$ ./script/install
otns installed: /usr/local/google/home/simonlin/go/bin/otns

Hãy kiểm tra xem bạn đã cài đặt otns đúng cách hay chưa

  1. Chạy which otns để kiểm tra xem tệp thực thi otns có thể tìm kiếm được trong $PATH. hay không
  2. 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ờ là 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 khởi động 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 hóa và quản lý mạng (OTNS-Web):

a0e05178d66929b1.png.

Nếu bạn chỉ có thể xem một trang trống dành cho OTNS-Web, thì có thể WebGL chưa được bật trong trình duyệt của bạn. Vui lòng tham khảohttps://superuser.com/a/836833 cách bật WebGL.

Trong các phần sau, bạn sẽ tìm hiểu cách quản lý mô phỏng OTNS thông qua OTNS-CLIOTNS-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 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. Hãy 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 chỉ cần sử dụng một vài lệnh trong số này trong Lớp học lập trình.

OTNS-Web

OTNS-Web là công cụ quản lý và trực quan hóa mạng của OTNS. Thư viện này cung cấp bản trình bày trực quan về các nút, thông báo và liên kết của mạng Luồng mô phỏng. Hãy lưu ý các thành phần khác nhau của OTNS-Web:

4c5b43509a2ca0d0.png.

6. Thêm nút

Thêm nút thông qua OTNS-CLI

Thêm bộ định tuyến ở 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 bắt đầu như một Bộ định tuyến và trở thành Thủ lĩnh trong vài giây:

6ca8c2e63ed9818d.png.

Thêm nhiều nút hơn 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

Chờ 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 này trong OTNS-WEB:

3ee67903c01aa612.png

Thêm nút muộn nhất vào OTNS-Web

Bạn cũng có thể thêm 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 Lãnh đạo mà bạn đã tạo thông qua OTNS-CLI. Cuối cùng, tất cả các nút sẽ hợp nhất thành một phân vùng:

420258bb92561146.png.

Đồng thời nhấp vào nút FED, MED và SED trên Thanh tác vụ để tạo các loại nút khác. Kéo các nút vào vị trí gần các nút hiện tại để đính kèm vào mạng Chuỗi:

fe15d6f9726a099e.png

Bây giờ, bạn đã tạo một mạng Thread (mạng riêng) gồm 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 nên chạy ở tốc độ 1X, có nghĩa là thời gian mô phỏng tính đến thời điểm này giống với thời gian thực tế kể từ khi chúng tôi 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ư thường xuyên hơn nhiều so với trước đây.

Đặt tốc độ mô phỏng thành MAX

> speed max
Done

Hiện tại, OTNS đang cố gắng mô phỏng tốt nhất có thể, vì vậy bạn sẽ thấy các nút gửi một số lượng lớn các thông điệp.

Tạm dừng mô phỏng

> speed 0
Done

Việc mô phỏng tốc độ thành 0 sẽ tạm dừng hoạt động mô phỏng.

Khôi phục tốc độ mô phỏng ở tốc độ bình thường

> speed 1
Done

Việc mô phỏng tốc độ mô phỏng thành một giá trị lớn hơn 0 sẽ tiếp tục hoạt động 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 độ 9329157c1bd12672.png. trên Action Bar. Các nút này cho thấy tốc độ mô phỏng hiện tại và có thể dùng để điều chỉnh tốc độ mô phỏng, đồng thời tạm dừng/tiếp tục hoạt động 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 39b88331779277ad.png. cho đến khi tốc độ đạt MAX: f5f460b2586d299b.png.

Mô phỏng hoạt động 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 31cca8d5b52fa900.png..

Tạm dừng mô phỏng

Nhấp vào nút 46cc2088c9aa7ab6.png. để tạm dừng mô phỏng khi mô phỏng đang chạy. Nút này sẽ đổi thành ce25eda3496ffcd4.png.

Tiếp tục mô phỏng

Nhấp vào nút ce25eda3496ffcd4.png để tiếp tục hoạt động mô phỏng khi tạm dừng. Nút này sẽ được đổi thành 46cc2088c9aa7ab6.png..

Đặ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 tô pô trong mạng nhanh hơn.

> speed 10
Done

8. Bật/Tắt radio

Bây giờ, mô phỏng sẽ chứa 2 Bộ định tuyến (hình lục giác) và nhiều phần tử con, và chạy với 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:

8c6a2e191cdae0c7.png.

Tắt radio

Nhấp vào nút 7ca085f470491dd4.png. trên Thanh tác vụ để tắt radio của nút Thủ lĩnh:

a3bf58d9d125f95f.png.

Người lãnh đạo sẽ không thể gửi hoặc nhận tin nhắn khi radio đang tắt.

Chờ 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:

e3d32f85c4a1b990.png.

Mạng Thread tự động khôi phục sau sự cố Lãnh đạo bằng cách hình thành một phân vùng mới với một Thủ lĩnh 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 có vô tuyến bị tắt. Nhấp vào nút 2d9cecb8612b42aa.png. trên Action Bar để khôi phục kết nối radio:

7370a7841861aa3a.png

Người lãnh đạo nên kết nối lại với mạng sau khi kết nối lại qua radio.

9. Di chuyển các nút

OTNS cho phép người dùng di chuyển nút một cách dễ dàng qua OTNS-CLI hoặc OTNS-Web.

Di chuyển nút qua OTNS-CLI

Di chuyển nút 5 đến vị trí mới:

> move 5 600 300
Done

Vì bây giờ nút 5 cách xa Bộ định tuyến khác, 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 Người dẫn đầu phân vùng của riêng họ:

c06b4d0a4f183299.png.

Di chuyển nút 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 sẽ hợp nhất lại thành một phân vùng:

9ba305c4c5a5f892.png.

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 bản mô phỏng:

18156770d9f8bf83.png.

Xoá các nút thông qua OTNS-Web

Chọn nút 5 và nhấp vào nút 7ff6afd565f4eafc.png trên Action Bar để xóa nút 5:

d4079cceea0105f0.png.

Node 1 sẽ trở thành Người lãnh đạo và Node 7 nên tách khỏi vì không thể kết nối với bất kỳ Bộ định tuyến nào.

Xóa mô phỏng (xóa 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 89618191721e79a0.png. trên Action Bar. Tất cả các nút sẽ biến mất ngay lập tức.

Trước khi tiếp tục...

Tự thêm một số nút vào mô phỏng để bạn 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 nút.

Vào chế độ ngữ cảnh 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 lệnh OpenLI CLI để được thực thi trên nút như thể bạn đang tương tác trực tiếp với nút.

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 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 của OTNS. 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 đã tìm hiểu cách thao tác với phần mô phỏng theo nhiều cách thông qua cả OTNS-CLIOTNS-Web.

Bây giờ, bạn đã biết OTNS là gì và cách bạn có thể sử dụng OTNS để mô phỏng mạng OpenThread.

Tiếp theo là gì?

Hãy xem một số lớp học lập trình này...

Tài liệu tham khảo