现代智能汽车中的无线技术20——Wi-Fi(8)

本文介绍 CSMA/CA和RTS/CTS 握手机制

CSMA/CA (载波监听多路访问/冲突避免) 是 Wi-Fi 网络中最底层的"交通规则"。

如果说光纤通信是"专线专用的铁路",那么 Wi-Fi 就是"没有红绿灯的环岛"。CSMA/CA 就是为了保证大家在乱糟糟的空气中不撞车而设计的一套礼貌原则。

它的核心逻辑可以概括为四个字:"先听后说"。

一、 名字拆解

CS (Carrier Sense 载波监听):

  • 意思就是**"听"**。在想说话之前,先竖起耳朵听听空气里有没有电波的声音。

MA (Multiple Access 多路访问):

  • 意思就是**"很多人"**。很多人共用这一个信道。

CA (Collision Avoidance 冲突避免):

  • 意思就是**"尽量不撞"**。

  • 对比: 有线以太网用的是 CSMA/CD (冲突检测)。以太网是"边说边听,撞了就停";Wi-Fi 是"因为我说话时听不见别人,所以我必须确保万无一失再开口"。

二、 CSMA/CA 的工作流程(礼貌的绅士)

假设你的手机(A)想给路由器发一张照片:

第一步:监听 (Listen)

  • A 监测信道。

  • 如果有人在发数据(信道忙),A 就闭嘴,继续监听。

  • 如果信道空闲了,A 也不能马上发(怕别人也刚等到空闲,大家一起冲出去会撞)。

第二步:等待 (DIFS & Backoff)

  • DIFS (固定等待时间): 这是一个必须等待的"冷静期"。

  • 随机退避 (Random Backoff): 这是 Wi-Fi 的精髓。

  • A 会在心里随机选一个数字(比如 5)。

  • B 也想发,随机选了个数字(比如 8)。

  • 大家开始倒数:信道每空闲一个时隙,数字减 1。

  • A 数到 0 了(比 B 快),A 抢到了信道!

第三步:发送 (Transmit)

  • A 开始发送数据帧。

第四步:确认 (ACK)

  • 路由器收到数据后,必须回一个 ACK (确认帧) 给 A。

  • A 收到 ACK →→ 发送成功。

  • A 没收到 ACK →→ 判定刚才肯定撞车了,数据丢了。A 会把刚才的随机范围扩大(比如从 0-15 变成 0-31),重新排队重发。

三、 它的局限性:隐藏节点问题

CSMA/CA 虽然很礼貌,但有个死穴。

场景: 路由器在中间,你(A)在左边,老王(B)在右边。A 和 B 离得太远,互相听不见。

  1. A 听了一下(CSMA),没听见 B 说话,于是 A 开始发数据给路由。

  2. 同时,B 听了一下,没听见 A 说话,B 也开始发数据给路由。

  3. 结果: 路由器同时收到了 A 和 B 的信号,信号在路由器那里撞车了,全废了。

这就是隐藏节点问题。为了解决这个,Wi-Fi 引入了 RTS/CTS (请求发送/清除发送) 机制:

RTS/CTS 的工作流程(预约机制)

为了防止这种"虽然听不见对方,但还是撞车"的惨剧,Wi-Fi 引入了一个中间人协调机制。

第一步:A 发起请求 (RTS)

  • A 给路由器发一个很短的 RTS (Request To Send) 帧。

  • 意思: "老大,我要发一个大文件,大约占用 5 毫秒,请批准!"

  • 此时,老王听不见这个 RTS。

第二步:路由器全场广播 (CTS)

  • 路由器收到请求,如果信道空闲,它会立刻广播一个 CTS (Clear To Send) 帧。

  • 意思: "收到了!批准 A 发送!其他人(包括老王)全部闭嘴 5 毫秒!"

  • 关键点:虽然老王听不见 A,但他一定能听见路由器。

第三步:老王闭嘴 (NAV 设置)

  • 老王听到了路由器的 CTS,虽然不是发给他的,但他解析出了"闭嘴 5 毫秒"的指令。

  • 于是老王启动 NAV (网络分配矢量) 计时器,把自己锁住,暂停发送。

第四步:A 发送数据

  • A 收到 CTS 后,开始放心地发送真正的长数据包,不用担心有人插嘴了。

RTS/CTS 的代价与阈值

既然这个机制这么好,为什么不默认开启? 因为太啰嗦了。

  • 代价: 本来直接发数据就行,现在非要先发一个 RTS,再等一个 CTS,这增加了额外的开销 (Overhead) 和时延。如果是发微信这种小包,握手的时间比发数据的时间还长,得不偿失。

  • RTS 阈值 (Threshold):

  • 因此,路由器里通常有一个设置叫 RTS Threshold(默认通常是 2347 字节)。

  • 小于阈值的小包: 直接发,不握手(赌一把,撞了重发)。

  • 大于阈值的大包: 必须握手(因为大包一旦撞了,重发成本太高,不如先花点时间预约)。

总结

CSMA/CA 是一套**"牺牲效率换取公平和稳定"**的机制。 因为它太谨慎了(又要听,又要等随机数,还要等 ACK),所以 Wi-Fi 的实际吞吐量往往只有理论速率的 50%~60%(被称为"半双工效率损耗")。

RTS/CTS 就像是举手发言制度。在人少的时候(无隐藏节点),直接说话效率最高;但在人多且互相看不见的时候,必须先举手,老师点名允许后才能说,否则课堂就乱套了。

相关推荐
盟接之桥12 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
会员源码网13 小时前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发
米羊12113 小时前
已有安全措施确认(上)
大数据·网络
ManThink Technology15 小时前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
珠海西格电力科技15 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
QT.qtqtqtqtqt15 小时前
未授权访问漏洞
网络·安全·web安全
半壶清水16 小时前
[软考网规考点笔记]-软件开发、项目管理与知识产权核心知识与真题解析
网络·笔记·压力测试
JMchen12316 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
yuanmenghao16 小时前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix
那就回到过去16 小时前
MPLS多协议标签交换
网络·网络协议·hcip·mpls·ensp