以太网能「边发边听」,无线不能——因为自己发的信号会盖住别人的。 所以无线改成「先听后发、发完等确认」,这就是 CSMA/CA。
上一节讲无线怎么来的,这一节讲它「怎么抢信道」。 这是无线与有线最本质的差别,也是「无线为什么只有一半效率」的根源。
一、为什么不能边发边听
以太网用 CSMA/CD:一边发一边听,听到「和自己发的不一样」就说明撞了,立刻停。 这套机制要求「发送时能听见别人」。
无线做不到: 自己发射的功率比远处别人的信号强几个数量级,接收机被自己的信号淹没,根本听不出有没有撞。 这叫「近远效应」。
而且还有「隐藏终端」问题:A 和 C 都能听见中间的 B,但 A 听不见 C。 于是 A 以为信道空闲就发,C 也这么想,两个一起撞在 B 那里。
这两条加起来,决定了无线只能「事先避免」,不能「事后检测」——所以是 CA(Collision Avoidance),不是 CD(Collision Detection)。
二、三个避免冲突的机制
一、先听后发(载波侦听):发之前先听一段时间,听到「忙」就等。 问题是「听不到不代表没人」(隐藏终端)。
二、随机退避:想发的时候不立刻发,先随机等若干个时隙。 两个同时想发的设备,等的时间大概率不同,于是错开。 这解决的是「大家一起等完、又一起发」的二次冲突。
三、确认与重传:收到之后必须回一个 ACK。 没收到 ACK 就认为撞了,退避更长时间再试。 这一条同时解决了「隐藏终端」——因为 B 不回 ACK,A 就知道没成。
RTS/CTS 是给第三条打的补丁: A 先发一个 RTS,B 回一个 CTS(C 也能听见这个 CTS),于是 C 在这段时间自觉闭嘴。 它有效但开销大,所以只在「大包」或「隐藏终端严重」时才开。
三、这套机制的效率代价
每次发送都要付四笔「等待」: 帧间隙(DIFS)、随机退避、前导与帧头、以及等 ACK 的间隔(SIFS)。
按 54 Mbps、1500 字节算:数据本身 222 微秒,四笔等待加起来约 168 微秒。 效率只有 57%。
而小包更惨:100 字节的数据只占 15 微秒,而等待还是 168 微秒——效率掉到 8%。 这就是「无线网上跑小包业务特别费」的定量原因。
所以无线的容量规划不能按「兆比特每秒」算,要按「每秒能发多少个包」算: 因为每个包都要付一次固定开销,而固定开销与包大小无关。 这也是「语音走无线要单独算」的原因。
四、动手 Demo:一次传输里,真正的数据占多久
这段把一次传输的六个环节逐个列出耗时,算出「数据占总时间的比例」,再看包变小之后效率掉到多少。
total = 34 + 68 + 20 + 222 + 16 + 30
P(u" 合计 %d 微秒,其中数据 %d 微秒。" % (total, 222))
P(u" 效率 = %d ÷ %d = %.1f%%。" % (222, total, 222 * 100.0 / total))
实跑输出:
--------------------------------------------------------------------
一次传输里,真正的数据占多久
--------------------------------------------------------------------
**无线不是「发出去就完了」,每次发送都要抢信道、等确认。**
**这些「等」的时间,就是效率损失。**
环节 典型耗时 说明
--------------------------------------------------------
DIFS 34 微秒 发之前必须静默这么久
随机退避 约 68 微秒 平均 7.5 个时隙 × 9 微秒
前导与头 20 微秒 同步与速率信息
数据 222 微秒 1500 字节 @ 54 Mbps
SIFS 16 微秒 等 ACK 的固定间隔
ACK 30 微秒 确认收到
合计 390 微秒,其中数据 222 微秒。
效率 = 222 ÷ 390 = 56.9%。
**换小包会怎样**(同样 54 Mbps):
100 字节:数据 14.8 微秒,合计 182.8 微秒,效率 8.1%。
500 字节:数据 74.1 微秒,合计 242.1 微秒,效率 30.6%。
1500 字节:数据 222.2 微秒,合计 390.2 微秒,效率 56.9%。
**100 字节的小包效率只有 25%**——**这就是为什么 VoIP 在无线网上特别费「空口时间」。**
**而「空口时间」才是无线真正的稀缺资源,不是带宽。**
57% 这个效率是「单用户、无干扰、大包」的理想值: 真实环境有竞争、有重传、有管理帧,能到四成就很不错。 所以「标称 54 Mbps 实测 20 Mbps」不是设备虚标,是机制决定的。
注意 100 字节那一行「效率 25%」:它说明「包越小,固定开销占比越高」。 而固定开销里最大的一项是「随机退避」,这是「避免冲突」必须付的代价。
最后那句「稀缺资源是空口时间」要反复用: 算容量时问「每秒能发多少个包」,而不是「能跑多少兆」。 这个视角一换,很多「无线怎么这么慢」的问题就有答案了。
30 秒实验
- 算一下:如果你每个包平均 300 字节,一次传输的效率大约多少?
- 在手机上看「Wi-Fi 速率」,看它是不是经常在 54 到 300 之间跳。
- 想一想:为什么「关掉 802.11b 速率」能提升整体吞吐?
常见误区
- 以为无线也能「边发边听」。自己发的信号盖住一切,做不到。
- 以为听不到就是没人。隐藏终端就是这个盲区。
- 以为效率损失是设备不行。它是 CSMA/CA 机制的必要开销。
自测三问(点开对答案)
1. 无线为什么用 CA 而不是 CD? —— 自己发射的信号会淹没别人的信号,无法边发边听检测冲突,加上隐藏终端问题。 2. 随机退避解决的是什么问题? —— 两个设备同时等待结束后又同时发送造成的二次冲突。 3. 为什么无线容量要按「每秒包数」而不是「比特率」规划? —— 每个包都要付一次与包大小无关的固定开销,小包时开销占比极高。下一节:一个 AP 管一片,多片怎么组成一个大网——架构。
- ☐ (本节完,下一节 06.02.02 无线LAN的架构)