一、无线链路的三个本质差异
有线链路的比特要么到达要么不到达。无线完全不同。
1️⃣ 信号强度随距离衰减(Path Loss)
接收功率 ∝ 1 / d^n (n 在自由空间为 2,在室内可达 3–5)
⚠️ **距离翻倍,信号强度降到 1/4 甚至更低。**穿一堵墙可能损失 90%。
2️⃣ 来自其他源的干扰(Interference)
2.4 GHz 频段被以下设备共用:
WiFi、蓝牙、微波炉、无绳电话、婴儿监视器……
⭐ 这是免许可频段(ISM band)的代价:谁都可以用,谁都会干扰谁。
3️⃣ 多径传播(Multipath Propagation)
┌─── 直射路径 ───┐
发射端 ─┤ ├─▶ 接收端
└─ 反射路径(更长)┘
⭐ 两路信号到达时间不同 → 相位差 → 可能【互相抵消】
后果:在某些位置信号会莫名其妙地变差——即使距离更近。这就是「换个位置信号就好了」的物理原因。
差异的共同后果
| 有线(以太网) | ⭐ 无线(802.11) | |
|---|---|---|
| 误码率 | 10⁻¹² 量级 | ⭐ 10⁻³ 到 10⁻⁵ |
| 链路质量 | 稳定 | ⭐ 剧烈波动 |
| 丢包原因 | 几乎只有拥塞 | ⭐ 误码 + 碰撞 + 拥塞 |
| 能否检测碰撞 | ✅ 可以 | ⭐ ❌ 不可以(见第二节) |
| 链路层重传 | ❌ 不做 | ⭐ ✅ 必须做 |
⭐ 最后两行是本讲的核心,也是第 23 讲那条判断的具体落地。
二、为什么无线不能做碰撞检测
CSMA/CD 在以太网上很成功。为什么 WiFi 不用它?
2.1 理由一:自身信号淹没一切
发射功率 ≫ 接收功率 (差 6–8 个数量级)
⭐ 一块网卡在发送时,自己的信号强度远远压过任何其他信号
→ 它根本"听不见"别人在发
(现代研究中的全双工无线技术试图通过自干扰消除来解决这一点,但尚未进入主流 WiFi 标准。)
2.2 理由二:隐藏终端问题(Hidden Terminal)⭐
A ●········))) (((········● C
●
B (AP)
A 能听到 B,C 能听到 B,⭐ 但 A 和 C 互相听不到
后果:
A 侦听 → 信道空闲(它听不到 C)→ 开始发送
C 侦听 → 信道空闲(它听不到 A)→ 开始发送
⭐ 在 B 处发生碰撞,而 A 和 C 都不知道
⚠️ 关键认识:**碰撞发生在【接收方】,而侦听发生在【发送方】。**在有线共享介质上二者一致,在无线上二者可能完全不同。
2.3 理由三:信号衰落(Fading)
即使 A 和 C 名义上在彼此的范围内,多径衰落也可能让它们在某个时刻听不到对方。
2.4 结论
⭐ 无线只能做碰撞【避免】(Collision Avoidance),不能做碰撞【检测】(Collision Detection)。 一旦碰撞发生,整个帧就报废了,无法中途止损。
这直接导出了两个设计后果:
- 必须尽量避免碰撞(因为代价大)→ CSMA/CA 的随机退避比 CSMA/CD 更保守
- ⭐ 必须有链路层确认(因为发送方无法判断是否成功)→ 802.11 有 ACK 和重传
三、802.11 架构
┌────────── 基本服务集 BSS 1 ──────────┐
│ ●A ●B │
│ ┌────┐ │
│ │ AP │ │
│ └──┬─┘ │
└─────────────────┼───────────────────┘
│ 以太网(分布式系统 DS)
┌─────────────────┼───────────────────┐
│ ┌──┴─┐ │
│ │ AP │ │
│ ●C ●D │
└────────── BSS 2 ────────────────────┘
| 术语 | 含义 |
|---|---|
| BSS(基本服务集) | 一个 AP 及其关联的所有站点 |
| AP(接入点) | 基站,连接无线与有线网络 |
| SSID | 网络的名字(你在手机上看到的那个) |
| BSSID | ⭐ AP 的 MAC 地址(唯一标识一个 BSS) |
| 信道 | 2.4 GHz 有 11 个信道,⭐ 只有 1、6、11 互不重叠 |
| ad hoc 模式 | 没有 AP,站点直接互连 |
关联(Association)过程
主机要加入网络,必须先关联到某个 AP:
① 扫描(Scanning):
⭐ 被动扫描: 监听各信道上 AP 周期性发出的【信标帧 Beacon】
⭐ 主动扫描: 自己广播【探测请求 Probe Request】,等 AP 回应
② 选择信号最强的 AP,发送关联请求
③ AP 回复关联响应
④ 通常还要通过认证(WPA2/WPA3)
⑤ ⭐ 主机随后通过 DHCP 获得 IP 地址(第 18 讲)
📌 注意最后一步:关联是第 2 层的事,DHCP 是第 3 层的事。「连上 WiFi」实际上是两个独立的过程——这就是为什么有时候「已连接但无法上网」(关联成功但 DHCP 失败)。
四、CSMA/CA
4.1 基本时序
发送方:
① 侦听信道
② 若空闲达到 DIFS 时长 → 发送整个帧(⭐ 不做碰撞检测)
③ 若忙 → 选择一个随机退避值,开始倒计数
⭐ 信道忙时【冻结】计数器,信道空闲时【继续】倒计
④ 计数到 0 → 发送
接收方:
⑤ 若帧正确接收 → ⭐ 等待 SIFS 后回送 ACK
时间线:
发送方: [────DIFS────][═══ 数据帧 ═══] [DIFS][...]
│◀SIFS▶│
接收方: [ACK]
4.2 三个关键设计点 ⭐
1️⃣ SIFS < DIFS
SIFS(短帧间间隔):ACK 使用
DIFS(分布式帧间间隔):数据帧使用
⭐ 因为 SIFS 更短,ACK 总是能【抢在】任何新数据帧之前发出
→ 保证一次成功的交换不会被打断
📌 这是一种「用时间长短实现优先级」的巧妙手法,不需要任何额外的协议字段。
2️⃣ 退避计数器在信道忙时【冻结】而非重置 ⭐
这是与 CSMA/CD 最重要的区别。
CSMA/CD(以太网): 碰撞后重新随机选择等待时间
CSMA/CA(WiFi): ⭐ 信道忙时暂停计数,空闲时接着数
后果:已经等了很久的站点,剩余计数更小 → ⭐ 更快获得发送机会
→ 提供了一定的【公平性】,避免某些站点长期饥饿
3️⃣ 必须有 ACK
因为发送方无法检测碰撞,唯一能确认成功的方式就是收到 ACK。没收到就重传(并把退避窗口加倍)。
⚠️ 这意味着每个数据帧都要付出「SIFS + ACK 帧」的开销,是 WiFi 实际吞吐量只有标称速率 50–60% 的主要原因之一。
4.3 RTS/CTS:解决隐藏终端
A AP C
│── RTS ────────────▶│ │
│ │──── CTS ───────────▶│ ⭐ C 也收到了!
│◀─── CTS ───────────│ │
│ │ C 知道信道将被占用,
│═══ 数据帧 ════════▶│ 按 CTS 中的时长静默
│◀─── ACK ───────────│
核心机制:
⭐ CTS 是【AP 广播】的,所有能听到 AP 的站点都会收到
→ 即使 A 和 C 互相听不见,它们都能听见 AP
→ C 从 CTS 中得知信道将被占用多久(NAV,网络分配向量),主动保持沉默
代价与取舍:
| ✅ 解决隐藏终端 | ❌ 每次传输多两个帧的开销 |
| ✅ 碰撞只发生在短的 RTS 上,损失小 | ❌ 对小帧来说开销占比过高 |
📌 实践中 RTS/CTS 默认是关闭的,只有帧长超过某个阈值(RTS threshold,典型 2347 字节即"从不")才启用。因为大多数场景下隐藏终端不严重,而开销是确定的。
五、802.11 帧格式
┌──────┬────────┬────────┬────────┬──────┬────────┬───────┬─────┐
│帧控制 │持续期 │ 地址1 │ 地址2 │地址3 │序号控制 │ 地址4 │ ... │
│2 字节│2 字节 │6 字节 │6 字节 │6 字节│ 2 字节 │6 字节 │ │
└──────┴────────┴────────┴────────┴──────┴────────┴───────┴─────┘
↓
┌──────────┬──────┐
│ 载荷 │ CRC │
│0–2312 字节│4 字节│
└──────────┴──────┘
⭐ 为什么有四个地址字段(考点)
以太网只需要两个(源、目的)。802.11 需要四个,因为帧要在无线段和有线段之间穿越。
| 字段 | 含义 |
|---|---|
| 地址 1 | ⭐ 接收方(要接收此帧的无线站点的 MAC) |
| 地址 2 | ⭐ 发送方(发出此帧的无线站点的 MAC) |
| 地址 3 | ⭐ AP 所连接的路由器接口的 MAC(关键!) |
| 地址 4 | 仅用于 ad hoc 模式或无线网桥(WDS) |
地址 3 的作用:
主机 H1 通过 AP 向互联网发数据:
① H1 → AP 的无线帧:
地址1 = AP 的 MAC (接收方)
地址2 = H1 的 MAC (发送方)
地址3 = ⭐ 路由器接口的 MAC (最终要送去哪)
② AP 收到后,构造【以太网帧】发到有线网:
目的 MAC = 地址3(路由器)
源 MAC = 地址2(H1)
⭐ 地址 3 让 AP 知道要把帧交给谁,而不需要 AP 运行任何三层协议
→ AP 保持为纯粹的二层设备
📌 这是一个漂亮的设计:多加一个字段,就让 AP 能在两种链路层协议之间做无缝桥接。
持续期字段(Duration)
用于 NAV(网络分配向量):告诉其他站点「信道将被占用多久」,让它们进行虚拟载波侦听——不需要真的听,看这个数字就行。RTS/CTS 靠它工作。
六、其他重要机制
6.1 速率自适应(Rate Adaptation)
信号好(SNR 高) → 用高阶调制(如 1024-QAM)→ 速率高,但对误码敏感
信号差(SNR 低) → 用低阶调制(如 BPSK) → 速率低,但更鲁棒
⭐ 站点根据实测的误码情况动态切换
⚠️ 这导致一个重要现象:一个信号差的站点会拖慢整个 BSS。因为它以低速率发送,占用信道的时间就长,其他站点只能等待。这叫性能异常(performance anomaly)。
📌 实际含义:把那台在角落里信号只有一格的老设备关掉,全家的 WiFi 都会变快。这不是玄学。
6.2 功率管理
节点告诉 AP:「我要睡了,帮我存着」(设置帧控制中的省电位)
AP 缓存发给它的帧
节点周期性醒来,检查信标帧中的 TIM(流量指示图)
有数据 → 保持清醒接收
无数据 → 继续睡
⭐ 这是移动设备电池续航的关键机制。
6.3 标准演进
| 标准 | 别名 | 频段 | 最高速率 |
|---|---|---|---|
| 802.11b | — | 2.4 GHz | 11 Mbps |
| 802.11g | — | 2.4 GHz | 54 Mbps |
| 802.11n | WiFi 4 | 2.4/5 GHz | 600 Mbps(MIMO) |
| 802.11ac | WiFi 5 | 5 GHz | ~3.5 Gbps |
| 802.11ax | WiFi 6/6E | 2.4/5/6 GHz | ~9.6 Gbps(OFDMA) |
| 802.11be | WiFi 7 | 2.4/5/6 GHz | ~46 Gbps |
⭐ WiFi 6 的关键创新是 OFDMA:把一个信道再切成多个子载波资源单元,让多个站点【同时】传输——从「排队使用信道」变成「并行使用信道」。这是应对高密度场景(体育馆、教室)的关键。
6.4 安全
| 协议 | 状态 |
|---|---|
| WEP | ⚠️ 彻底破解,几分钟内可破。IV 太短(24 位)且重用 |
| WPA | 过渡方案(TKIP),已不安全 |
| WPA2 | AES-CCMP,长期主流;⚠️ 存在 KRACK 攻击(已通过补丁缓解) |
| WPA3 | ⭐ 引入 SAE(同时认证对等体),抵抗离线字典攻击;强制管理帧保护 |
⭐ WPA3 的关键改进:即使密码很弱,攻击者也无法离线暴力破解——每次尝试都必须与 AP 交互,从而可以被限速和检测。
七、TCP 在无线链路上的问题 ⭐
这是整门课最好的一个「跨层」案例。
7.1 问题
回顾第 16 讲:TCP 把丢包解读为拥塞信号,随即减半 cwnd。
⚠️ 但在无线链路上,丢包的主要原因是【误码】,不是拥塞。
无线误码丢包
→ ⭐ TCP 误判为拥塞
→ 减半拥塞窗口
→ 吞吐量下降
→ 而网络其实一点都不拥塞,降速毫无必要
后果:在误码率 1% 的无线链路上,TCP 的吞吐量可能只有理论值的几分之一。
7.2 三类解决思路
| 思路 | 做法 | 评价 |
|---|---|---|
| ⭐ 本地恢复 | 802.11 链路层 ACK + 重传,在 TCP 察觉之前修复误码 | ✅ 主流方案,无需修改 TCP |
| 分裂连接 | 在基站把 TCP 连接分成有线段和无线段两条 | ❌ 破坏端到端语义,与 TLS 冲突 |
| 显式通知 | 让网络明确告知「这是误码不是拥塞」(ELN) | ❌ 需要修改网络和 TCP,未部署 |
⭐ 802.11 的链路层重传就是为此而生的——这正是第 23 讲说的「在有明确性能收益时,网络内部才重复端到端的功能」的教科书级案例。
7.3 但链路层重传也有代价
⚠️ 过度的链路层重传会让 RTT 剧烈波动:
链路层重传 5 次才成功 → 这个包的时延突然增加几十毫秒
→ TCP 的 RTT 估计(第 13 讲)方差变大
→ DevRTT 增大 → 超时时间变长 → 真正丢包时恢复变慢
📌 这就是跨层交互的复杂性:链路层为帮助 TCP 而做的重传,反过来又干扰了 TCP 的 RTT 估计。没有一个层的优化是孤立的。
八、例题(Worked Example)
题目:某 802.11 网络中,站点 A、B 与 AP 相互可见,站点 C 只能被 AP 听到(A 与 C 互相不可见)。
(a) 若 A 和 C 同时向 AP 发送,会发生什么?A 和 C 如何得知? (b) 启用 RTS/CTS 后,这个问题如何被解决? (c) 假设帧长 1500 字节、速率 54 Mbps,DIFS = 34 μs,SIFS = 16 μs,ACK 帧传输 24 μs,平均退避 67.5 μs。计算一次成功传输的信道占用时间与有效吞吐量。 (d) 从 (c) 的结果解释「为什么 54 Mbps 的 WiFi 实测只有 20 多 Mbps」。
解答:
(a) 发生隐藏终端碰撞。
A 侦听:听不到 C → 判断空闲 → 发送
C 侦听:听不到 A → 判断空闲 → 发送
⭐ 两个帧在 AP 处叠加,都被损坏
A 和 C 无法通过侦听得知(它们既听不到对方,也无法在发送时检测碰撞)。它们只能通过「等不到 ACK」来推断失败——这正是 802.11 必须有链路层 ACK 的原因。
随后各自进入随机退避并重传。
(b)
A 先发 RTS → AP 回 ⭐【广播的】CTS
→ C 虽然听不到 A 的 RTS,但【能听到 AP 的 CTS】
→ C 从 CTS 的 Duration 字段得知信道将被占用的时长
→ 设置 NAV,在这段时间内【主动保持沉默】(虚拟载波侦听)
→ A 的数据帧顺利传输,无碰撞
⭐ **关键在于:A 和 C 虽然互相听不到,但都能听到 AP。**RTS/CTS 把「站点之间的协调」转换成「通过 AP 的协调」。
(c)
数据帧传输时间 = 1500 × 8 / 54×10⁶ = 12000 / 54×10⁶ ≈ 222.2 μs
一次成功传输的总时间:
DIFS 34.0 μs
退避 67.5 μs
数据 222.2 μs
SIFS 16.0 μs
ACK 24.0 μs
─────────────────
合计 363.7 μs
有效吞吐量 = 12000 bit / 363.7 μs ≈ 33.0 Mbps
(d) 从 (c) 可以看到,只有 222.2 / 363.7 ≈ 61% 的时间在传输真正的数据,其余 39% 消耗在协议开销上(帧间间隔、退避、ACK)。
再加上实际环境中的其他损耗:
① 多个站点竞争 → 碰撞与更长的退避
② 速率自适应 → 信号不理想时降到更低速率
③ ⭐ 性能异常 → 一个慢站点拖慢所有人
④ 802.11 头部(30 字节)+ LLC/SNAP + 物理层前导码的额外开销
⑤ 重传
⭐ 综合下来,实测吞吐量落到标称速率的 40–60% 是完全正常的——54 Mbps 的标称对应约 20–30 Mbps 的实测。
📌 重要澄清:**标称速率是「物理层调制速率」,不是「应用层吞吐量」。**这不是厂商虚标,而是两个不同的量。同样的道理适用于所有无线技术(4G/5G 也一样)。
九、随堂自测
- 无线链路与有线链路的三个本质差异是什么?各自的后果?
- ⭐ 为什么无线不能做碰撞检测?给出三个理由。
- 什么是隐藏终端问题?它揭示了侦听与碰撞的什么关系?
- CSMA/CA 中 SIFS 为什么比 DIFS 短?这实现了什么效果?
- ⭐ CSMA/CA 的退避与 CSMA/CD 的退避有什么关键区别?带来了什么好处?
- RTS/CTS 为什么能解决隐藏终端?为什么它默认关闭?
- ⭐ 802.11 帧为什么需要四个地址?地址 3 的作用是什么?
- 什么是性能异常?它的实际含义是什么?
- ⭐ TCP 在无线链路上性能下降的原因是什么?主流的解决方案是什么?为什么这个方案不违反端到端原则?
十、本讲要点回顾
- 无线三大差异:路径衰减、干扰、多径;后果是误码率高 6–9 个数量级、链路质量剧烈波动。
- ⭐ 无线只能碰撞避免(CA),不能碰撞检测(CD)——自身信号淹没、隐藏终端、衰落。
- ⭐ 碰撞发生在接收方,侦听发生在发送方——这是隐藏终端问题的本质。
- CSMA/CA:DIFS → 退避(忙时冻结不重置)→ 发送 → SIFS → ACK。
- SIFS < DIFS 实现了 ACK 的优先级,无需额外协议字段。
- RTS/CTS 用 AP 广播的 CTS 让隐藏终端也能得知信道占用,代价是额外开销,默认关闭。
- ⭐ 802.11 有四个地址字段,地址 3 让 AP 能在无线与有线之间桥接而无需三层功能。
- 性能异常:一个慢站点拖慢整个 BSS。
- ⭐ TCP 把无线误码误判为拥塞;主流解法是 802.11 链路层重传——端到端原则中「有明确性能收益」的那个例外。
十一、自测答案
1. ① 信号强度随距离衰减(路径损耗),后果是覆盖范围有限、边缘速率低;② 来自其他源的干扰(免许可频段被微波炉、蓝牙等共用),后果是不可预测的误码;③ 多径传播(直射与反射信号相位相消),后果是信号强度随位置和时间剧烈波动。共同后果:误码率比有线高 6–9 个数量级,链路质量不稳定,且丢包不再只由拥塞造成。
2. ① 自身发射信号远强于接收信号(差 6–8 个数量级),网卡在发送时听不到任何其他信号;② 隐藏终端——两个站点可能互相听不到,但它们的信号会在接收方处碰撞,发送方无从察觉;③ 信号衰落——即使名义上在彼此范围内,多径衰落也可能让它们在某一时刻听不到对方。
3. 两个站点 A 和 C 都能与 AP 通信,但互相听不到。各自侦听时都认为信道空闲,同时发送,在 AP 处碰撞。它揭示的关系是:⭐ **碰撞发生在【接收方】,而载波侦听发生在【发送方】。**在有线共享总线上两者是同一个地方,因此侦听有效;在无线上两者可以完全不同,因此侦听不再可靠。
4. SIFS 短于 DIFS,意味着在一次数据帧发送结束后,要回 ACK 的接收方等待的时间比任何想发新数据的站点都短,因此 ACK 总能抢在新数据帧之前发出。效果是:一次成功的「数据 + 确认」交换不会被其他站点打断,相当于用时间间隔的长短实现了帧的优先级,而不需要在协议中增加任何优先级字段。
5. CSMA/CD(以太网)在每次碰撞后重新随机选择一个等待值;CSMA/CA(WiFi)的退避计数器在信道变忙时冻结,信道空闲时从冻结处继续倒计。好处是:已经等待很久的站点剩余计数更小,因而更快获得发送机会,这提供了一定的公平性,避免某些站点因为每次都重新抽签而长期得不到机会(饥饿)。
6. 因为 CTS 是由 AP 发出的,而隐藏终端虽然听不到彼此,却都能听到 AP。CTS 中携带 Duration 字段,隐藏终端据此设置 NAV 并在该时段内保持沉默(虚拟载波侦听),碰撞因而被避免。默认关闭是因为它给每一次传输都增加了两个帧的固定开销,而隐藏终端在多数实际部署中并不严重——确定的开销换取不确定的收益,通常不划算。因此只对超过 RTS 阈值的大帧启用。
7. 因为 802.11 帧需要在无线段与有线段之间穿越,仅靠"源/目的"两个地址不足以表达完整的转发信息。地址 1 = 接收方(无线上要收此帧的站点),地址 2 = 发送方(无线上发出此帧的站点),地址 3 = AP 所连接的路由器接口的 MAC。地址 3 的作用是:AP 收到无线帧后,据此构造发往有线网的以太网帧(目的 MAC 填地址 3),从而无需运行任何第 3 层协议就能完成桥接,保持 AP 为纯粹的二层设备。(地址 4 仅用于 ad hoc 与无线网桥场景。)
8. 性能异常指一个信号差、因而以低速率发送的站点,会拖慢整个 BSS 的总吞吐量——因为它占用信道的时间远长于高速站点,而信道是共享的,其他站点只能等待。实际含义:把信号很差的老旧设备关掉或让它靠近 AP,整个 WiFi 网络的速度都会提升;这不是玄学,而是共享介质的必然结果。
9. 原因是 TCP 把所有丢包都解读为拥塞信号(第 16 讲),而在无线链路上丢包的主要原因是误码而非拥塞。TCP 因此不必要地把 cwnd 减半,吞吐量大幅下降,而网络其实并不拥塞。主流解法是 802.11 的链路层 ACK + 重传:在 TCP 察觉之前就在本地把误码修复掉。它不违反端到端原则,是因为端到端原则的正确表述是「端上必须做的功能不能省,但在有明确性能收益时网络内部可以做部分重复」——无线链路的高误码率正是那个明确的性能收益:让 TCP 用 RTT 级的超时去恢复一个微秒级就能本地重传的误码,代价过于高昂。