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

1. Giới thiệu

5abd22afa2f2ee9a.pngS

Thread &là gì OTNS (nhiều thời điểm)

Thread là một giao thức mạng lưới không dây 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 các thiết bị và giữa các thiết bị. Mạng Thread có thể thích ứng với những 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à một cách triển khai nguồn mở của Thread. Mặc dù có kích thước mã và mức sử dụng bộ nhớ nhỏ, nhưng OpenThread hỗ trợ tất cả tính năng được xác định trong Thông số kỹ thuậ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 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 mạng Thread 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
  • Tạo 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 điểm không thành công 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.
  • Chuyển sang 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 mô phỏng.
  • Cẩm nang chủ đề. Bạn sẽ cần phải biết các khái niệm cơ bản về Thread để 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 trở lên để 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 ứng dụng không dây

Cài đặt otns vào $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

  1. Chạy which otns để kiểm tra xem tệp thực thi otns có 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. Tạo OpenThread cho OTNS

Tải 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 khởi động thành công, OTNS sẽ vào bảng điều khiển CLI (OTNS-CLI) và khởi chạy một trình duyệt web để trực quan hoá và quản lý mạng (OTNS-Web):

a0e05178d66929b1.png

Nếu bạn chỉ thấy một trang trống cho OTNS-Web, thì có khả năng 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 để biết 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 công cụ mô phỏng OTNS thông qua OTNS-CLIOTNS-Web.

5. Làm quen với OTNS-CLI và Web OTNS

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. Hãy tham khảo tài liệu tham khảo về CLI của OTNS để 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ố các lệnh này trong Lớp học lập trình này.

Web OTNS

OTNS-Web là công cụ quản lý và trực quan hoá mạng của OTNS. Thành phần này trình bày trực quan các nút, thông báo và đường liên kết của mạng Thread mô phỏng. Lưu ý các phần tử khác nhau của OTNS-Web:

4c5b43509a2ca0d0.pngS

6. Thêm nút

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

6ca8c2e63ed9818d.png.

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 vào một phân vùng. Bạn sẽ thấy các nút trong OTNS-WEB:

3ee67903c01aa612.pngS

Thêm nút muộn nhất là vào 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 được tạo ngay phía trên nút New Router. Kéo nút đó đến gần Người lãnh đạo mà bạn đã tạo thông qua OTNS-CLI. Tất cả các nút cuối cùng sẽ hợp nhất thành một phân vùng:

420258bb92561146.pngS

Đồng thời, nhấp vào các 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 này vào vị trí gần các nút hiện có để đính kèm vào mạng Thread đó:

fe15d6f9726a099e.png

Bây giờ, bạn đã tạo mạng Thread 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 để chạy quá trình mô phỏng 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, nghĩa là thời gian mô phỏng đã trôi qua cho đến thời điểm này 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 độ thông 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 này 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

Hiện tại, 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 rất nhiều thông báo.

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

Thao tác đặt tốc độ mô phỏng thành một giá trị lớn hơn 0 sẽ tiếp tục quá trình mô phỏng.

Điều chỉnh tốc độ thông qua OTNS-Web

Nút điều chỉnh tốc độ

Tìm các nút điều chỉnh tốc độ 9329157c1bd12672.pngs trên Action Bar. Các nút hiển thị tốc độ mô phỏng hiện tại và có thể dùng để điều chỉnh tốc độ mô phỏng cũng như tạm dừng/tiếp tục quá trình 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.pngS cho đến khi tốc độ đạt MAX: f5f460b2586d299b.png.

Mô phỏng chức năng giảm tốc độ

Bạn có thể giảm tốc độ mô phỏng bằng cách nhấp vào nút 31cca8d5b52fa900.pngS.

Tạm dừng mô phỏng

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

Tiếp tục mô phỏng

Nhấp vào nút ce25eda3496ffcd4.png để tiếp tục quá trình mô phỏng khi chương trình này tạm dừng. Nút này sẽ được chuyển về 46cc2088c9aa7ab6.pngS.

Đặ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 ta có thể quan sát những 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

Bây giờ, mô phỏng sẽ chứa 2 Bộ định tuyến (hình lục giác) và nhiều con, đồng thời chạy ở tốc độ 10X.

Tìm Leader hiện tại (đường viền màu đỏ) của 2 Bộ định tuyến, nhấp một lần để chọn Đường viền đó:

8c6a2e191cdae0c7.png.

Tắt radio

Nhấp vào nút 7ca085f470491dd4.png. trên Thanh thao tác để tắt đài của nút Lãnh đạo:

a3bf58d9d125f95f.png

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

Đợi khoảng 12s (120s trong thời gian mô phỏng) để Router khác trở thành Leader mới:

e3d32f85c4a1b990.png

Mạng Thread tự động khôi phục từ lỗi của Leader bằng cách tạo một phân vùng mới với một Leader mới. Phân vùng mới cũng có màu phân vùng mới.

Bật radio

Chọn Người lãnh đạo có đài đã 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.pngS

Người lãnh đạo phải kết nối lại với mạng sau khi kết nối vô tuyến được khôi phục.

9. Di chuyển nút

OTNS cho phép người dùng di chuyển các nút dễ dàng thô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 Lãnh đạo của 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 phải hợp nhất lại thành một phân vùng:

9ba305c4c5a5f892.pngS

10. Xoá nút

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

Xoá nút 8:

> del 8
Done

Nút 8 sẽ biến mất khỏi quá trình mô phỏng:

18156770d9f8bf83.pngs

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

Chọn nút 5 rồi nhấp vào nút 7ff6afd565f4eAAP.png trên Action Bar để xoá nút 5:

d4079cceea0105f0.png

Node 1 sẽ trở thành Leader và Node 7 phải được tách ra vì nó không thể tiếp cận bất kỳ Bộ định tuyến nào.

Xoá hoạt động mô phỏng (xoá tất cả các nút)

Bạn có thể xoá phiên 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.pngS 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...

Hãy tự thêm một số nút vào phần mô phỏng để có thể tiếp tục xem hướng dẫn này.

11. Bối 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 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 các lệnh OpenThread 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 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 bối cảnh nút

node 1> exit
Done
>

12. Xin chúc mừng

Xin chúc mừng, bạn đã thực thi thành công phiên 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 thực thể mô phỏng OpenThread. Bạn đã tìm hiểu cách thao tác trong quá trình mô phỏng theo nhiều cách thông qua cả OTNS-CLIOTNS-Web.

Giờ đây, bạn đã biết OTNS là gì và cách 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