# CSMA/CA 介质访问控制协议 ## CSMA/CA vs CSMA/CD | 特性 | CSMA/CD(以太网) | CSMA/CA(WiFi) | |------|-------------------|-----------------| | 碰撞处理 | 检测并重传 | 预先避免 | | 半双工/全双工 | 全双工 | 半双工 | | 为什么不同 | 有线可检测碰撞 | 无线无法可靠检测碰撞 | WiFi 使用 CA(Collision Avoidance,避免碰撞)而非 CD(Collision Detection,检测碰撞),因为: 1. **发送方无法监听**:自身发射信号远强于接收信号 2. **隐藏终端问题**:A 和 C 都听不到对方,但都能干扰 B 3. **暴露终端问题**:C 可以发送给 D,但不需要等待 A→B 完成 ## CSMA/CA 工作流程 ### 基本流程 ``` 1. 监听信道(Carrier Sense) ├── 物理层载波侦听(PHY-CS):检测能量电平 └── MAC 层虚拟载波侦听(VCA):NAV 计数器 2. 信道空闲? ├── 是 → 等待 DIFS,然后发送 └── 否 → 等待信道空闲 → DIFS → 进入退避 3. 退避(Backoff) ├── 随机选择 backoff counter ∈ [0, CW] ├── 每经过一个 slot time,counter -1 ├── 信道变忙?→ 暂停 counter ├── 信道空闲 ≥ DIFS?→ 恢复计数 └── counter = 0?→ 发送帧 4. 等待 ACK ├── 收到 ACK → 成功,CW 重置为 CWmin └── 未收到 ACK → 失败,CW 翻倍(二进制指数退避) ``` ### 时间参数 | 参数 | 20 MHz | 40 MHz | 说明 | |------|--------|--------|------| | SIFS | 16 μs | 16 μs | 短帧间间隔(高优先级响应) | | PIFS | 28 μs | 28 μs | PCF 帧间间隔 | | DIFS/DCF-IFS | 34 μs | 34 μs | 分布式帧间间隔 | | EIFS | 492 μs | 492 μs | 扩展帧间间隔(错误后) | | Slot time (2.4G) | 20 μs | 20 μs | 退避时隙 | | Slot time (5G) | 9 μs | 9 μs | 5 GHz 更短的时隙 | ### CW(Contestation Window)参数 ``` CWmin / CWmax: - 802.11a/b/g: CWmin=15, CWmax=1023 - 802.11n/ac/ax: CWmin=15, CWmax=1023(默认) CWmin=15, CWmax=1023(QoS 数据) 退避过程: 第1次尝试: CW = [0, 15] → 随机选一个数 第2次尝试: CW = [0, 31] → 翻倍 第3次尝试: CW = [0, 63] → 继续翻倍 ... 第N次尝试: CW = [0, 1023] → 达到上限后不再增加 ``` ## RTS/CTS 机制 ### 隐藏终端问题 ``` A ────→ B ←──── C A 和 C 互相听不到,但都会干扰 B。 当 A 正在发送给 B 时,C 也开始发送 → 碰撞! ``` ### RTS/CTS 解决方案 ``` A B C │ │ │ │──RTS────→│ │ (C 听到 RTS,设置 NAV) │←─CTS────│ │ (C 听到 CTS,延长 NAV) │──Data──→│ │ (C 保持沉默) │←─ACK───│ │ ``` - **RTS(Request to Send)**:发送方请求发送,包含数据帧长度 - **CTS(Clear to Send)**:接收方确认,通知周围设备保持安静 - **NAV(Network Allocation Vector)**:虚拟载波侦听计数器 ### 何时启用 RTS/CTS? | 场景 | 建议 | |------|------| | 默认 | 禁用(开销大) | | 隐藏终端严重 | 启用,或设置低 RTS threshold | | 小帧传输多 | 谨慎使用(RTS/CTS 开销可能超过数据本身) | ## EIFS(扩展帧间间隔) 当接收方检测到帧错误(FCS 校验失败)时: ``` 正常情况: DIFS → backoff → transmit 错误后: EIFS → backoff → transmit EIFS = SIFS + ACK_time + DIFS 目的:给发送方时间重传,避免接收方在恢复期间抢占信道 ``` ## 性能分析 ### 吞吐量的理论上限(MacGregor- Kleinrock 模型) ``` S = (Pₜ × Tₜ) / (Tₜ + Tₑ + Tᵢ) 其中: S = 吞吐量效率 Pₜ = 传输成功概率 Tₜ = 成功传输时间 Tₑ = 碰撞/失败后的平均等待时间 Tᵢ = 信道空闲时间 ``` ### 实际观察到的规律 - **1-2 个竞争设备**:效率 > 80% - **5-10 个竞争设备**:效率 ~ 50-70% - **20+ 个竞争设备**:效率 < 30%,退避时间占主导