有线的世界很单纯:你说话的时候,可以同时竖起耳朵听有没有人在抢话,一旦发现“撞车”,闭嘴、退让、等下个时机重说。这套逻辑就是以太网CSMA/CD的核心。但把同样的思路搬到Wi-Fi上完全行不通——无线网卡没法同时收发信号,自己的发射功率也会把回波盖得死死的,更棘手的是,你根本听不见“隔了一道墙”的另一台设备在说话。所以802.11协议族从一开始就告别了“冲突检测”,改走“冲突避免”这条路,也就是CSMA/CA。
作为理解Wi-Fi底层行为绕不开的基础协议,CSMA/CA决定了你的手机、笔记本、智能家居设备在共享一个信道时如何有序地“排队发言”。这篇文章就从原理出发,把帧间隔、随机退避、RTS/CTS握手、隐藏终端这些概念一层层拆开讲,最后落到真实Wi-Fi部署中你会遇到的延迟抖动、重传率升高、信道拥堵这些问题上。无论你是准备面试、做课程设计,还是正在排查无线网络故障,都能从中拿到可以直接用的思路和参数。
1. 无线网络为什么不能直接用CSMA/CD:一切要从冲突检测说起
1.1 有线以太网里的“边开车边看路”
CSMA/CD全称是Carrier Sense Multiple Access with Collision Detection,中文叫载波侦听多路访问/冲突检测。它是早期半双工以太网的访问控制机制。半双工的意思是:在同一时间,一根同轴电缆或双绞线上只能有一个方向的数据流动,所有节点共享这条物理通道。
它的工作方式可以概括为四个字:先听后发。
节点要发送数据前,先侦听总线上有没有其他节点在传输信号,这个动作叫“载波侦听”。如果信道忙,就等;如果信道空闲,就立刻发送。更重要的是,发送的过程中节点并没有“闭眼开车”,它一直在同时检测总线上是否存在冲突——也就是多路信号叠加后产生的异常电压。一旦检测到冲突,所有参与冲突的节点都得停止发送,然后各自等待一个随机时间再重试。这个随机等待时间用二进制指数退避算法来计算,下一次重传的退避范围会翻倍,降低大家再次撞车的概率。
这套机制在有线环境里成立,依赖一个核心前提:节点能在发送的同时接收信号,而自己的发射信号不会淹没要检测的冲突信号。在电信号沿导线传输的世界里,这可以通过特殊的收发电路实现。以太网的冲突检测技术也因此做得非常精确,能够区分是自己的回波还是别人的信号。
1.2 到了无线环境,三条腿全断了
无线环境中有几个硬伤,让CSMA/CD的“边发边听”变得不现实。
第一个硬伤是半双工限制。大多数无线网卡在同一时刻只能做一件事,要么发射,要么接收。发射时天线端口被大功率信号占据,如果强行接收,自己发射的信号会把任何微弱的外部信号完全压掉。就好比你戴着耳麦在大声喊话,根本听不到旁边人轻声说“你小点声”。
第二个硬伤是信号强度的动态范围问题。发送功率通常在100毫瓦量级,而接收信号的强度往往在微瓦量级,差了五六个数
