
上一篇介绍 VLAN 时,我们把一套物理交换网络划成了多个逻辑广播域。交换机和 VLAN 解决的是"帧应该在什么范围内转发"的问题;但当多个设备共享同一条传输介质时,在帧真正发出去之前,还有一个更底层的问题:谁现在可以发送?
如果两个设备几乎同时把信号送入同一条共享电缆,或同时向同一个无线接收点发射,信号会相互干扰,接收方往往无法正确还原任何一帧。这种现象称为碰撞 。介质访问控制协议的任务,就是协调多个设备对共享信道的使用权。
这一篇仍处于 TCP/IP 五层模型的数据链路层。我们先建立"介质访问控制"这条主线,再详细比较共享有线以太网使用过的 CSMA/CD,以及 Wi-Fi 仍在使用的 CSMA/CA。读完后,你应该能回答两个日常问题:为什么现代交换机接网线时通常没有碰撞;为什么 Wi-Fi 明明显示信号满格,多设备同时使用时仍可能变慢。
一、什么是介质访问控制?
网络中的链路并不都是一对一的。
- 点对点链路只连接两个节点,例如电脑与交换机端口之间的一根网线,或两台路由器之间的一条专线。链路两端清楚谁在通信,通常没有多设备抢同一段介质的问题。
- 广播链路 由多个节点共享同一传输介质。早期总线型以太网的多台主机共用一根同轴电缆;Wi-Fi 的多个无线设备共用某一段无线信道。一个节点发出的信号可能被范围内多个节点感知。(碰撞)
广播链路的优势是部署简单、介质可以复用;代价是设备必须协调发送时机。没有协调时,A 和 B 都认为"现在没人说话",便同时发送,结果信号叠加,谁也没有成功传完一帧。
介质访问控制(Media Access Control,MAC)就是这套协调规则。这里的 MAC 指"控制对介质的访问",不要和 MAC 地址混淆:
| 名称 | 解决的问题 |
|---|---|
| MAC 地址 | 在局域网内标识某个网络接口,回答"帧要交给谁" |
| 介质访问控制 | 协调共享信道的发送机会,回答"现在谁能发" |
介质访问控制通常追求三件事:
- 单个设备独占发送时尽量用满信道;
- 多个设备都有数据时让它们公平地共享;
- 发生竞争或错误时避免长期卡死在无效传输中。
二、介质访问控制的三种基本思路
面对共享信道,教材中常把协议分为三类。这三类不是同一个协议的先后版本,而是三种不同的资源分配思路。
1. 信道划分:提前划出各自的"车道"
信道划分协议事先把共享资源分成若干部分,再分配给不同设备。常见方式包括:
| 方法 | 划分的资源 | 直观理解 |
|---|---|---|
| 频分复用(FDM) | 频率 | 每个人使用不同车道 |
| 时分复用(TDM) | 时间 | 每个人在自己的时间段发言 |
| 码分多址(CDMA) | 码字 | 多人同时发送,但用不同"口令"区分 |
它的优点是可预测、碰撞少;缺点是设备暂时没有数据时,分给它的资源可能闲置。适合业务稳定、需要明确资源保障的场景。
2. 随机接入:有数据时自己争取
随机接入协议不预先把时间或频率固定分给每个节点。设备有数据就按共同规则争用信道;空闲时,单个设备可以使用全部带宽;冲突后则通过等待和重传恢复。
CSMA/CD 与 CSMA/CA 都属于这一类。它们很适合设备数量和发送需求不断变化的局域网,但负载很高时,竞争和等待会带来额外开销。
3. 轮流协议:按顺序获得发送权
轮询或令牌传递会让节点按顺序获得发送资格。它兼具一定公平性,也避免了随机竞争中的频繁碰撞;但需要维护控制节点或令牌,控制开销和故障处理更复杂。
这一篇的重点是第二类:随机接入。它的核心不是让碰撞绝对消失,而是让设备在竞争中尽量高效地使用共享信道。
三、从 ALOHA 到 CSMA:为什么要先监听?
ALOHA协议
最朴素的随机接入思路是:设备一有数据就发送;如果过后发现失败,再随机等一会儿重发。纯 ALOHA 就接近这种思路。
ALOHA协议最早由夏威夷大学提出,其核心是"碰撞后随机重发" 。即节点在任意时刻发送数据,若检测到碰撞则随机重传。若多节点同时发送导致碰撞,节点会随机等待0-7秒后重发。
它实现简单,但两个帧只要在时间上有部分重叠就会碰撞,信道利用率很低。
ALOHA 协议分为纯 ALOHA 协议和时隙 ALOHA 协议两种:
- 纯ALOHA:节点随时发送,碰撞概率较高,适用于低负载场景;
- 时隙ALOHA:将时间划分为固定时隙,节点只能在时隙开始时发送。
纯ALOHA协议
纯 ALOHA 协议的基本思想是,
- 当总线形网络中的任何站点需要发送数据时,可以不进行任何检测就发送数据。
- 若在一段时间内未收到确认 ,则该站点就认为传输过程中发生了冲突 。发送站点需要等待一段随机的时间后再发送数据,直至发送成功。其核心特点是完全去中心化且无需时间同步。
纯 ALOHA 网络的吞吐量很低,为了克服这个缺点,便产生了时隙 ALOHA 协议。纯ALOHA更多用于低密度或应急场景。尽管效率较低,其无需同步的优势在硬件受限的物联网设备中仍具价值。
时隙ALOHA协议
时隙ALOHA 协议
- 同步各站点的时间,将时间划分为一段段等长的时隙(Slot) ,规定站点只能在每个时隙开始时才能发送帧 ,发送一帧的时间必须小于或等于时隙的长度。
- 这样就避免了用户发送数据的随意性,降低了产生冲突的可能性,提高了信道的利用率。是一种基于时间同步的随机接入协议 ,通过固定时隙减少碰撞概率。
下图中表示两个站的时隙ALOHA协议的工作原理。每个帧到达后,一般都要在缓存中等待一段小于时隙T0的时间,才能发送出去。当在一个时隙内有两个或两个以上的帧到达时,在下一个时隙将产生冲突。冲突后重传的策略与纯 ALOHA 协议的情况相似。

CSMA协议
在时隙ALOHA和纯ALOHA中,节点独立发送数据,不考虑其他节点的活动,导致碰撞频繁。而载波侦听多路访问(CSMA)通过引入礼貌性规则,显著减少冲突。
ALOHA 网络发生冲突的概率很大。若每个站点在发送前都先监听公用信道,发现信道空闲后再发送 ,则会大大降低冲突的可能性,从而提高信道的利用率,载波监听多路访问(Carrier Sense Multiple Access, CSMA)协议依据的正是这一思想。CSMA 协议是在 ALOHA 协议基础上提出的一种改进协议,它与 ALOHA 协议的主要区别是多了一个载波监听装置。
text
有帧要发送
|
监听共享介质
|
+-- 忙:暂不发送
|
+-- 空闲:尝试发送
若设备能听到其他设备正在发送,就先等待,显然能减少许多本可避免的碰撞。但监听只能感知本地当下收到的信号,不能消除传播时延。
例如,A 的信号从共享电缆一端传到另一端需要一段时间。A 刚开始发送的瞬间,远端 B 还未收到 A 的信号;B 此时监听到的仍是空闲,也会开始发送。两路信号终究会在介质中相遇并碰撞。
因此,"先听后发"降低了冲突概率,但并不等于"先听后发就不会冲突"。
CSMA 的三种坚持策略
当设备发现信道忙,或者刚刚变空闲时,应该怎么做?不同的 CSMA 策略给出了不同答案。
| 策略 | 信道忙时 | 信道空闲时 | 优点与代价 |
|---|---|---|---|
| 1-坚持 CSMA | 持续监听 | 立即发送 | 空闲后利用率高,但多个设备同时等候时容易一起发送 |
| 非坚持 CSMA | 放弃监听,随机等待一段时间,再监听 | 立即发送 | 减少"大家同时起跑",但可能让信道额外空闲 |
| p-坚持 CSMA | 持续监听至时隙边界 | 以概率 p 发送,以概率 1-p 延后一个时隙,直到数据发送成功 | 在利用率与碰撞概率之间折中,适用于时隙化信道(只适用于时分信道) |
这些策略不需要死记具体名称,更重要的是理解取舍:等得越积极,空闲信道越不容易浪费,但多个设备一起发送的风险越高;等得越随机,碰撞风险下降,但时延和空闲时间可能增加。
四、CSMA/CD:有线共享介质上的"边发边听"
在传统CSMA中,节点发送数据时不检测碰撞,导致即使发生冲突也会持续传输。而CSMA/CD通过实时监测信道状态 ,在碰撞发生时立即停止传输,显著提升效率。
CSMA/CD 中的 CD 是 Collision Detection,意为冲突检测。它用于早期总线型以太网,以及通过集线器连接的半双工以太网。在这些网络里,多台设备确实共享同一个冲突域。
- 对于全双工网络 ,因为全双工采用两条信道,分别用来发送和接收,在任何时候,发收双方都可以发送或接收数据,不可能产生冲突,所以不需要CSMA/CD 协议。
载波监听是指每个站点在发送前和发送过程中都必须不停地检测信道
- 在发送前检测信道是为了获得发送权,在发送过程中检测信道是为了及时发现发送的数据是否发生冲突。站点要在发送数据前先监听信道,只有信道空闲时才能发送。
冲突检测(Collision Detection)就是边发送边检测,适配器(网卡)边发送数据边检测信道上电压的变化情况
- 当检测到电压的变化幅度超过一定的门限值时,表明发生了冲突,适配器要立即停止发送数据,等待一段随机时间后再次发送。
CSMA/CD 的工作流程可简单地概括 "先听后发,边听边发,冲突停发,随机重发"。
1. CSMA/CD 的发送流程
- 准备帧。 网卡把上层数据封装为以太网帧,等待发送。
- 监听。 若介质忙,继续等待;若检测为空闲,开始发送。
- 边发边检测。 发送期间,网卡持续监测介质上的信号,判断是否出现了与自身发送信号不一致的异常能量或电压变化。
- 发现碰撞,立即中止。 确认碰撞后不再继续发送剩余帧,以减少无效占用。
- 强化碰撞信号。 发送短暂的干扰信号,使其他站点也能明确感知此次碰撞。
- 随机退避。 等待一个随机时间,再回到第 2 步重新竞争。
这里的关键是第 3 步。CSMA/CD 不是"发送完后再看看是否成功",而是在发送过程中检测;一旦确认失败就止损。
2. 争用期:最晚何时能发现远端碰撞?
假设 A 与 B 位于共享网络的两端,A 的信号传播到 B 需要单程传播时延 tau。最不利的情况是:A 刚开始发送后,B 在快要收到 A 信号的那一刻也开始发送。碰撞发生后,碰撞影响还要传播回 A。
从 A 开始发送,到 A 最晚知道发生碰撞,最长大约需要两个单程传播时延。以太网把这个最长往返时间称为争用期 或冲突窗口。
- 争用期 = 2 × 单程最大传播时延
只有发送方已经发送满一个争用期仍未检测到碰撞,才能确定这次发送没有受到最远端同时发送的影响。
3. 最短帧长:为什么帧不能太短?
现在考虑一种情况:某站发送一个很短的帧,但在发送完之前并未检测出冲突。假定这个帧在继续向前传播到达目的站之前和别的站发送的帧发生了冲突,因此目的站将收到有差错的帧(当然会把它丢弃) 。然而,发送站却不知道发生了冲突,因此不会重传这个帧。
措施:为了避免发生这种情况,就得保证在争用期2τ内(因为传播回来也需要时间,所以是2τ而不能是τ),数据不能被发送完,就得规定数据的最小长度。以太网规定了一个最短帧长(争用期内可发送的数据长度)。
- 在争用期内若检测到冲突,就停止发送,此时已发送出去的数据一定小于最短帧长
- 因此凡长度小于这个最短帧长的帧,就都是因为冲突而异常中止的无效帧。
用纯文本公式表示为:
text
最短帧发送时间 >= 2 × 单程最大传播时延
最短帧长(比特) >= 2 × 单程最大传播时延(秒)× 链路速率(bit/s)
这条约束把帧长、链路速率和网络最大覆盖范围联系起来:在速率固定时,网络越长,传播时延越大,保证检测碰撞所需的最短帧也越长;帧格式固定时,速率越高,允许的网络直径越受限制。
经典以太网 MAC 帧最小长度为 64 字节(不包含物理层前导码)。其中首部和 FCS 共占 18 字节,因此数据字段不足 46 字节时需要填充。这个最小值源于共享半双工以太网的碰撞检测需求。
4. 截断二进制指数退避:碰撞后怎么等?
两台设备如果每次碰撞后都立刻重传,很可能再次同步碰撞。CSMA/CD 用截断二进制指数退避算法 来确定冲突后重传的时机,它让发生冲突的站点在停止发送后,推迟一个随机的时间再重新发送。
算法精髓如下:
第 n 次碰撞后,可按下面的思路理解:
-
确定基本退避时间,一般取2倍的总线端到端的传播时延2τ(争用期)
-
从离散的整数集合 0,1,...,(2\^k−1) 中随机取出一个数,记为 r,重传所需推迟的时间就是 r 倍的争用期,即 2rτ。
参数 k=min重传次数,10,可见当重传次数不超过 10 时,参数 k 等于重传次数;但当重传次数超过 10 时,k 就不再增大,而一直等于 10。
-
当重传达16次仍不成功时,说明网络太拥挤,认为该帧永远无法正确发出,抛弃该帧并向高层报告出错(这个条件容易忽略,请注意)。

使用截断二进制指数退避算法可使重传需要推迟的平均时间随重传次数的增大而增大(也称动态退避),因此能降低发生冲突的概率,有利于整个系统的稳定。
以太网还规定帧间最小间隔为9.6μs,相当于发送96比特的时间。这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,为接收下一帧做好准备。
五、现代有线以太网为什么基本不用 CSMA/CD?
容易记成"有线网络使用 CSMA/CD,Wi-Fi 使用 CSMA/CA",但这句话只适合描述历史和概念。更准确的说法是:
CSMA/CD 适用于共享、半双工以太网;现代主机接入交换机时通常使用全双工点对点链路,因此没有碰撞,也不运行 CSMA/CD。
交换机的每个端口通常连接一台主机或另一台交换机。发送与接收可以同时进行,并且端口之间不再共享一根电缆形成的冲突域。即使许多主机同时发送,交换机也通过不同端口和缓存来处理,而不是让它们的物理信号在同一根介质上相撞。
如果交换机端口下挂集线器,或某条旧链路被协商成半双工,多个设备仍可能共享冲突域,此时才需要 CSMA/CD。现代网络的性能瓶颈依旧可能出现在交换机输出端口、上联链路或路由器队列,但那是排队与带宽竞争,不是旧式以太网的物理碰撞。
六、为什么无线网络不能简单"边发边检测"?
无线网络同样共享信道,也会碰撞,但它很难可靠使用 CSMA/CD,主要有两个原因。
1. 自己发出的信号太强
无线网卡发射时,本机信号远强于远处设备传来的信号。设备很难一边高功率发射,一边准确分辨出较弱的外来信号是否也在发送;这会让冲突检测的实现成本和误判风险很高。
2. 隐藏站问题
手机 A 和笔记本 B 都能与同一台 AP 通信,但由于距离、墙壁或遮挡,它们可能彼此听不见。A 监听后认为信道空闲,B 监听后也认为信道空闲;两者同时向 AP 发送时,信号会在 AP 处相互干扰。
text
主机 A --- 无线 ---> AP <--- 无线 --- 主机 B
A 与 B 听不见对方,但都可能干扰 AP
这就是隐藏站问题 。它说明"我没有听到别人"并不能推出"接收方附近没有其他传输",所以无线环境不能依赖发送过程中的本地检测来解决全部冲突。
七、CSMA/CA:尽量在发送前错开,并在发送后确认
CSMA/CA 中的 CA 是 Collision Avoidance,意为冲突避免。它是 IEEE 802.11 Wi-Fi 使用的竞争接入机制。这里的"避免"并不是保证零碰撞,而是通过多层措施降低碰撞概率;若仍然失败,再依靠确认和重传恢复。
1. 基本发送流程
当无线站点有数据帧要发送时,可以把过程理解为:
text
监听信道
|
信道空闲后,先等待规定的帧间间隔
|
选择随机退避计数,在信道持续空闲时倒计时
|
计数归零,发送数据帧
|
等待接收方 ACK 确认
|
+-- 收到 ACK:本帧发送成功
|
+-- 未收到 ACK:扩大竞争窗口,退避后重传或最终放弃
与 CSMA/CD 相比,CSMA/CA 没有"边发边检测到碰撞就中止"的步骤。无线设备通常把整帧发完,再以是否收到 ACK 来判断这次发送有没有成功。
2. 帧间间隔:不让新的数据帧抢占已有对话
信道刚变为空闲时,设备不是立刻发送数据。802.11 使用不同长度的帧间间隔来安排优先级。
- SIFS 是较短的帧间间隔,常用于 ACK、CTS 等应答控制帧;它让一次已开始的对话能够快速完成。
- DIFS 比 SIFS 更长,普通数据帧需要等待这一类间隔后,才进入竞争过程。
因此,当接收方准备回复 ACK 时,其他设备不会因为刚好发现空闲就抢在 ACK 前发送。
3. 随机退避:多个设备不同时起跑
若所有设备在等待 DIFS 后都立即发送,碰撞仍会频繁发生。CSMA/CA 让每个设备从竞争窗口中随机选一个退避计数。
- 信道保持空闲时,计数按时隙递减;
- 信道变忙时,计数暂停并保留;
- 信道再次空闲并满足帧间等待后,从剩余数值继续倒计时;
- 计数减到 0 的设备先发送。
碰撞或未收到 ACK 后,竞争窗口通常会增大。这样竞争越激烈,设备可选的等待范围越宽,再次同一时刻发送的概率就越低。
4. ACK 与链路层重传:用结果判断是否成功
接收方正确收到数据帧后,会在较短的帧间间隔后回复 ACK。发送方收到 ACK,才确认该帧已经送达;若在规定时间内没有收到 ACK,则认为本次发送没有成功,进入退避和重传流程。
没有收到 ACK 不一定只意味着碰撞,也可能是无线衰落、外部干扰或接收方无法正确解码。对发送方来说,处理原则相同:该帧没有得到确认,需要按协议重新争用信道。
5. RTS/CTS:为隐藏站提供可选预约
RTS/CTS 是 Request To Send 和 Clear To Send 的缩写,可理解为"请求发送"和"允许发送"。它为某些场景提供额外预约机制:
text
发送方 -- RTS(请求发送) --> 接收方
发送方 <-- CTS(允许发送) -- 接收方
发送方 -- 数据帧 -----------> 接收方
发送方 <-- ACK ------------- 接收方
如果隐藏站听不到发送方的 RTS,却能听到 AP 或接收方发出的 CTS,就会知道接收方附近已有预约传输,应在这段时间内保持安静。这样可以降低长数据帧在接收端附近被隐藏站干扰的概率。
RTS/CTS 本身也会占用时间,因此通常按帧长阈值、网络状况或设备配置选择性使用;它不是所有 Wi-Fi 帧都必须经历的固定步骤。
八、CSMA/CD 与 CSMA/CA 对照
| 对比维度 | CSMA/CD | CSMA/CA |
|---|---|---|
| 典型场景 | 共享、半双工有线以太网 | IEEE 802.11 无线局域网(Wi-Fi) |
| 发送前 | 监听空闲后发送 | 监听后等待帧间间隔,并随机退避 |
| 发送中 | 持续检测是否碰撞 | 通常不做有效的边发边冲突检测 |
| 失败判断 | 直接检测到碰撞 | 未收到 ACK 等结果表明本帧未成功 |
| 主要目标 | 碰撞发生后尽快止损 | 尽量在发生前降低碰撞概率 |
| 隐藏站 | 不属于典型问题 | 典型问题,可借 RTS/CTS 缓解 |
| 现代状态 | 在全双工交换式以太网中通常不运行 | 仍是 Wi-Fi 竞争接入的重要基础 |
九、总结
介质访问控制解决的不是"帧该转发给谁",而是"共享介质上谁现在能发送"。信道划分、随机接入和轮流协议分别代表预先分配、按需竞争和按顺序授权三种思路;CSMA/CD 与 CSMA/CA 都属于按需竞争的随机接入协议。
CSMA/CD 依赖共享半双工有线介质能够边发边检测,因此碰撞后可以立刻中止并随机退避;CSMA/CA 面对难以边发边听、还可能有隐藏站的无线环境,则通过帧间间隔、随机退避、ACK 确认、重传和可选 RTS/CTS 来尽量避免碰撞。现代有线交换网络很少再需要 CSMA/CD,而 Wi-Fi 的共享性决定了 CSMA/CA 仍然重要。
至此,数据链路层的主线已经完整串起:帧负责封装,MAC 与 ARP 帮助局域网寻址,交换机与 VLAN 决定二层转发范围,介质访问控制协调共享信道的使用。接下来进入网络层,我们将从局域网内"如何把帧交给下一跳",转向跨越多个网络时 IP 协议究竟解决了什么问题。
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!