2. Thread协议栈与边界路由器

Thread 并不是一个单一协议,而是一套围绕 IEEE 802.15.4 物理层与链路层构建的 IPv6 低功耗网状网络协议栈。边界路由器(Border Router)在这套栈中承担的角色,远不止“把 Thread 网络接到以太网或 Wi-Fi”这么简单。它同时是 6LoWPAN 适配层的压缩/解压节点、IPv6 前缀的分配者、RPL 路由的根节点、CoAP 资源的代理入口,以及 mDNS/DNS-SD 服务发现的桥接点。理解这些协议在边界路由器内部如何协作,是后续配置、排障和性能调优的基础。

协议栈的分层与边界路由器的位置

从下往上梳理,Thread 节点与边界路由器共享同一套底层协议:

  • IEEE 802.15.4:定义 2.4 GHz 频段的物理层与 MAC 层,提供 250 kbps 速率、16 个信道、CSMA/CA 接入和 AES-128 链路加密。Thread 使用其非信标模式,MAC 层负责单跳可靠传输与重传。
  • 6LoWPAN:位于 802.15.4 与 IPv6 之间,解决 802.15.4 最大帧约 127 字节、而 IPv6 最小 MTU 为 1280 字节的矛盾。它通过头部压缩(IPHC)、分片与重组、以及邻居发现优化,让 IPv6 报文能在低功耗链路上传输。
  • IPv6:Thread 网络内部使用 IPv6 寻址,每个节点至少拥有一个链路本地地址(fe80::/10)和一个由边界路由器分配的全局/ULA 前缀地址(如 fd00:0:0:1::/64)。
  • RPL:低功耗有损网络的距离矢量路由协议,Thread 使用其存储模式(Storing Mode)构建树状路由拓扑,边界路由器通常作为 DODAG 根(Root)。
  • CoAP:基于 UDP 的 RESTful 应用层协议,用于设备管理、状态上报和命令下发,边界路由器可充当 CoAP 代理或资源目录。

边界路由器在协议栈中的位置是“双栈交汇点”:向下通过 802.15.4 接口与 Thread 网状网络通信,向上通过以太网/Wi-Fi 接口与外部 IPv6 网络通信,中间在 6LoWPAN 与 IPv6 之间完成适配,在 RPL 与外部路由之间完成路由信息交换,在 CoAP 与外部 HTTP/CoAP 之间完成应用层代理。

Thread 协议栈与边界路由器协作关系 外部 IPv6 网络 / 互联网 以太网 · Wi-Fi · 上游路由器 Thread 边界路由器 Border Router 6LoWPAN 适配 压缩/解压 · 分片 IPv6 转发 前缀分配 · 路由 RPL 根节点 DODAG · 路由表 CoAP 代理 资源目录 · 转发 mDNS/DNS-SD 服务发现桥接 NAT64 / 防火墙 地址转换 · 过滤 Thread 网状网络 Router R1 Router R2 Router R3 SED S1 FED F1 FED F2 IPv6 上行 802.15.4 下行 协议栈层次 CoAP / UDP IPv6 6LoWPAN IEEE 802.15.4 MAC IEEE 802.15.4 PHY RPL 位于 IPv6 之上 边界路由器关键功能 • 前缀分配 (fd00::/64) • 6LoWPAN 压缩/解压 • RPL DODAG 根维护 • CoAP 资源代理 • mDNS 服务发现桥接 • 双向 IPv6 转发 • 安全策略与过滤 图例 Thread 路由器 休眠终端 全功能设备

数据包在边界路由器中的实际流转

以一个典型场景为例:Thread 网络内一个温度传感器(SED,休眠终端)通过 CoAP 向外部服务器上报数据。数据包的完整路径如下:

  1. 传感器生成 CoAP POST 报文,负载为温度值,目标地址为外部服务器的 IPv6 地址。
  2. 报文经 UDP 封装后交给 IPv6 层,源地址为传感器由边界路由器分配的 fd00:0:0:1::abcd,目的地址为 2001:db8::100。
  3. IPv6 报文进入 6LoWPAN 适配层,IPHC 压缩将 40 字节 IPv6 头压缩到约 6~7 字节,UDP 头压缩到约 4 字节,CoAP 头保持原样。
  4. 压缩后的帧经 IEEE 802.15.4 MAC 层发送,通过 RPL 树状路由逐跳向边界路由器转发。每一跳的下一跳地址由 RPL 路由表决定。
  5. 边界路由器收到 802.15.4 帧后,6LoWPAN 层解压还原出完整 IPv6 报文,检查目的地址不在 Thread 前缀内,触发 IPv6 转发。
  6. 边界路由器通过以太网接口将 IPv6 报文发送到上游路由器,最终到达外部服务器。

反向路径同理:外部服务器返回的 CoAP 响应到达边界路由器后,边界路由器查询 RPL 路由表,找到传感器对应的下一跳,经 6LoWPAN 压缩后发往 Thread 网络内部。

RPL 与 IPv6 前缀分配的协作

边界路由器启动后会执行两项关键动作:一是通过 DHCPv6-PD 或手动配置获取一个全局/ULA 前缀(例如 fd00:0:0:1::/64),二是将该前缀通过 Thread 的 Network Data 机制下发到整个网状网络。每个 Thread 路由器收到前缀后,结合自身接口标识(IID)生成完整的 IPv6 地址。

RPL 则负责构建从各节点到边界路由器的上行路径。边界路由器作为 DODAG 根,周期性发送 DIO(DODAG Information Object)消息,节点根据收到的 DIO 计算 Rank 值并选择父节点。Rank 值反映节点到根节点的跳数代价,边界路由器 Rank 为 1,其直接子节点 Rank 约为 2~3,依此类推。当某条链路质量下降时,节点会重新选择父节点,RPL 触发路由修复,边界路由器更新路由表。

关键观察点:在边界路由器上执行 ip -6 route show 或 Thread 调试命令查看 RPL 路由表时,应能看到以 fd00:0:0:1::/64 为前缀的多条路由条目,下一跳指向不同的 Thread 路由器。若路由表为空或只有默认路由,说明 RPL 尚未收敛或边界路由器未正确注入前缀。

CoAP 代理与服务发现桥接

Thread 网络内的设备通常资源受限,无法直接运行完整的 HTTP 栈。边界路由器可配置为 CoAP 代理:外部客户端通过 CoAP 或 HTTP 访问边界路由器上的资源路径,边界路由器将其转换为 Thread 网络内部的 CoAP 请求。例如,外部请求 coap://[fd00:0:0:1::1]/temperature,边界路由器解析路径后,向传感器发送 coap://[fd00:0:0:1::abcd]/temp,收到响应后再回传。

服务发现方面,Thread 使用 mDNS/DNS-SD 在本地链路发布服务。边界路由器通过 SRP(Service Registration Protocol)将 Thread 设备的服务注册信息转发到外部 DNS-SD 域,使外部网络能够发现 Thread 设备提供的服务。这一过程涉及 DNS 查询转发和记录缓存,是边界路由器应用层协作的重要体现。

协作关系中的常见问题与判断依据

现象 可能涉及的协议层 排查方向
Thread 设备无法获取 IPv6 地址 IPv6 前缀分配 / 6LoWPAN 检查边界路由器前缀是否下发,Network Data 是否包含前缀
设备能入网但无法访问外部 RPL / IPv6 转发 查看 RPL 路由表是否有默认路由,边界路由器转发是否开启
CoAP 请求超时 CoAP / UDP / 6LoWPAN 分片 检查报文是否超过 6LoWPAN 分片阈值,CoAP 代理路径是否正确
外部无法发现 Thread 服务 mDNS/DNS-SD / SRP 确认 SRP 注册是否成功,DNS-SD 记录是否已同步到外部