

本文介绍 CSMA/CA和RTS/CTS 握手机制
CSMA/CA (载波监听多路访问/冲突避免) 是 Wi-Fi 网络中最底层的"交通规则"。
如果说光纤通信是"专线专用的铁路",那么 Wi-Fi 就是"没有红绿灯的环岛"。CSMA/CA 就是为了保证大家在乱糟糟的空气中不撞车而设计的一套礼貌原则。
它的核心逻辑可以概括为四个字:"先听后说"。
一、 名字拆解
CS (Carrier Sense 载波监听):
- 意思就是**"听"**。在想说话之前,先竖起耳朵听听空气里有没有电波的声音。
MA (Multiple Access 多路访问):
- 意思就是**"很多人"**。很多人共用这一个信道。
CA (Collision Avoidance 冲突避免):
-
意思就是**"尽量不撞"**。
-
对比: 有线以太网用的是 CSMA/CD (冲突检测)。以太网是"边说边听,撞了就停";Wi-Fi 是"因为我说话时听不见别人,所以我必须确保万无一失再开口"。
二、 CSMA/CA 的工作流程(礼貌的绅士)
假设你的手机(A)想给路由器发一张照片:
第一步:监听 (Listen)
-
A 监测信道。
-
如果有人在发数据(信道忙),A 就闭嘴,继续监听。
-
如果信道空闲了,A 也不能马上发(怕别人也刚等到空闲,大家一起冲出去会撞)。
第二步:等待 (DIFS & Backoff)
-
DIFS (固定等待时间): 这是一个必须等待的"冷静期"。
-
随机退避 (Random Backoff): 这是 Wi-Fi 的精髓。
-
A 会在心里随机选一个数字(比如 5)。
-
B 也想发,随机选了个数字(比如 8)。
-
大家开始倒数:信道每空闲一个时隙,数字减 1。
-
A 数到 0 了(比 B 快),A 抢到了信道!
第三步:发送 (Transmit)
- A 开始发送数据帧。
第四步:确认 (ACK)
-
路由器收到数据后,必须回一个 ACK (确认帧) 给 A。
-
A 收到 ACK →→ 发送成功。
-
A 没收到 ACK →→ 判定刚才肯定撞车了,数据丢了。A 会把刚才的随机范围扩大(比如从 0-15 变成 0-31),重新排队重发。
三、 它的局限性:隐藏节点问题
CSMA/CA 虽然很礼貌,但有个死穴。
场景: 路由器在中间,你(A)在左边,老王(B)在右边。A 和 B 离得太远,互相听不见。
-
A 听了一下(CSMA),没听见 B 说话,于是 A 开始发数据给路由。
-
同时,B 听了一下,没听见 A 说话,B 也开始发数据给路由。
-
结果: 路由器同时收到了 A 和 B 的信号,信号在路由器那里撞车了,全废了。
这就是隐藏节点问题。为了解决这个,Wi-Fi 引入了 RTS/CTS (请求发送/清除发送) 机制:

RTS/CTS 的工作流程(预约机制)
为了防止这种"虽然听不见对方,但还是撞车"的惨剧,Wi-Fi 引入了一个中间人协调机制。
第一步:A 发起请求 (RTS)
-
A 给路由器发一个很短的 RTS (Request To Send) 帧。
-
意思: "老大,我要发一个大文件,大约占用 5 毫秒,请批准!"
-
此时,老王听不见这个 RTS。
第二步:路由器全场广播 (CTS)
-
路由器收到请求,如果信道空闲,它会立刻广播一个 CTS (Clear To Send) 帧。
-
意思: "收到了!批准 A 发送!其他人(包括老王)全部闭嘴 5 毫秒!"
-
关键点:虽然老王听不见 A,但他一定能听见路由器。
第三步:老王闭嘴 (NAV 设置)
-
老王听到了路由器的 CTS,虽然不是发给他的,但他解析出了"闭嘴 5 毫秒"的指令。
-
于是老王启动 NAV (网络分配矢量) 计时器,把自己锁住,暂停发送。
第四步:A 发送数据
- A 收到 CTS 后,开始放心地发送真正的长数据包,不用担心有人插嘴了。
RTS/CTS 的代价与阈值
既然这个机制这么好,为什么不默认开启? 因为太啰嗦了。
-
代价: 本来直接发数据就行,现在非要先发一个 RTS,再等一个 CTS,这增加了额外的开销 (Overhead) 和时延。如果是发微信这种小包,握手的时间比发数据的时间还长,得不偿失。
-
RTS 阈值 (Threshold):
-
因此,路由器里通常有一个设置叫 RTS Threshold(默认通常是 2347 字节)。
-
小于阈值的小包: 直接发,不握手(赌一把,撞了重发)。
-
大于阈值的大包: 必须握手(因为大包一旦撞了,重发成本太高,不如先花点时间预约)。
总结
CSMA/CA 是一套**"牺牲效率换取公平和稳定"**的机制。 因为它太谨慎了(又要听,又要等随机数,还要等 ACK),所以 Wi-Fi 的实际吞吐量往往只有理论速率的 50%~60%(被称为"半双工效率损耗")。
RTS/CTS 就像是举手发言制度。在人少的时候(无隐藏节点),直接说话效率最高;但在人多且互相看不见的时候,必须先举手,老师点名允许后才能说,否则课堂就乱套了。