2. Thread协议栈架构解析

Thread并不是一个从零发明的无线协议,而是一套在成熟标准之上“组装”出来的低功耗Mesh网络方案。理解它的关键,是看清每一层各自负责什么、边界在哪里、数据包如何被逐层封装与解封装。Thread协议栈自下而上分为四层:IEEE 802.15.4物理层与MAC层、6LoWPAN适配层、Thread网络层、UDP传输与应用层。下面逐层拆解,并给出一个端到端的数据流示例。

Thread协议栈分层与数据封装路径 应用层 CoAP / MQTT-SN / 自定义应用 UDP传输层 端口号、校验和、无连接传输 Thread网络层 IPv6路由、Mesh转发、RLOC16/EID MLE、邻居发现、路由选择 6LoWPAN适配层 头部压缩、分片重组、Mesh寻址 IEEE 802.15.4 MAC层 CSMA/CA、确认重传、帧过滤 IEEE 802.15.4 PHY层 2.4GHz OQPSK、信道11~26 数据封装(发送方向) 应用数据 (CoAP报文) UDP头 + 应用数据 IPv6头 + UDP + 数据 压缩IPv6头 + 载荷 MAC帧头 + 压缩载荷 + FCS PHY前导码 + SFD + PHR + PSDU 关键边界与职责: • PHY/MAC:负责无线信道接入、帧校验与重传,不关心IPv6地址。 • 6LoWPAN:把IPv6头压缩到几字节,并在MAC层之上完成分片与Mesh寻址。 • Thread网络层:负责IPv6路由与Mesh转发,是“多跳”能力的核心。

物理层与MAC层:无线链路的底座

Thread的物理层直接采用IEEE 802.15.4的2.4GHz规范。它使用OQPSK调制,共16个信道(编号11~26),每个信道带宽2MHz,标称速率250kbps。物理层帧由前导码、帧起始定界符(SFD)、物理头(PHR)和物理服务数据单元(PSDU)组成。其中PHR中的帧长度字段决定了PSDU最多127字节,这是Thread网络单帧载荷的硬上限,也是后续6LoWPAN必须做分片的根本原因。

MAC层负责三件事:一是CSMA/CA信道接入,节点在发送前先监听信道,空闲才发,冲突则退避重试;二是帧确认与重传,接收方正确收到帧后回ACK,发送方未收到ACK则重传;三是帧过滤,节点只接收目的地址匹配或广播的帧。MAC层使用16位短地址或64位扩展地址,但Thread在入网后主要使用16位短地址来降低开销。

6LoWPAN适配层:让IPv6跑在802.15.4上

IPv6最小报头40字节,而802.15.4单帧只有127字节,直接承载效率极低。6LoWPAN的核心工作就是“压缩”和“分片”。它定义了LOWPAN_IPHC压缩格式,可以把IPv6源/目的地址、流量类别、跳数限制等字段压缩到几字节。例如,当通信双方使用链路本地地址且前缀可推导时,IPv6头可压缩到6字节左右。

当上层数据超过单帧容量时,6LoWPAN在MAC层之上插入分片头,把数据切成多个片段分别发送,接收端再按分片偏移重组。此外,6LoWPAN还定义了Mesh寻址头,用于在链路层实现多跳转发。Thread网络层正是利用这一机制,在6LoWPAN之上构建自己的路由体系。

Thread网络层:Mesh的核心

Thread网络层是协议栈中最具“Thread特色”的一层。它基于IPv6,但增加了Mesh路由能力。每个Thread节点拥有两类地址:RLOC16(16位路由定位符,由父节点分配,用于Mesh内部转发)和EID(IPv6端到端地址,用于全局标识)。当数据包在Mesh中转发时,中间节点根据RLOC16决定下一跳,而不需要维护完整的IPv6路由表。

Thread网络层还负责MLE(Mesh Link Establishment)协议,用于邻居发现、链路质量评估、路由成本计算和网络参数同步。节点通过MLE交换链路质量信息,路由器据此选择最优路径。Thread支持两种角色:Router(路由器)和End Device(终端设备)。Router参与路由转发,End Device通常休眠以省电,通过父节点收发数据。

UDP传输层与应用层

Thread网络层之上直接使用UDP,而不是TCP。原因在于低功耗Mesh网络中,TCP的握手、重传和拥塞控制开销过大,且长连接会阻止节点休眠。UDP无连接、头部仅8字节,适合短报文和周期性上报。Thread在UDP之上定义了CoAP(Constrained Application Protocol)作为推荐的应用层协议,支持RESTful风格的GET/PUT/POST操作,并可通过观察模式实现服务器推送。

实际开发中,应用层也可以直接使用UDP Socket发送自定义数据。例如,一个温度传感器节点每30秒向边界路由器发送一次温度值,应用层构造一个4字节的UDP报文,目的端口5683(CoAP默认端口),经过UDP、IPv6、6LoWPAN、MAC、PHY逐层封装后发送。边界路由器收到后,解封装并转发到外部IP网络。

端到端数据流示例

假设节点A(RLOC16=0x1234)要向节点B(RLOC16=0x5678)发送一条CoAP消息“GET /temp”。数据流如下:应用层生成CoAP请求;UDP层加上源端口和目的端口;Thread网络层加上IPv6头,源地址为A的EID,目的地址为B的EID;6LoWPAN层压缩IPv6头,并可能分片;MAC层加上帧头,目的短地址为下一跳的RLOC16;PHY层加上前导码和SFD后发送。中间路由器根据RLOC16逐跳转发,直到节点B。节点B逐层解封装,最终把CoAP请求交给应用层处理。

学习建议:理解Thread协议栈时,不要孤立地背每一层,而要抓住“封装—解封装”这条主线。每经过一层,就多一个头部;每向上解一层,就少一个头部。抓住这条主线,再复杂的抓包分析也能逐层拆解。

各层关键参数速查

层次 关键协议/机制 典型参数 作用
PHY IEEE 802.15.4 OQPSK 2.4GHz,信道11~26,250kbps 无线调制与发送
MAC CSMA/CA、ACK重传 127字节最大帧,16位短地址 信道接入与可靠传输
6LoWPAN LOWPAN_IPHC、分片 IPv6头可压缩至6~8字节 适配IPv6与802.15.4
Thread网络层 IPv6路由、MLE RLOC16、EID、路由成本 Mesh多跳转发
UDP/应用 UDP、CoAP 端口5683,8字节UDP头 端到端数据传输