一、无线链路的三个本质差异

有线链路的比特要么到达要么不到达。无线完全不同。

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)。 一旦碰撞发生,整个帧就报废了,无法中途止损。

这直接导出了两个设计后果

  1. 必须尽量避免碰撞(因为代价大)→ CSMA/CA 的随机退避比 CSMA/CD 更保守
  2. 必须有链路层确认(因为发送方无法判断是否成功)→ 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 也一样)。


九、随堂自测

  1. 无线链路与有线链路的三个本质差异是什么?各自的后果?
  2. ⭐ 为什么无线不能做碰撞检测?给出三个理由。
  3. 什么是隐藏终端问题?它揭示了侦听与碰撞的什么关系?
  4. CSMA/CA 中 SIFS 为什么比 DIFS 短?这实现了什么效果?
  5. ⭐ CSMA/CA 的退避与 CSMA/CD 的退避有什么关键区别?带来了什么好处?
  6. RTS/CTS 为什么能解决隐藏终端?为什么它默认关闭?
  7. ⭐ 802.11 帧为什么需要四个地址?地址 3 的作用是什么?
  8. 什么是性能异常?它的实际含义是什么?
  9. ⭐ 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 级的超时去恢复一个微秒级就能本地重传的误码,代价过于高昂。