4. MAC层核心机制:CSMA/CA协议详解、DCF与PCF模式、RTS/CTS握手机制

各位好,欢迎来到第四章。这一章我们聊聊WiFi的“交通规则”——MAC层核心机制。说白了,就是解决一个根本问题:一堆设备共享同一个无线信道,怎么保证它们不互相“撞车”?

有线网络里,以太网用的是CSMA/CD,检测到冲突就停。但无线环境不一样,你没法一边发一边收,也检测不到远端设备在发。所以WiFi用了另一套方案——CSMA/CA,冲突避免。我刚开始接触这个区别时,觉得挺绕的,后来在项目里踩过坑才真正理解。

4.1 CSMA/CA:先听再说,避免冲突

CSMA/CA的全称是Carrier Sense Multiple Access with Collision Avoidance。核心思想就四个字:先听后说。

  • 载波侦听:发送前先监听信道。如果信道忙,就等。
  • 冲突避免:不直接发,而是通过随机退避来降低碰撞概率。

你可能会问:为什么不直接检测冲突?因为无线信号衰减快,远端设备发数据,你这边可能根本听不到。这就是所谓的“隐藏节点问题”。

关键点:CSMA/CA不是“撞了再处理”,而是“尽量别撞”。这种设计让WiFi在共享信道下能保持相对公平的接入机会。

4.2 DCF模式:WiFi的默认工作模式

DCF,Distributed Coordination Function,分布式协调功能。这是WiFi最基础、最常用的模式。每个设备自己决定什么时候发,没有中心控制器。

DCF的核心机制包括:

  • IFS(帧间间隔):不同优先级的帧等待不同时长。SIFS最短,用于ACK、CTS等高优先级响应;DIFS较长,用于普通数据帧。
  • 随机退避:信道空闲后,设备还要随机等一段时间。这个时间窗口叫Contention Window,CW。第一次碰撞后CW翻倍,直到最大。
  • 二进制指数退避:每次冲突,退避窗口翻倍。我见过有人把这个机制调得太激进,结果网络吞吐量反而下降。

个人经验:我在一次WiFi性能调优项目中,发现某个AP下的终端频繁掉线。排查后发现是DCF的退避参数被误改,导致竞争窗口过小,设备间碰撞率飙升。恢复默认值后问题解决。

4.3 PCF模式:中心调度,但很少用

PCF,Point Coordination Function,点协调功能。它需要一个中心节点(通常是AP)来轮询各个站点,决定谁可以发数据。

PCF的优点:

  • 无竞争,时延可控
  • 适合实时业务,如语音、视频

PCF的缺点:

  • 实现复杂,AP负担重
  • 轮询效率低,空闲站点浪费时隙
  • 实际产品中很少启用
特性 DCF PCF
控制方式 分布式,各站自主决策 集中式,AP轮询调度
竞争机制 CSMA/CA + 随机退避 无竞争,由AP分配
时延保障 无保障,尽力而为 有保障,适合实时业务
实际应用 几乎所有WiFi网络 极少使用,仅部分企业AP支持

注意:PCF虽然理论上能提供更好的QoS,但实际部署中因为兼容性和效率问题,几乎被HCF(混合协调功能)取代。你如果做产品开发,建议优先考虑802.11e的EDCA机制。

4.4 RTS/CTS握手机制:解决隐藏节点问题

隐藏节点问题,简单说就是:A和C都能和B通信,但A听不到C。如果A和C同时给B发数据,就会在B处碰撞。RTS/CTS就是用来解决这个问题的。

握手流程:

  1. RTS:发送方先发一个短帧,告诉所有人“我要发数据了”。
  2. CTS:接收方回复一个CTS帧,确认信道空闲,并通知其他站点“别打扰”。
  3. 数据:发送方收到CTS后,开始发数据。
  4. ACK:接收方收到数据后,回复ACK确认。

RTS/CTS的代价是增加了开销。所以一般只在数据帧较大或隐藏节点严重时才启用。我建议的阈值是:数据帧超过1500字节时开启RTS/CTS。

避坑指南:我曾经在一个仓库项目中,所有终端都开启了RTS/CTS,结果小包业务(如传感器数据)延迟暴增。后来调整为仅对大于1000字节的帧启用,吞吐量提升30%。

4.5 核心流程总结:一张图看懂

下面这张SVG图展示了DCF模式下,一次完整的数据发送流程,包括退避、RTS/CTS握手、数据发送和ACK确认。

DCF模式数据发送流程 DCF模式数据发送流程 信道空闲? 等待DIFS 随机退避 发送RTS 等待CTS 收到CTS? 发送数据 等待ACK 收到ACK? 发送成功 重试(退避加倍) 说明:若未收到CTS或ACK,则退避窗口加倍后重试,直到达到最大重试次数

4.6 实战建议:参数调优

在实际项目中,MAC层参数调优直接影响网络性能。我总结了几条经验:

  • RTS阈值:默认2347字节(关闭),建议在干扰大的环境中设为1000-1500字节。
  • 碎片阈值:默认2346字节,信道质量差时降低到500-1000字节,减少重传开销。
  • Beacon间隔:默认100ms,对时延敏感的业务可缩短到50ms,但会增加AP开销。
  • 最大重试次数:默认7次,建议不超过4次,否则会加剧信道拥塞。

个人习惯:我每次部署WiFi网络前,都会先用抓包工具观察一下信道利用率。如果超过50%,就说明竞争太激烈,需要调整RTS阈值或增加AP密度。

好了,这一章的内容就到这里。CSMA/CA、DCF、PCF、RTS/CTS,这些机制共同构成了WiFi MAC层的骨架。理解它们,你就能在遇到无线性能问题时,快速定位是“交通规则”出了问题,还是其他原因。