跳转到内容

OpenThread — IPv6 over 802.15.4 mesh 的开源 Thread 实现

待复核

OpenThread 是 Google 开源的 Thread 协议栈实现:它让一群低功耗小设备,用 IPv6 在 802.15.4 无线网里自动组网。

日常类比:如果 Wi-Fi 像家里的主路由器,所有设备都挤着找它;Thread 更像小区里的互助快递柜,包裹可以经过邻居设备一站一站转到目的地。

这里的“包裹”就是 IP 数据包,“邻居设备”就是灯泡、传感器、门锁这类嵌入式节点。

OpenThread 不负责做你的应用界面,也不负责定义灯泡该怎么开关;它负责更底层的事:发现邻居、加密通信、选路、维护 mesh、给设备分 IPv6 地址。

一句话记住:OpenThread 是 Thread 1.3 时代最重要的开源参考实现之一,目标是把“低功耗 mesh”做成能接入 IP 世界的基础设施。

不理解 OpenThread,下面这些事会很难解释:

  • 为什么 Matter 智能家居里经常同时出现 Wi-Fi、Thread、Border Router 这几个词。
  • 为什么一个传感器可以睡很久、省电,却醒来后仍然能回到同一个 mesh 网络。
  • 为什么 Thread 设备不是“连上某个中心路由器”,而是会有 Leader、Router、Child 这些角色。
  • 为什么很多芯片厂 SDK 不是自己重写 Thread,而是把 OpenThread 移植到自己的无线芯片上。
  1. Thread 是低功耗设备的 IPv6 小路网。类比:不是每家都修高速,而是在社区里铺窄路,够小车通行就行。OpenThread 把 IPv6、6LoWPAN、802.15.4 MAC 安全、Mesh Link Establishment 和路由这些层拼在一起。

  2. mesh 的重点是自修复。类比:一条小路施工封了,快递员会绕另一条路。Thread Router 会维护邻居和路由,某个节点掉线后,网络会重新选择可走路径。

  3. Border Router 是通向外部网络的门卫。类比:小区内部道路能互通,但要去城市主干道,需要小区门口。OpenThread Border Router 把 Thread mesh 接到 Wi-Fi 或以太网,让低功耗设备能跟外部 IP 网络通信。

案例 1:用 Docker 模拟两个 Thread 节点

Section titled “案例 1:用 Docker 模拟两个 Thread 节点”

开发者没有硬件时,可以先用官方 Docker 环境跑两个模拟节点:

Terminal window
docker pull openthread/environment:latest
docker run --name codelab_otsim_ctnr -it --rm \
--sysctl net.ipv6.conf.all.disable_ipv6=0 \
--cap-add=net_admin openthread/environment bash
/openthread/build/examples/apps/cli/ot-cli-ftd 1

在另一个终端进入同一容器,启动第二个节点:

Terminal window
docker exec -it codelab_otsim_ctnr bash
/openthread/build/examples/apps/cli/ot-cli-ftd 2

逐部分解释:

  • openthread/environment 是官方准备好的构建和模拟环境,不用先在本机装完整工具链。
  • ot-cli-ftd 1ot-cli-ftd 2 代表两个 Full Thread Device,数字用于区分模拟无线端点。
  • 这个案例真实用于学习 CLI、复现协议行为、跑最小网络实验。

案例 2:在 nRF52840 真板上创建 Thread 网络

Section titled “案例 2:在 nRF52840 真板上创建 Thread 网络”

硬件 codelab 会把 OpenThread CLI 烧到 nRF52840 开发板,然后在一个板子上创建网络:

> dataset init new
Done
> dataset commit active
Done
> ifconfig up
Done
> thread start
Done
> state
leader
Done

逐部分解释:

  • dataset init new 生成一套网络配置,里面有频道、PAN ID、网络名、Network Key 等。
  • dataset commit active 把配置设为当前网络真正使用的配置。
  • ifconfig up 打开 IPv6 接口,thread start 才启动 Thread 协议栈。
  • state leader 表示这块板子成了 mesh 的协调者,其他设备可以扫描并加入。

案例 3:用 OTBR 把 Thread 接到 Wi-Fi 或以太网

Section titled “案例 3:用 OTBR 把 Thread 接到 Wi-Fi 或以太网”

家庭或实验室里,常见做法是用一块 Linux 主机加一个 RCP 无线模块跑 OpenThread Border Router:

Terminal window
docker pull openthread/border-router:latest
printf '%s\n' \
'OT_RCP_DEVICE=spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000' \
'OT_INFRA_IF=wlan0' \
'OT_THREAD_IF=wpan0' \
'OT_LOG_LEVEL=7' > otbr-env.list
docker run --name=otbr --detach --network=host --cap-add=NET_ADMIN \
--device=/dev/ttyACM0 --device=/dev/net/tun \
--volume=/var/lib/otbr:/data --env-file=otbr-env.list \
--restart=always openthread/border-router

逐部分解释:

  • OT_RCP_DEVICE 指向无线协处理器,常见是 USB 串口形式的 802.15.4 radio。
  • OT_INFRA_IF 是外部网络接口,比如 Wi-Fi 的 wlan0 或以太网的 eth0
  • --network=hostNET_ADMIN 让容器能真正配置主机网络和路由。
  • 这个案例真实用于智能家居网关、Matter over Thread 实验和厂商认证前的联调。
  1. 把 Thread 当 Wi-Fi 用:Thread 面向低功耗、小包、mesh,不适合大吞吐视频或文件传输。

  2. 随便改 dataset:生产网络里不能让普通节点乱改 Operational Dataset,正确入口通常是 Commissioner。

  3. 忘了 Border Router:Thread 节点彼此能通信,不代表它们天然能访问外部 IP 网络。

  4. 混淆 RCP 和 NCP:RCP 把大部分协议栈放在主机,NCP 把 Thread 功能更多放在无线 SoC,调试和功耗取舍不同。

适用

  • 智能家居里的灯、门锁、温湿度传感器、插座等低功耗设备。
  • 商业建筑里的传感器网络,需要自组网、加密、低维护成本。
  • 芯片厂或设备厂要做 Thread 认证、Matter over Thread 联调、协议栈移植。
  • 教学和测试环境,需要用 CLI、Docker、模拟器快速复现 mesh 行为。

不适用

  • 摄像头、音箱、网关主业务这类需要高带宽的设备,通常更适合 Wi-Fi 或以太网。
  • 只需要一对一蓝牙连接、没有 mesh 和 IP 需求的极简外设。
  • 不愿处理认证、密钥、Border Router、固件升级的临时玩具项目。
  • 对实时大流量有强要求的场景,802.15.4 的带宽不是为这个设计的。

Zigbee 和 Thread 都常跑在 802.15.4 radio 上,但它们的网络层思路不同。

Zigbee 更像一套自成体系的社区规则;Thread 更强调 IPv6,所以更容易进入现有 IP 网络世界。

Matter 是更上层的应用互通标准,关心“灯泡开关、门锁状态、设备配对”这些语义;Thread 可以作为 Matter 的一种底层网络承载。

所以常见组合是:Matter 规定设备怎么说话,Thread 提供低功耗 mesh 路,OpenThread 是这条路的一套开源工程实现。

  • 2014 年左右:Thread Group 推出 Thread,目标是给低功耗家庭设备一个基于 IP 的 mesh 网络。
  • 2016 年:Google 发布 OpenThread,把 Nest 设备使用的 Thread 技术开放给更多开发者。
  • 2020 年前后:Nordic、Silicon Labs、TI 等芯片生态陆续把 OpenThread 放进自己的 SDK 或认证路径。
  • 2022-2023 年:Matter 普及后,Thread 作为低功耗智能家居网络重新被大量开发者认识。
  • 今天:OpenThread 继续服务于参考实现、芯片移植、Border Router、测试和认证工具链。
  1. OpenThread 的核心价值不是“无线传输”,而是“低功耗设备也能讲 IP”
  2. Thread mesh 的稳定来自角色分工:Leader 负责协调,Router 负责转发,Child 可以省电休眠。
  3. Border Router 是理解 Thread 的关键:没有它,mesh 更像一个封闭小区;有它,才接上外部网络。
  4. 开源协议栈的价值在生态:芯片厂、网关、测试工具和应用框架都能围绕同一套实现对齐。
  • ipv6 —— Thread 选择用 IPv6 做低功耗 mesh 的共同语言。
  • 6lowpan —— 把 IPv6 压缩到 802.15.4 小帧里的关键技术。
  • matter —— 设备语义在 Matter,上网小路常由 Thread 提供。
  • zephyr —— 很多嵌入式板卡会通过 Zephyr SDK 使用 OpenThread。
  • embedded-linux —— OTBR 通常跑在 Linux 主机或网关上。
  • mqtt —— 上层应用可能把 Thread 设备数据再桥接到 MQTT 等消息系统。
  • esphome —— ESPHome — 用 YAML 给 ESP32 / ESP8266 生成智能家居固件
  • linuxcnc —— LinuxCNC — 实时控制 CNC 机床的开源系统
  • lora-mac-node —— LoRaMac-node — LoRaWAN 终端协议栈参考实现
  • ros2 —— ROS 2 — 机器人软件的分布式消息底座
  • sdk-nrf —— Nordic Connect SDK — Nordic nRF 全家桶物联网 SDK