2. Thread协议栈架构解析
Thread并不是一个从零发明的无线协议,而是一套在成熟标准之上“组装”出来的低功耗Mesh网络方案。理解它的关键,是看清每一层各自负责什么、边界在哪里、数据包如何被逐层封装与解封装。Thread协议栈自下而上分为四层:IEEE 802.15.4物理层与MAC层、6LoWPAN适配层、Thread网络层、UDP传输与应用层。下面逐层拆解,并给出一个端到端的数据流示例。
物理层与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请求交给应用层处理。
各层关键参数速查
| 层次 | 关键协议/机制 | 典型参数 | 作用 |
|---|---|---|---|
| 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头 | 端到端数据传输 |