5 题型 - CSMA CA协议
Chinese-language Computer Science 408 note: 5 题型 - CSMA CA协议. Original source available where applicable.
On this page
This note is currently available in Chinese. The original wording, formulas and diagrams are preserved to avoid an unverified technical translation.
描述:802.11 无线局域网难以像有线以太网那样边发送边可靠检测碰撞,因此使用 CSMA/CA 尽量避免碰撞;对通常需要确认的单播数据帧,以链路层 ACK 和重传提高单跳传输可靠性。RTS/CTS 与 NAV 可缓解隐蔽站问题,DIFS、SIFS、退避窗口和四地址字段是常见考点。
5.1 为什么无线局域网使用 CSMA/CA
- 无线站点的发送信号远强于同时接收到的远端弱信号,难以在发送过程中可靠检测碰撞。
- 各站覆盖范围不同,可能存在彼此听不到、却会在同一接收点发生冲突的隐蔽站。
- 无线误码率通常高于有线链路。典型的单播数据帧交换采用 ACK;未收到预期 ACK 的发送方按规则退避并重传,直至成功或达到重试上限。组播、广播帧通常不逐帧确认;某些模式还支持块确认或无确认策略。
因此 802.11 的思路是发送前监听与预约、发送后等待确认,而不是 CSMA/CD 的发送中碰撞检测。
5.2 基本发送过程与帧间间隔
| 间隔 | 用途 | 优先级 |
|---|---|---|
| SIFS | DATA 后的 ACK、RTS 后的 CTS、分片间响应等立即应答 | 高,时间短 |
| DIFS | 普通数据站在竞争信道前等待 | 低于 SIFS,时间长 |
不使用 RTS/CTS 时,普通单播数据帧的典型过程为:
信道空闲 DIFS -> 随机退避 -> DATA -> SIFS -> ACK
使用 RTS/CTS 时:
DIFS -> 退避 -> RTS -> SIFS -> CTS -> SIFS -> DATA -> SIFS -> ACK
SIFS 比 DIFS 短,使已经开始的 DATA/ACK 或 RTS/CTS 交换优先完成,其他普通站点不能在响应帧之前抢占信道。
5.3 退避计数器的工作方式
- 站点需要竞争信道时,从当前竞争窗口中随机选择一个退避计数值。
- 信道每保持空闲一个时隙,计数器减 1;减到 0 时发送。
- 退避过程中若信道变忙,计数器冻结;信道重新空闲并持续 DIFS 后继续倒计时,而不是重新随机选择。
- 发送失败/重传时必须退避并扩大竞争窗口。
- 一次成功发送后,即使队列中还有下一帧,也要进行规定的发送后退避,避免同一站连续独占信道。
- 若站点刚产生一帧、信道已持续空闲 DIFS,且不存在发送后退避等约束,可直接发送而不先随机退避。
5.4 隐蔽站、RTS/CTS 与 NAV
若站点 A 和 C 互相听不到,但二者都能到达 AP,则 A、C 同时向 AP 发送会在 AP 处碰撞,它们互为隐蔽站。
RTS/CTS 的信道预约过程:
- A 向 AP 发送 RTS,并在 Duration 字段声明完成本次交换所需的剩余时间。
- AP(接收站)在 SIFS 后向发送站 A 返回一个以 A 为接收地址的 CTS 控制帧。CTS 不是 MAC 广播帧,但处在无线覆盖范围内的其他站可以旁听。
- 能听到 RTS 或旁听到 CTS 的其他站点读取 Duration 字段并设置网络分配向量 NAV,在预约期内保持静默。
- A 在 SIFS 后发送 DATA,AP 再在 SIFS 后回复 ACK。
NAV 是虚拟载波监听的倒计时器。各帧中的 Duration/NAV 剩余时间为:
$$NAV_{RTS}=SIFS+T_{CTS}+SIFS+T_{DATA}+SIFS+T_{ACK}$$
$$NAV_{CTS}=SIFS+T_{DATA}+SIFS+T_{ACK}$$
$$NAV_{DATA}=SIFS+T_{ACK}$$
RTS/CTS 能显著缓解隐蔽站碰撞,但控制帧本身仍可能碰撞,也不能消除所有无线冲突。
5.5 2024 年真题:CTS 中的 NAV
条件:DIFS 为 $128,\mu s$,SIFS 为 $28,\mu s$;RTS、CTS、ACK 的发送时延分别为 $3、2、2,\mu s$。数据帧总长 $1998,B$,速率 $54,Mb/s$,忽略传播时延。题目问其他终端旁听到 AP 发出的、寻址给发送站 A 的 CTS 时设置的 NAV。
数据帧发送时延:
$$T_{DATA}=\frac{1998\times8}{54\times10^6}=296,\mu s$$
CTS 发出后剩余的交换为 SIFS、DATA、SIFS、ACK:
$$ \begin{aligned} NAV_{CTS}&=28+296+28+2\ &=354,\mu s \end{aligned} $$
DIFS、RTS 和 CTS 自身已经过去,不能再计入 CTS 的 NAV。
答案:B,$354,\mu s$。
5.6 802.11 的可靠传输与地址字段
5.6.1 链路层可靠性
在典型的普通单播数据帧交换中,802.11 接收端正确收到帧后,在 SIFS 后返回 ACK。发送端若未收到 ACK,就认为该帧或确认可能丢失,并按规则退避重传;达到重试上限仍失败时会放弃该帧。因此,这是提高本无线链路交付可靠性的链路层机制,而非保证每帧必达,也不能替代 TCP 的端到端可靠传输。组播、广播通常没有这种逐帧 ACK;块确认等机制也不按“每个数据帧立即回复一个 ACK”的方式工作。
5.6.2 四地址字段映射
| 去往 DS | 来自 DS | 地址 1 | 地址 2 | 地址 3 | 地址 4 |
|---|---|---|---|---|---|
| 0 | 0 | 目的地址 DA | 源地址 SA | BSSID | 未使用 |
| 0 | 1 | 目的站地址 DA | 发送 AP 地址/BSSID | 原始源地址 SA | 未使用 |
| 1 | 0 | 接收 AP 地址/BSSID | 源站地址 SA | 最终目的地址 DA | 未使用 |
| 1 | 1 | 接收 AP 地址 RA | 发送 AP 地址 TA | 最终目的地址 DA | 原始源地址 SA |
主机 A 通过 AP 向同一 BSS 中的 B 发送时分两跳:
- A 到 AP:去往 DS=1、来自 DS=0,地址 1 为 AP/BSSID,地址 2 为 A,地址 3 为 B。
- AP 到 B:去往 DS=0、来自 DS=1,地址 1 为 B,地址 2 为 AP/BSSID,地址 3 为原始源站 A。
因此题目问 AP 转发给 B 时,答案为:
去往 DS = 0
来自 DS = 1
地址 3 = A 的 MAC 地址
5.7 模拟题:完整 RTS/CTS 交换时间
条件:DIFS=$128,\mu s$,SIFS=$28,\mu s$,RTS/CTS/ACK 的发送时延分别为 $3、2、2,\mu s$;数据帧 $1100,B$,速率 $11,Mb/s$。忽略传播时延、误码、碰撞和随机退避时间。
$$T_{DATA}=\frac{1100\times8}{11\times10^6}=800,\mu s$$
从决定发送到收到 ACK,依次经历:
$$DIFS+RTS+SIFS+CTS+SIFS+DATA+SIFS+ACK$$
$$ \begin{aligned} T&=128+3+28+2+28+800+28+2\ &=1019,\mu s \end{aligned} $$
答案:B,$1019,\mu s$。
5.8 易错点
- CSMA/CA 不是完全消除碰撞,而是通过监听、退避、预约和确认降低碰撞概率。
- RTS 后、CTS 后、DATA 后都等待 SIFS;普通竞争发送前等待 DIFS。
- CTS 中的 NAV 只计算 CTS 之后剩余的 SIFS、DATA、SIFS、ACK,不包含已完成的 DIFS/RTS/CTS。
- 退避倒计时遇忙应冻结,重新空闲并等待 DIFS 后继续,不是每次从头抽取。
- 普通单播帧的链路层 ACK/重传提高单跳交付可靠性,但有重试上限,不能替代 TCP 的端到端可靠性;组播、广播通常不逐帧 ACK。
- AP 向无线站转发属于“来自 DS”,故去往 DS=0、来自 DS=1,地址 3 保存原始源地址。
相关知识
- 科目导航:计算机网络导航
- 阅读顺序:上一篇:透明传输与 PPP · 下一篇:网络层知识框架
- 关联专题:数据链路层总纲
5.9 本节复盘
- 802.11 使用 CSMA/CA;普通单播交换通常使用 ACK 与重传,但组播/广播及块确认等模式不能概括为“所有帧逐帧 ACK”。SIFS 响应优先级高于 DIFS 普通竞争。
- RTS/CTS 通过 Duration 字段设置 NAV,缓解互相听不到的隐蔽站冲突。
- 2024 年 CTS NAV 为 $28+296+28+2=354,\mu s$。
- RTS/CTS 完整交换时间按
DIFS-RTS-SIFS-CTS-SIFS-DATA-SIFS-ACK顺序累加。 - AP 转发给无线站时去往 DS=0、来自 DS=1,地址 3 是原始源站 MAC 地址。