Skip to content

第2章 协议栈分层 ​

本章目标

看懂数据从「应用层」到「空中帧」的逐层封装过程。这是全书最重要的一章——配合交互页「协议栈分层教学」观看动画效果最佳。

2.1 五层协议栈 ​

层职责一句话记忆
应用层 APL业务逻辑(你写的代码)「我要开灯」
APS 层应用支持:端点、簇、绑定「端点 8 找端点 3,办 On/Off」
网络层 NWK组网、路由、地址「送到 75:82,走 3 跳」
链路层 MAC802.15.4 帧、ACK、信道访问「一帧一帧传,到了点个头」
物理层 PHY射频收发(2.4GHz)「变成无线电波发出去」

发送时每层「包一层头」,接收时每层「剥一层头」——这是所有分层协议的核心机制。

2.2 29 字节空中帧解剖(真实日志) ​

在 zigbee-stack-layers 示例中,发送端逐字节序列化出完整的空中帧(29 字节):

MAC 头(9B): 61 98 30 b1 1b 82 75 00 00   ← 帧控制/序号/PAN 0x1bb1/目的 82 75/源 00 00
NWK 头(8B): 4c 00 82 75 00 00 0a dd     ← 帧控制/目的/源/半径 0x0a/序号 0xdd
APS 头(8B): 00 03 06 00 04 01 08 00     ← 帧控制/目的端 3/簇 0x0006/Profile 0x0104/源端 8/计数
载荷(2B):  01 01                        ← 命令 0x01(点亮) + 序号 0x01
FCS (2B):  00 00                        ← 校验

接收端解封装后打印:

[应用层] 收到 ASDU size=2 ... 内容: 0x01 0x01
-> [执行] LED 点亮

逐字节看

  • APS 头里的 08 00 = 源端点 8(控制器应用),00 03 = 目的端点 3(LED 应用)——这就是端点寻址在帧里的样子;
  • 簇 0x0006 = On/Off 簇,Profile 0x0104 = Home Automation;
  • NWK 头 82 75 = 目的短地址(0x7582),00 00 = 源(协调器 0x0000)。

2.3 ns-3 实操对照 ​

// 应用层发数据(ns-3)
req.m_srcEndPoint = 8;      // 源端点
req.m_dstEndPoint = 3;      // 目的端点
req.m_clusterId  = 0x0006;  // On/Off 簇
req.m_profileId  = 0x0104;  // Home Automation
Simulator::ScheduleNow(&ZigbeeAps::ApsdeDataRequest, aps, req, p);

与真机对照

第 14 章会看到:这些参数到 CC2530 上就是 AF_DataRequest 的同名参数——协议是同一套,只是 API 名字变了。

配套交互页:协议栈分层教学(发送端逐层封装动画 + 帧解剖)

aioteer · 物联网专业课程群

💬AI 伴学配置