2.2 媒体访问控制层:谁有权说话 本节摘要:媒体访问控制层维护共享信道的秩序。本节讲超帧与信标机制如何为极低占空比设计日程表、非信标模式为何成为主流生态的事实选择,再完整拆解载波监听多路访问与冲突避免的退避算法(含三个可调参数的手算示例),最后看保证时隙这条免争用侧门。本节承接物理层的信道资源,是理解全协议"省电"二字的关键一环。 一、信标与超帧:给沉睡发一张日程表 第一节的教训说功耗要按年计,落到媒体访问控制层就是:设备绝大多数时间必须关着射频睡觉。信标模式是标准给出的日程表方案——协调器周期性广播信标帧,两个信标之间划为一个超帧,超帧分活跃期与非活跃期。活跃期又细分为竞争访问期与免竞争期:前者大家抢着用(走退避算法),后者划成保证时隙分给登记过的设备。
本节摘要:媒体访问控制层维护共享信道的秩序。本节讲超帧与信标机制如何为极低占空比设计日程表、非信标模式为何成为主流生态的事实选择,再完整拆解载波监听多路访问与冲突避免的退避算法(含三个可调参数的手算示例),最后看保证时隙这条免争用侧门。本节承接物理层的信道资源,是理解全协议"省电"二字的关键一环。
第一节的教训说功耗要按年计,落到媒体访问控制层就是:设备绝大多数时间必须关着射频睡觉。信标模式是标准给出的日程表方案——协调器周期性广播信标帧,两个信标之间划为一个超帧,超帧分活跃期与非活跃期。活跃期又细分为竞争访问期与免竞争期:前者大家抢着用(走退避算法),后者划成保证时隙分给登记过的设备。非活跃期全网打盹,只在下一个信标前醒来。
对终端设备,信标模式的省电逻辑是"按时刻表醒":只在信标与属于自己的时段活动,其余时间深度睡眠,占空比可以压到千分之几。代价是全网节奏被绑死在信标周期上,且树状的信标调度限制了拓扑灵活性。
有意思的是,主流商业生态几乎全体选择了非信标模式——没有周期性信标,路由设备射频常开,终端设备想睡就睡、想发就发(发之前先监听),收数据靠向父节点轮询。为什么放弃优雅的日程表?因为日程表要求全网的超帧保持同步,多跳扩展与网状路由(第三章)在信标调度下复杂度暴涨;而实际产品的省电压力集中在终端设备一侧,路由器插墙插头不差这点电。"简化组网、只让电池设备睡"是个务实的工程折中,也是理解后续章节"休眠终端 + 轮询父节点"模型的必要背景。
超帧结构示意(信标间隔 = 活跃期 + 非活跃期): 信标 │← 竞争访问期 →│← 免竞争期(保证时隙)→│←──── 非活跃期(全网睡)────→│下一信标 ^ ^ 全网醒,同步时刻表 只有登记了保证时隙的设备在指定时段醒
非信标模式的秩序核心是载波监听多路访问与冲突避免算法。流程:设备想发帧时,先等一个随机退避时间(以退避周期为单位,底层标准定一退避周期为二十个符号周期),退避数完再监听信道——空闲则清信道评估通过、立即发射;忙则退避指数加一、重抽更大的随机数再等,如此循环,超过最大退避次数仍不成功则向上层报失败。
三个可调参数决定它的"脾气":最小退避指数(默认三,决定初始随机窗口大小)、最大退避指数(默认五,决定窗口上限)、最大退避次数(默认四,决定放弃前的重试轮数)。手算一轮默认配置:初始退避指数取三,随机数落在零到七之间,抽到三就等三个退避周期;若监听遇忙,指数升到四,窗口变零到十五;再忙升到五,窗口零到三十一封顶。四轮全失败则宣告本次发送失败,交给上层重传策略。

参数不是越激进越好。最小退避指数调小,设备更快出手,单帧时延下降,但节点密度高时碰撞概率上升、重传风暴反而推高平均时延——适合稀疏小网。最大退避次数调大,网络在拥塞下更顽强,代价是上层可能因等待过久而超时。一个常见的不良搭配:应用层重传超时设得比链路层最坏退避总时长还短,结果是应用层先放弃并重发,凭空多出一倍流量。正确做法是让应用层超时覆盖"最大退避轮数 × 最大窗口 × 单位退避周期"再加链路确认时间。
⚠️ 常见坑:把冲突退避的失败当成"信道坏了"。四轮退避失败只说明此刻信道忙,正确的应对是指数级别地拉长上层重试间隔(类似抖动退避思想),而不是立即原地重发。
竞争访问期的时延是概率性的,对个别确定性业务(如周期性采样、关键告警)不够稳。免竞争期的保证时隙提供了侧门:设备提前向协调器申请时隙,协调器把它的流量排进专属时段,无需争用、时延确定。代价是调度开销与灵活性损失——时隙是提前登记的静态资源,突发流量用不上它。实践中绝大多数控制业务走竞争访问期就够了,保证时隙只在确有硬实时需求时启用,这与信标模式一样属于"能力在、少人用"的一档。
把冲突的开销算细,能理解为什么退避参数值得认真调。一次发射失败(链路层等不到确认)意味着:退避等待时间加空中时间白费、重传再走一遍完整流程、若上层还有重传则进一步放大。以几十字节帧一两毫秒的空中时间计,加上退避与转发排队,一次冲突的端到端代价是毫秒到几十毫秒级——对"百毫秒健康线"的本地控制而言,两三次连续冲突就吃掉预算的大头。所以高密度部署的优化重点从来不是"发得更快"而是"少撞车":错峰上报、拉长随机窗口、控制广播频率,全是这条账上的省钱动作。
查两件事:一是有无高占空比的邻居(无线局域网视频流会把信道持续占忙,退避永远在等);二是有无设备在做高频广播(设备发现的重复扫描是常见肇事者)。冲突频率与自家的节点数不成正比,与信道的总占用成正比。
| 参数 | 默认 | 调小影响 | 调大影响 |
|---|---|---|---|
| 最小退避指数 | 三 | 出手快 · 高密度易撞 | 首帧时延增大 |
| 最大退避指数 | 五 | 拥塞下放弃更快 | 拥塞更顽强 · 最坏等待更长 |
| 最大退避次数 | 四 | 快速上报失败 | 韧性强 · 上层须等更久 |
配套纪律:应用层超时覆盖最坏退避总时长再加链路确认;失败后拉长重试间隔而非原地重发。
补信标与非信标网络的工程选择。802.15.4 有两种网络节拍:信标网络(协调器周期广播信标帧同步全网,超帧结构划分活跃与休眠期)与非信标网络(无统一节拍,终端自行休眠醒来轮询父节点)。工程现状:Zigbee 几乎全用非信标网络——原因有二,信标网络的同步要求让路由器不能自由休眠(全网维持时间同步的代价),而网状路由与非信标才兼容(信标化会限制多跳的灵活性)。非信标设计的代价是终端的消息获取变成"拉"模式(终端醒来向父节点查询有没有自己的消息)——这决定了 Zigbee 终端的消息实时性受休眠周期约束(查询间隔一秒,消息就最多延迟一秒),设计应用时要明白"电池寿命换实时性"这笔交换。对带宽与实时性敏感的节点(路由器、协调器、 mains 供电设备)永远在线,只有电池终端在拉模式里——一张网络里两种生存策略并存,正是 802.15.4 MAC 设计的精妙处。