1. 简介
什么是 Thread 和 OTNS
Thread 是基于 IP 的低功耗无线网状网络协议,支持设备到设备和设备到云的安全通信。线程网络可以适应拓扑变化,以避免单点故障。
Google 发布的 OpenThread 是 Thread 的开源实现。尽管线程大小和内存占用量较小,但 OpenThread 支持线程规范中定义的所有功能。
OpenThread Network Simulator (OTNS) 可通过在 posix 平台上运行模拟的 OpenThread 节点来模拟 Thread 网络。OTNS 提供了一个易于使用的网页界面 (OTNS-Web),用于直观呈现和运行模拟 Thread 网络。
学习内容
- 安装 OTNS 及其依赖项
- 构建适用于 OTNS 的 OpenThread
- 如何在 OTNS-Web 中添加/移动/删除节点
- 使用 OTNS-Web 的其他实用功能来运行网络模拟
- 验证 OpenThread 的无单点故障
本 Codelab 主要介绍 OTNS-CLI 和 OTNS-Web。OTNS 的其他功能(例如 Python 脚本)不在涵盖范围内。
所需条件
- Linux x86_64 或 Mac OS。
- Git:
- Go 1.13 及更高版本。
- 网络浏览器。OTNS-Web 使用网络浏览器来显示模拟结果。
- Thread Primer。您需要了解 Thread 的基本概念,理解此 Codelab 中所教的内容。
2. 安装
安装 Go
OTNS 需要 Go 1.13 及更高版本才能构建。
- 通过 https://golang.org/dl/ 安装 Go
- 将
$(go env GOPATH)/bin
(通常是$HOME/go/bin
)添加到$PATH
:
$ export PATH=$PATH:$(go env GOPATH)/bin
获取 OTNS 代码
$ git clone https://github.com/openthread/ot-ns.git ./otns $ cd otns
安装依赖项
$ ./script/install-deps grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy
系统可能会要求您输入“sudo
”的密码。
安装 OTT 服务
将 otns
安装到 $GOPATH/bin
:
$ ./script/install otns installed: /usr/local/google/home/simonlin/go/bin/otns
检查 otns
是否已正确安装
- 运行
which otns
以检查$PATH.
中的otns
可执行文件是否可搜索 - 如果找不到
otns
命令,请确认您是否已将$(go env GOPATH)/bin
添加到$PATH.
3. 构建适用于 OTNS 的 OpenThread
从 GitHub 获取 OpenThread 代码
$ mkdir -p ~/src $ git clone https://github.com/openthread/openthread ~/src/openthread
使用 OTNS=1
构建 OpenThread
$ 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
您可以在 build
目录中找到 OpenThread 可执行文件:
$ ls ~/src/openthread/build/simulation/examples/apps/cli/ ot-cli-ftd ot-cli-mtd ot-cli-radio
现在该运行 OTNS...
4. 运行 OTNS
运行 otns
:
$ cd ~/src/openthread/build/simulation/examples/apps/cli $ otns > ← OTNS-CLI prompt
成功启动后,OTNS 会进入 CLI 控制台 (OTNS-CLI
) 并启动网络浏览器以进行网络可视化和管理(OTNS-Web
):
如果您只能看到 OTNS-Web 的空白页面,可能是因为您的浏览器未启用 WebGL。请参阅https://superuser.com/a/836833 ,了解如何启用 WebGL。
在接下来的部分中,您将学习如何通过 OTNS-CLI
和 OTNS-Web
管理 OTNS 模拟。
5. 了解 OTNS-CLI 和 OTNS-Web
OTNS CLI
OTNS-CLI
提供用于管理 OTNS 模拟的命令行界面 (CLI)。
$ cd ~/src/openthread/build/simulation/examples/apps/cli $ otns > ← OTNS-CLI prompt
您可以通过 OTNS-CLI
输入命令。如需查看完整的命令列表,请参阅 OTNS CLI 参考文档。别担心,您只会在此 Codelab 中使用其中的几个命令。
OTNS - 网页
OTNS-Web
是 OTNS 的网络可视化和管理工具。它提供了模拟 Thread 网络的节点、消息和链接的直观表示。请注意 OTNS-Web
的各种元素:
6. 添加节点
通过 OTNS-CLI 添加节点
在位置添加一个路由器(300、100)
> add router x 300 y 100 1 Done
您应该会看到在 OTNS-Web
中创建的节点。节点在一开始会变成路由器,并在几秒钟内成为主要副本:
通过 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
等待几秒钟时间,让节点合并到一个分区。您应该会看到 OTNS-WEB
中的节点:
请在 OTNS-Web
之前添加节点
您还可以通过 OTNS-Web
添加节点。点击 Action Bar
的 New Router
按钮。您应该会在 New Router
按钮的正上方看到正在创建的节点。将节点拖到您通过 OTNS-CLI
创建的 Leader 附近。所有节点最终都应合并到一个分区中:
此外,点击操作栏上的 FED、MED 和 SED 按钮以创建其他类型的节点。将它们拖动到现有节点附近的位置,以将它们附加到该 Thread 网络:
现在,您已创建一个含有多个节点的分区的 Thread 网络。在下一部分中,我们将调整模拟速度,以使模拟运行更快。
7. 调整速度
目前,模拟应以 1X
的速度运行,这意味着到目前为止模拟的进度与自创建第一个节点以来的实际时间相同。
通过 OTNS-CLI
调整速度
您可以通过 OTNS-CLI
调整模拟速度。
将模拟速度设为 100X
> speed 100 Done
您应该会看到节点发送消息的频率比以前高得多。
将模拟速度设为 MAX
> speed max Done
OTNS 正尝试尽快模拟,因此您应该会看到发送大量消息的节点。
暂停模拟
> speed 0 Done
将模拟速度设置为 0
会暂停模拟。
以正常速度恢复模拟
> speed 1 Done
将模拟速度设置为大于 0
的值会恢复模拟。
通过 OTNS-Web
调整速度
速度控制按钮
在Action Bar
上找到速度控制按钮 。这些按钮用于显示当前的模拟速度,并且可用于调整模拟速度以及暂停/恢复模拟。
加速模拟
您可以点击 按钮加快模拟速度,直到速度达到 MAX
:。
减速模拟
您可以点击 按钮,减慢模拟速度。
暂停模拟
点击 按钮可暂停模拟运行时。该按钮将更改为。
继续模拟
点击 按钮可在模拟暂停时恢复模拟。该按钮将恢复为 。
将模拟速度设为 10X
为了节省时间,请使用
OTNS-CLI
,以将模拟速度调整为
10X
,以便我们能够更快地观察网络中的拓扑变化。
> speed 10 Done
8. 打开/关闭电台
现在,该模拟应包含 2 个路由器(六边形)和多个子节点,并以 10 倍的速度运行。
找到 2 个路由器的当前领先者(红色边框),点击一下即可选择:
关闭无线通信
点击操作栏中的 按钮可关闭主要节点的无线装置:
领先者将无法在关闭无线装置的情况下收发消息。
等待大约 12 秒(模拟时间 120 秒)等待另一台路由器成为新的 Leader:
Thread 网络通过与新的 Leader 建立新分区,自动从 Leader 故障中恢复。新分区也采用了新的分区颜色。
打开无线通信
选择无线装置已关闭的领先变体。点击 Action Bar
上的 按钮以恢复无线装置连接:
主要副本应在无线装置连接恢复后重新连接到网络。
9. 移动节点
OTNS 可让用户通过 OTNS-CLI
或 OTNS-Web
轻松移动节点。
通过 OTNS-CLI
移动节点
将节点 5 移动到新位置:
> move 5 600 300 Done
由于节点 5 离另一个路由器很远,因此节点 5 应该彼此失去连接,并在大约 12 秒(模拟时间 120 秒)后成为各自的分区的领先者:
通过 OTNS-Web 移动节点
通过拖动节点 5 将其移回原始位置。这两个分区应合并成一个分区:
10. 删除节点
通过 OTNS-CLI
删除节点
删除节点 8:
> del 8 Done
节点 8 应该会从模拟中消失:
通过 OTNS-Web
删除节点
选择节点 5,然后点击 Action Bar
上的 按钮以删除节点 5:
Node 1
应成为主要副本,而 Node 7
应分离,因为它无法连接到任何路由器。
清除模拟(删除所有节点)
您可以通过 OTNS-Web
删除所有节点来清除模拟。
点击“Action Bar.
”上的“”按钮。所有节点都会立即消失。
在继续之前...
您可以自行向模拟添加一些节点,以便继续学习本教程。
11. OTNS-CLI 节点上下文
OTNS-CLI
提供节点上下文模式,可与节点轻松交互,以帮助开发者诊断节点状态。
进入节点上下文模式
输入节点 1 的节点上下文:
> node 1 Done node 1>
CLI 提示已更改为 node 1>
,指示当前节点上下文。您可以输入要在该节点上执行的 OpenThread CLI 命令,就像直接与节点交互一样。
在节点上下文中执行命令
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
切换到另一个节点上下文
node 1> node 2 Done node 2>
退出节点上下文
node 1> exit Done >
12. 恭喜
恭喜,您已成功执行自己的第一个 OTNS 模拟!
您已了解如何安装 OTNS 及其依赖项。您针对 OTNS 构建了 OpenThread,并使用 OpenThread 模拟实例启动了 OTNS 模拟。您学习了如何通过 OTNS-CLI
和 OTNS-Web
以各种方式操纵模拟。
现在,您已了解什么是 OTNS,以及如何使用 OTNS 来模拟 OpenThread 网络。
后续操作
查看下列 Codelab…