介质访问控制

🔥 高优先级

数据链路层的另一个重点(之前一个是 ARQ 协议),重点掌握 CSMA/CD 的细节,会在选择题和解答题中考查。多路复用和 CSMA/CA 也要熟悉下,会在选择题中考查。

ALOHA 协议说实话没考察过,但是出现过在考纲中,所以还是加在教程中。

共享介质

共享介质
A
B
C
D
E

在介绍 MAC 概念之前,必须要说明一下 共享介质 的概念。

在一个网络环境中,多个设备可能需要同时访问同一个 物理介质 来发送数据,这个介质可以是 电缆光纤 或者 无线信道

当设备发送数据时,数据包会在整个介质上传播,所有连接到该介质的设备都可以接收到数据包。

如果多个设备同时发送数据,介质上的数据信号就会相互 冲突 进而导致错误。

所以 MAC 协议确保了 共享介质 上的有效、公正且有序的数据传输。

注意

其实现代网络架构很少有这种共享介质了,但是考研的语境下,只要题目出现:

  • CSMA/CD
  • 冲突(collision)
  • 传播时延
  • 最小帧长

你就要立刻切换到这个模型:

共享信道 + 广播传播 + 半双工

  • 所有设备接在同一根“线”上
  • 一个设备在一个时刻只能发送或者接收数据
  • 任意发送 = 信号扩散到整个网络
  • 所有设备都能“听到”

用一句话总结这个模型:

一人发,全网听;但只认目的地址

MAC 方式总结

介质访问控制(MAC,Media Access Control)可以分为 信道划分 以及 随机访问 两种大方向。

信道划分介质访问控制

也叫做 多路复用,在一条传输介质上同时传输 多个不同种类的信号(种类可以根据不同的参数进行划分),这样不同的设备可以发送特定类型的信号,并且不同信号之间相互不干扰,信道划分 访问控制可以分为以下几种:

  • FDM:频分多路复用
  • TDM:时分多路复用
  • WDM:波分多路复用
  • CDM:码分多路复用
随机访问介质访问控制

指多台设备共享同一个 通信介质 时,它们可以随机地尝试发送数据,而不需要事先协调,当发生冲突后再做后续的协调,以保证不会接收到错误的数据。

  • ALOHA
  • CSMA
  • CSMA/CD
  • CSMA/CA
mindmap
  root((MAC 介质访问控制))
    信道划分介质访问控制
      多路复用
        同时传输多个不同种类的信号
        不同设备发送特定类型信号
        信号间相互不干扰
      FDM
        频分多路复用
      TDM
        时分多路复用
      WDM
        波分多路复用
      CDM
        码分多路复用
    随机访问介质访问控制
      共享通信介质
        多台设备随机尝试发送数据
        无需事先协调
        冲突后进行后续协调
        保证接收正确数据
      ALOHA
      CSMA
      CSMA/CD
      CSMA/CA

多路复用

多路复用(Multiplexing)是一种技术,用于在同一 传输介质 上同时传输 多个信号,包含频分多路复用(FDM)、时分多路复用(TDM)、波分多路复用(WDM)和码分多路复用(CDM)四种。

FDM

频分多路复用(FDM)将可用带宽划分为若干个不重叠的 频段,每个 信号 占用一个频段。各个信号可以同时传输,但彼此之间不会干扰,因为它们占用不同的频率。

MUX
channel 1 (f1)
DEMUX
channel 2 (f2)
channel 3 (f3)
frequency
FDM

FDM 在传统的模拟电话系统和广播中广泛使用。

TDM

时分多路复用(TDM)将 时间 划分成若干个 时隙,每个 信号 在不同的时隙中传输。所有信号在时间上轮流使用同一传输介质。

MUX
1
DEMUX
2
3
4
1
2
3
4
1
2
3
4
TDM

TDM 常用于数字通信系统,如数字电话网络。

WDM

波分多路复用(WDM)是 FDM 的一种应用,主要用于 光纤通信。它将光纤的可用带宽划分为多个 波长(颜色),每个 信号 占用一个波长。

MUX
DEMUX
WDM

WDM 技术可以大幅增加光纤的通信容量,广泛应用于长距离和高速光纤网络。

CDM

码分多路复用(CDM)使用不同的 编码 来区分各个 信号。所有信号可以在同一 频带 上同时传输,但通过使用不同的编码序列来避免相互干扰。

虽然 CDM 的概念可以用在许多不同的传输系统中,但在实践中,它主要作为 码分多址CDMA,Code Division Multiple Access)的基础技术。

CMDA

在 CDMA 中,每一个 比特时间 划分为 m 个短的 时间槽,称为 码片(chip),每个站被指派一个惟一的 m bit 码片序列 (chip sequence) 。

  • 如果发送比特 1,则发送自己的 m 位码片序列。
  • 如果发送比特 0,则发送该码片序列的二进制反码。
+1−1① 比特时间与码片 (chip)1 个比特时间码片 1码片 2码片 3码片 41 个比特时间被划分为 m 个短时间槽,每个称为一个码片;码片是 CDMA 的最小时间单位(本例 m = 4)。② 码片序列 S(每个站点唯一)S =+1−1−1+1每个站点分配一个唯一的码片序列,不同站点的序列相互正交。③ 如何用码片序列表示比特 0 和 11比特 1发送原码片序列S = (+1, −1, −1, +1)+1−1+1−1−1+10比特 0发送反码(各码片取反)S̄ = (−1, +1, +1, −1)+1−1−1+1+1−1口诀:发 1 就发原序列,发 0 就发反码;比特 0/1 被“扩展”成一串 ±1 码片再送入信道。

简单理解就是,A 站向 C 站发出的信号用一个向量来表示,B 站向 C 站发出的信号用另一个向量来表示,两个向量要求相互 正交。向量中的分量,就是所谓的码片。

当两个或多个站点同时发送时,各路数据在信道中线性相加。为了从信道中分离出各路信号,要求各个站点的码片序列相互 正交

令向量 表示站 S 的码片向量,令 表示其他任何站的码片向量。两个不同站的码片序列正交,就是向量 的规格化内积(inner product)都是 0:

任何站的码片向量和该码片反码的向量的规格化内积都是 -1:

CDMA 的过程可以通过下图辅助理解:

CDMA码分多址工作原理站点A (发送比特1)码片序列: (+1, +1, -1, -1)+1+1-1-1比特时间被分为4个码片站点B (发送比特0)码片序列: (+1, -1, +1, -1)发送反码: (-1, +1, -1, +1)-1+1-1+1信道中线性叠加A信号 + B信号(+1,+1,-1,-1) + (-1,+1,-1,+1)= (0,+2,-2,0)接收端分离信号恢复站点A的信号接收信号 · A码片序列 = (0,+2,-2,0) · (+1,+1,-1,-1)= 1/4 × (0+2+2+0) = +1 → 比特1恢复站点B的信号接收信号 · B码片序列 = (0,+2,-2,0) · (+1,-1,+1,-1)= 1/4 × (0-2-2+0) = -1 → 比特0正交性保证A · B = 1/4 × ((+1)×(+1) + (+1)×(-1) + (-1)×(+1) + (-1)×(-1)) = 1/4 × (1-1-1+1) = 0注:码片序列必须相互正交,这样才能在接收端成功分离各路信号发送比特1时发送原码片序列,发送比特0时发送反码片序列

上图以一个实例展示了 CDMA 的工作过程:

  1. 站点 A:码片序列为

    站点 A 发送比特 1,因此发送原码片序列:

  2. 站点 B:码片序列为

    站点 B 发送比特 0,因此发送码片序列的反码:

  3. 信道叠加:两个站点的信号在信道中进行线性叠加:

  4. 信号分离

    • 恢复站点 A 的信号:

      因此,站点 A 发送的是比特 1

    • 恢复站点 B 的信号:

      因此,站点 B 发送的是比特 0

  5. 正交性:站点 A 和站点 B 的码片序列相互正交:

    正交性使不同站点发送的信号在叠加后仍然可以通过相关运算进行分离。

ALOHA 协议

ALOHA 协议是一种早期开发的 随机访问协议,用于在 共享信道 上传输数据。ALOHA 有两种基本类型:纯 ALOHA 和时隙 ALOHA。

  • 纯 ALOHA:用户可以在 任何时间 发送数据包。由于没有时间同步,数据包之间容易发生 冲突
  • 时隙 ALOHA:时间被分成离散的 时隙,用户只能在时隙的开始发送数据包。这种方法通过同步发送时间,减少了 冲突 的概率。
ALOHA 如何检测冲突

在纯 ALOHA 中:

  • 发送端 直接发,不监听信道
  • 也没有“边发边检测”的能力

那怎么知道冲突了?

靠 ACK(确认应答)机制

接收端会对数据进行差错校验,只有当接收端成功接收并通过差错校验(如 CRC)时,才会发送 ACK

纯 ALOHA

纯 ALOHA(Pure ALOHA)是一种简单的 随机接入协议,允许用户在 任意时刻 发送数据包,而无需对时间进行任何同步或分时。

Station1
Station1
Station2
Station2
Station3
Station3
Station4
Station4
Frame 1.1
Frame 1.1
Resend
Resend
Frame 1.2
Frame 1.2
Frame 2.1
Frame 2.1
Resend
Resend
Frame 3.1
Frame 3.1
Resend
Resend
Frame 4.1
Frame 4.1
Frame 2.1
Frame 2.1
Frame 4.1
Frame 4.1
Frame 3.1
Frame 3.1
Collision
duration
Collision...
Collision
duration
Collision...
Resend
Resend
Text is not SVG - cannot display

工作原理:

  • 用户 随时 发送数据包。
  • 如果数据包成功到达接收端,则传输完成。
  • 如果发生 冲突(即两个或多个用户同时发送数据包),相关用户需要等待随机的时间后重传。

时隙 ALOHA

时隙 ALOHA(Slotted ALOHA)在纯 ALOHA 的基础上引入了 时间同步,将时间划分为一系列等长的 时隙。用户只能在 时隙的开始 发送数据包。

Station1
Station1
Station2
Station2
Station3
Station3
Station4
Station4
Frame 1.1
Frame 1.1
Frame 1.2
Frame 1.2
Frame 2.1
Frame 2.1
Resend
Resend
Frame 3.1
Frame 3.1
Resend
Resend
Frame 4.1
Frame 4.1
Frame 2.1
Frame 2.1
Frame 4.1
Frame 4.1
Frame 3.1
Frame 3.1
Slot 1
Slot 1
Resend
Resend
Slot 2
Slot 2
Slot 3
Slot 3
Slot 4
Slot 4
Slot 5
Slot 5
Slot 6
Slot 6
Text is not SVG - cannot display

工作原理:

  • 时间被划分为 等长的时隙
  • 用户在 时隙的开始 时发送数据包。
  • 如果一个时隙内 只有一个用户 发送数据包,则传输成功。
  • 如果多个用户在同一时隙发送数据包,发生 冲突,相关用户等待随机时间后重传。

CSMA 协议

CSMA(Carrier Sense Multiple Access)的中文叫做 载波监听多路访问。理解 CSMA 的关键在于理解它名称中的两个部分:载波监听(Carrier Sense)和 多路访问(Multiple Access)。

  • 载波监听(Carrier Sense):因为 CSMA 属于随机访问介质控制方式,所以设备在发送数据前,需要先判断当前 通信介质 是否正被其他设备使用。

在现代网络中,“载波监听”是一个逻辑概念,指的是检测当前信道是否处于忙碌状态——在有线网络中依赖物理电平检测,在无线网络中依赖能量检测和前导码检测。

因此,载波监听 可以理解为设备具有监听当前 信道 是否空闲的能力。

  • 多路访问(Multiple Access):多个设备共享同一条 通信介质,任何设备都可以在认为信道空闲时尝试发送数据。

因此,CSMA 可以理解为:多个设备共享同一通信介质,并在发送前先监听信道是否空闲,以尽可能减少冲突的发生。

CSMA 载波监听多路访问共享通信介质 (总线/信道)设备 A准备发送载波监听设备 B等待发送载波监听设备 C等待发送载波监听设备 D空闲状态载波监听数据传输中载波监听 (Carrier Sense)• 发送前检测信道是否空闲• 如果有数据传输,等待• 避免冲突,提高传输效率多路访问 (Multiple Access)• 多个设备共享同一介质• 任何设备都可尝试发送• 提供公平的访问机会工作原理: 监听 → 判断 → 发送/等待准备发送等待中传输中空闲

然而,仅仅进行 载波监听 并不能完全避免冲突,其根本原因在于 传播时延(Propagation Delay)的存在。

这里需要理解两个重要概念:

  • 传播时延Propagation Delay) = 距离 / 信号传播速度
  • 传输时间Transmission Time) = 数据大小 / 数据传输速率

由于信号传播需要时间,设备监听到的只是 当前时刻本地接收到的信道状态,而无法立即获知网络中其他位置刚刚开始发送的数据。

例如,当两个距离较远的设备几乎同时监听到信道空闲时,它们都会开始发送。由于双方发送的信号都需要经过一段时间才能传播到对方,因此双方都会误认为信道仍然空闲,从而同时发送数据,最终在通信介质上发生 冲突(Collision)

因此,传播时延会形成一个"冲突窗口":设备监听到的"空闲"实际上反映的是过去某一时刻的信道状态,而无法预知是否已有其他设备的信号正在传播途中但尚未到达本设备。

那么 CSMA 如何处理冲突呢?

CSMA 只规定了 发送前进行载波监听 这一基本机制,并没有规定当多个设备几乎同时发送而发生冲突时应如何处理。

因此,实际网络中通常不会单独使用"纯 CSMA",而是在其基础上加入不同的冲突处理机制,形成了不同的协议:

协议是否实际应用应用场景特点
CSMA❌ 几乎没有教学概念仅规定发送前监听,不规定冲突后的处理方式
CSMA/CD✅ 是有线以太网(Ethernet)监听 + 碰撞检测 + 随机退避重传
CSMA/CA✅ 是无线局域网(Wi-Fi)监听 + 碰撞避免(尽量降低碰撞概率)+ ACK 确认

接下来将分别介绍 CSMA/CDCSMA/CA 是如何解决这一问题的。

三种类型

CSMA 也 根据其在 信道空闲 时的行为分为三种类型,如下所示:

特征1-persistent CSMANon-persistent CSMAp-persistent CSMA
信道空闲时的行为立即以发送数据立即开始传输数据在下一个时隙以概率 p 发送数据;以概率 1-p 推迟到下一个时隙
信道忙时的行为持续监听,直到信道空闲等待一个随机时间后,重新监听信道持续监听,直到信道空闲(进入空闲后的行为见上一条)
碰撞的可能性最高(多个站点同时等待,一旦空闲必然冲突)低(随机等待减少了竞争)中等(通过概率 p 分散了发送时机)
延迟特性信道空闲时,发送延迟最小;但发生碰撞时,延迟会很大。避免了多个站点的持续竞争,减少了碰撞,但可能增加平均延迟。在减少碰撞和控制延迟之间取得平衡。
适用性实际上很少用于纯ALOHA或CSMA,因为碰撞概率太高。 更像是一个理论参考。适用于非持续型流量、碰撞概率较高的网络(如早期的以太网)适用于时隙化信道,是前两种策略的一个很好折中,常用于Wi-Fi等网络。

CSMA/CD 协议

CSMA/CD(CSMA with Collision Detection,载波监听多路访问/碰撞检测)是 CSMA 的一种拓展,在了解这个知识之前,请确保你已经理解了什么是 CSMA 中的 CS(Carrier Sense 即 载波监听),以及什么是 CSMA 中的 MA(Multiple Access 即 多路访问)。

CSMA/CD 比 CSMA 多出一个 CD(Collision Detection 即 碰撞检测)的功能。

在上文中我们提到,CSMA 中监听到信道空闲可能是“虚假”,所以在 CSMA 发送数据后介质中也许会发生冲突,但 CSMA 只能依靠非常原始的方案处理冲突。

CSMA/CD 就高级一些,在发送数据期间,我们刚刚提到的 监测器件(Carrier,就是 CSMA 中 C 的简称)会 一直监听有没有冲突发生

CSMA/CD 载波监听多路访问/碰撞检测共享通信介质设备 A正在发送发送数据持续监听设备 B正在发送发送数据持续监听碰撞!数据损坏时间线t1: 开始发送t2: 碰撞发生t3: 检测到碰撞t4: 停止发送CSMA (原始版本)✓ 发送前载波监听✗ 发送时不监听✗ 碰撞后才知道失败→ 浪费带宽和时间→ 效率较低CSMA/CD (改进版本)✓ 发送前载波监听✓ 发送时持续监听✓ 实时检测碰撞→ 立即停止发送→ 提高网络效率碰撞检测(CD)工作流程1载波监听2开始发送3持续监听4检测碰撞5立即停止载波监听器件 (Carrier)发送期间持续工作,实时检测信号异常

以下图为例,假设 A 向 D 发送一段数据,C 向 A 发送一段数据,我们可以观察到:冲突发生 的时间点 和 设备检测到 冲突的时间点是不同的。

A
B
C
D
Time
Time
t1
t4
t2
t3
A 感知到
冲突
冲突发生的时刻
C 感知到
冲突

当 A 和 C 检测到冲突发生时,它们会立即停止发送,并且发送信号通知其他设备该次碰撞。

流程

CSMA/CD 的工作流程如下:

  1. 准备发送:适配器从网络层获得一个分组,封装成帧,放入网络适配器缓存准备发送。
  2. 检测信道:监听信道是否空闲,若信道空闲,则开始发送该帧;若信道忙,则持续检测直至信道空闲。
  3. 在发送过程中,适配器仍然持续检测信道。这里只有如下两种可能。
    • 发送成功:在争用期内一直未检测到冲突,该帧肯定能发送成功。
    • 发送失败:在争用期内检测到冲突,此时立即停止发送,并且广播 碰撞通知信号。接着适配器执行 指数退避算法,等待一段随机时间后返回到步骤 2。若重传 16 次仍不能成功,则停止重传并向上报错。
开始
监听信道
信道
发送数据
无冲突
?
发送数据
广播碰撞信号
重传次数
达到 16?
指数退避
Y
N
Y
N
N
Y
停止重传并向上报错

指数退避算法

在随机访问网络中,当 冲突 发生后,设备需要 等待一段时间 后重试发送,以避免再次冲突。
指数退避算法(Exponential Backoff Algorithm)通过动态调整等待时间,减少连续冲突的概率,提高网络效率。

其核心思想是当冲突发生时,设备随机选择一个等待时间,并在每次冲突后 成倍增加等待时间范围,以降低后续冲突的可能性。

指数增长规则 如下:

  • 如果是第 次重传尝试(通常从 开始),则从以下范围随机选择等待时间槽(slot)的个数:
  • 每个时间槽长度为一个基本单位(如 51.2 微秒,以太网中一个“slot time”)。
  • 最大的 通常是有限制的,例如 以太网中最大为 10(即窗口最多增长到

如果尝试达到一定次数仍冲突,放弃传输并上报错误。


举个实际例子:

假设某设备在尝试发送时检测到 冲突

  • 第 1 次重试:在 [0, 1] 中随机选择一个时间槽(即可能等待 0 或 1 个 slot time)。
  • 第 2 次重试:在 [0, 3] 中随机选择(0~3 个 slot)。
  • 第 10 次重试:在 [0, 1023] 中随机选择。
  • 第 16 次重试后仍失败:报错放弃。

限制条件

CSMA/CD 能够正常工作的 限制条件 是:

帧的传输时间至少要两倍于信号在总线上最长的传播时延(即两倍于总线端到端的单向传播时延)。

设:

  • :发送完整个数据帧所需的 传输时间(Transmission Time)
  • :信号从总线一端传播到另一端所需的 单向传播时延(Propagation Delay)

则 CSMA/CD 正常工作的条件可表示为:

其中

因此,上式也可以写成:

该公式说明:最小帧长 由网络的 传播时延传输速率 共同决定。

要在帧的发送过程中及时发现冲突,发送站必须在整个帧发送完毕之前收到冲突信号

考虑最坏情况:发送站 A 开始发送时,位于总线另一端的发送站 B 几乎同时开始发送。A 发出的信号需要经过一个传播时延 才能到达 B,而碰撞信息再传播回 A 又需要一个传播时延 。因此,发送站 A 最早也要经过 两个传播时延 后才能检测到碰撞。

所以必须满足:

否则,如果发送时间小于两个传播时延,即

发送站可能在碰撞信号返回之前就已经发送完整个数据帧,从而误认为发送成功,导致冲突无法被检测,CSMA/CD 的碰撞检测和退避机制也就失去了作用。

因此,CSMA/CD 能否正常工作,本质上取决于发送时间是否足够覆盖一个"信号往返传播时间"(Round Trip Time, RTT)。这一限制最终决定了以太网规定的 最小帧长(经典以太网为 64 B)。

注意

这一机制的依据是:冲突信号必须在网络中传播并被发送站捕获,发送站才能意识到冲突的发生。若帧的传输时延过短,发送站可能在冲突信号返回之前就已结束帧的发送,从而错过冲突的检测。

因此,帧的传输时延必须不小于传播时延的两倍,才能确保冲突能够在帧发送完毕前被发现并采取相应的碰撞处理。

A
B
Time
Time
A
B
Time
Time
B 在这个时刻接收到最后一个比特
最小传输时长 = 2 ×最大传播时延

最小帧大小 = 带宽 ×最小传输时长
A 在这个时刻传输结束
B 在 A 发送的信号刚到达的前一瞬间
开始发送数据
A 必须还在传输数据,也就是说数据传输还没有结束,
才能在这个时刻检测到冲突
一般的冲突场景
碰撞的边界情况
冲突在这个时刻发生

CSMA/CA 协议

CSMA/CD 适用于 以太网(使用有线连接的局域网),但在 无线局域网(WLAN,Wireless LAN)中无法直接使用 CSMA/CD,主要有以下原因:

  1. 无线设备 不能同时“听”和“说”:无线收发器在发送数据时,无法同时监听信道来判断是否发生碰撞。
  2. 信道干扰 比有线环境严重:无线信号受环境干扰更大,误判空闲或碰撞的概率更高。
  3. 隐藏节点问题(隐蔽站):假设 A 和 C 两台无线设备都想给 B 发送数据,但 A 和 C 彼此“看不到”,只看到 B 是空闲的。结果就是 A 和 C 同时给 B 发送,发生碰撞,但它们却以为没事。

为此,802.11 标准定义了广泛用于无线局域网的 CSMA/CA 协议,它对 CSMA/CD 协议进行修改,将 冲突检测 改为 冲突避免(Collision Avoidance,CA)。“冲突避免” 并不是指协议可以完全避免冲突,而是指协议的设计要尽量降低冲突发生的概率。

隐藏节点问题(CSMA/CD 在无线网络中失效的根因)AP`ASTACSTA在范围内在范围内A 与 C 互相"看不见"各自以为信道空闲 → 同时发送 → 碰撞且碰撞发生在 AP 侧,A 和 C 自己无法感知CSMA/CA 的解决思路冲突避免(Collision Avoidance)1载波监听(Carrier Sense)发送前先"听"信道是否忙碌2等待 DIFS + 随机退避信道空闲后等一段再随机延迟,错开发送时机3发送数据帧退避结束后发送(无法边发边检测碰撞)4等待 ACK 确认ACK 到达 → 成功;超时未到 → 重发并扩大退避窗口CSMA/CD vs CSMA/CA对比维度CSMA/CD(有线以太网)CSMA/CA(无线 802.11)冲突处理策略边发边检测,冲突后立即停止发送前退避,尽量避免冲突确认机制无需 ACK(冲突直接感知)必须等待 ACK 确认成功帧长最小限制有(确保碰撞可被检测到)无此限制信道预约可选 RTS/CTS 预约信道适用场景有线局域网(以太网)无线局域网(Wi-Fi / 802.11)考点提示:"冲突避免"不代表完全消除冲突,只是尽量降低概率;CSMA/CA 无法"检测"冲突,只能通过 ACK 超时"感知"失败。

CSMA/CA 的核心不是“边发送边检测冲突”,而是 发送前尽量避免冲突,发送后用 ACK 判断是否成功。408 已考过的角度主要有:802.11 数据帧地址、RTS/CTS 预约信道、IFS 长短、NAV 持续时间计算。

基础概念

在学习 CSMA/CA 之前,先了解无线局域网中的几个基本概念。

  • STA(Station,站点):无线局域网中的终端设备,如手机、笔记本电脑等。
  • AP(Access Point,接入点):无线接入设备,负责连接无线局域网和分布式系统(DS)。家庭中的 Wi-Fi 路由器通常集成了 AP 功能。
  • DS(Distribution System,分布式系统):连接多个 AP 的网络,通常就是 AP 背后的有线局域网,用于在不同 AP 之间以及无线网络与其他网络之间转发数据。
  • 发送方(Sender)与 接收方(Receiver):分别表示当前无线链路中发送数据帧和接收数据帧的站点,它们可能是 STA,也可能是 AP。
  • 隐藏节点(Hidden Terminal,也称隐蔽站):两个站点彼此无法收到对方的无线信号,但都能与同一个 AP 通信,因此会误以为信道空闲,可能同时向 AP 发送数据,从而发生碰撞。
ESS(Extended Service Set)DS — Distribution System(分布式系统 / 骨干有线网络)BSS 1Basic Service SetAP₁STAASTABSTACBSS 2Basic Service SetAP₂STADSTAEBSS 3Basic Service SetAP₃STAFSTAGSTAHBSS(基本服务集)一个 AP 覆盖范围内的所有 STA 组成一个 BSS;同一 BSS 内的通信通过 AP 中转ESSESS(扩展服务集)由多个 BSS + DS 组合而成的更大范围无线网络,对外表现为一个整体APAP(接入点)无线局域网的"基站",负责将 STA 的无线帧桥接到 DS(有线网络)STASTA(站点)无线终端设备(手机、笔记本等),通过关联到 AP 来加入 BSSDSDS(分布式系统)连接各 AP 的有线骨干网,负责在不同 BSS 之间转发帧,使跨 BSS 通信成为可能例:STA-A(BSS 1)→ AP₁ → DS → AP₂ → STA-D(BSS 2)

CSMA/CA 正是针对无线信道无法进行碰撞检测以及隐藏节点等问题而设计,通过载波监听、随机退避、ACK 确认以及 RTS/CTS 信道预约 等机制,尽可能降低碰撞发生的概率。

流程

CSMA/CA 做题时,先区分两种情况:

  • 普通发送(默认情况):监听信道 → 等待 DIFS → 随机退避 → 发送 DATA → 接收方等待 SIFS 后回复 ACK。
  • 启用 RTS/CTS(可选机制):监听信道 → 等待 DIFS → 随机退避 → RTS → SIFS → CTS → SIFS → DATA → SIFS → ACK。

其中,RTS/CTS 主要用于缓解隐藏节点问题,并非所有数据帧都会使用。即使不使用 RTS/CTS,CSMA/CA 仍然依靠 载波监听、随机退避和 ACK 确认 来降低冲突发生的概率,只是无法进一步缓解隐藏节点带来的冲突。

普通发送

不使用 RTS/CTS 时,802.11 的普通发送流程如下:

sequenceDiagram
    participant A as 发送方
    participant B as 接收方

    A->>A: 监听信道
    A->>A: 信道持续空闲 DIFS
    A->>A: 随机退避
    A->>B: DATA
    Note over B: 等待 SIFS
    B-->>A: ACK

普通发送中的 碰撞避免(Collision Avoidance),主要体现在发送数据之前的信道监听和随机退避过程。

发送方准备发送数据时,首先监听信道:

  • 如果信道处于忙状态,则暂不发送,等待当前传输结束。
  • 如果信道持续空闲一个 DIFS,发送方也不会立即发送,而是从竞争窗口 (CW) 中随机选择一个退避计数。

如果退避过程中检测到其他站点开始发送,当前站点会:

  1. 暂停退避计数;
  2. 等待信道重新空闲;
  3. 再等待一个 DIFS;
  4. 从原来的剩余计数继续退避。

例如,两个站点同时准备发送数据,分别选择退避计数:

经过 3 个空闲时隙后,A 的计数先减为 0,于是开始发送。C 检测到信道变忙后暂停计数,避免与 A 同时发送;A 发送结束后,C 再继续完成剩余退避。

因此,普通发送中的 CA 主要体现为:

  • 载波监听:信道忙时不发送;
  • DIFS 等待:确认信道已经持续空闲;
  • 随机退避:避免多个站点在信道刚空闲时同时发送;
  • 退避冻结:其他站点发送时暂停计数,避免继续争用;
  • 扩大竞争窗口:传输失败后增大随机退避范围,降低再次冲突的概率。

不过,随机退避只能降低碰撞概率,并不能完全消除碰撞。如果两个站点恰好选择了相同的退避计数,它们仍可能同时发送,从而发生碰撞。

对于普通发送,如果没有收到 ACK,发送方并不能确定是否发生了碰撞,只能认为本次传输失败。造成失败的原因可能包括:

  • 与其他站点发生碰撞;
  • 无线信道受到干扰,数据帧出现误码;
  • 接收方没有正确收到数据帧;
  • ACK 在返回过程中丢失。

因此,802.11 不像 CSMA/CD 那样在发送过程中直接检测碰撞,而是通过 ACK 判断本次传输是否成功:

  • 收到 ACK:说明数据帧已被接收方正确接收;
  • 未收到 ACK:认为本次传输失败,但无法确定具体原因。

传输失败后,发送方会扩大竞争窗口 (CW),重新选择随机退避计数,再次竞争信道。其基本思想可以表示为:

需要注意的是,ACK 的主要作用是进行发送结果确认,而不是直接避免碰撞。真正体现“碰撞避免”的,是发送前的监听、DIFS、随机退避和竞争窗口机制。

使用 RTS/CTS

在普通 CSMA/CA 流程中,发送方会先侦听信道,并在退避期间持续侦听,因此:

  • 能彼此“听见”的站点,大多数同时发送的冲突会被载波监听和随机退避提前规避。

当无线局域网中存在 隐藏节点 时,仅依靠物理载波监听和随机退避,仍可能发生碰撞。

例如 A ──> B <── C

A 和 C 都能听见 B,但彼此听不见。于是:

  • A 监听时,听不到 C,认为信道空闲;
  • C 监听时,也听不到 A,认为信道空闲;
  • 两者可能同时向 B 发送 DATA,在 B 处发生碰撞。

为缓解隐藏节点问题,IEEE 802.11 提供了可选的 RTS/CTS 机制:

  • RTS(Request To Send):请求发送;
  • CTS(Clear To Send):允许发送。

其核心思想是:

先通过较短的控制帧预约信道,再发送较长的数据帧。

使用 RTS/CTS 时,发送流程如下:

SIFS
RTS
CTS
CTS
DATA
ACK
ACK
SIFS
SIFS
Delay
Access
Source
Destination
Other Nodes
DIFS
随机退避

具体过程如下:

  1. 发送方监听信道。
  2. 信道持续空闲一个 DIFS 后,发送方进行随机退避。
  3. 退避计数减为 0 后,发送方发送 RTS
  4. 接收方正确收到 RTS 后,等待一个 SIFS,回复 CTS
  5. 发送方收到 CTS 后,等待一个 SIFS,发送 DATA
  6. 接收方正确收到 DATA 后,等待一个 SIFS,回复 ACK

因此,完整交换过程可表示为:

监听信道 → 等待 DIFS → 随机退避 → RTS → SIFS → CTS → SIFS → DATA → SIFS → ACK

因此,CTS、DATA 和 ACK 等后续帧可以优先于其他站点的新一轮信道竞争发送,保证已经开始的数据交换能够连续完成。


RTS/CTS 如何降低碰撞代价

RTS 和 CTS 都是较短的控制帧。

多个站点仍可能选择相同的退避计数,并同时发送 RTS,导致 RTS 发生碰撞。但此时损失的只是较短的 RTS 帧,而不是较长的 DATA 帧。

因此,RTS/CTS 的主要作用不是彻底消除碰撞,而是:

  • 缓解隐藏节点问题;
  • 提前预约信道;
  • 将可能发生的碰撞尽量限制在较短的 RTS 帧上;
  • 减少长数据帧碰撞造成的信道浪费。

当数据帧较短时,使用 RTS/CTS 反而会引入额外控制开销。因此,RTS/CTS 通常是可选机制,并非每次传输都必须使用。


NAV 与虚拟载波监听

发送方 A接收方 B普通站 C隐藏站 D(只听到CTS)DIFSRTSSIFSDATASIFSCTSSIFSACKNAV (听到 RTS 后设置)收到RTSNAV (只听到 CTS 后设置)收到CTSDIFSRTSSIFSCTSSIFSDATASIFSACKtSIFS+CTS+SIFS+DATA+SIFS+ACKSIFS+DATA+SIFS+ACK机制说明RTS发送方请求占用信道携带 Duration 字段CTS接收方允许发送周围站点均可听到NAV-C听到 RTS → 设 NAV= SIFS+CTS+SIFS+DATA+SIFS+ACKNAV-D只听到 CTS → 设 NAV= SIFS+DATA+SIFS+ACK考点提示• NAV 从控制帧结束后开始计算• 不含 DIFS,不含控制帧本身• 隐藏站错过 RTS,NAV 比普通站少 SIFS + CTS隐藏站 D:与发送方 A 相互"看不见",无法收到 RTS;但能收到接收方 B 发出的 CTS,因此仍能设置 NAV 保持静默。

802.11 中的载波监听分为两种:

  • 物理载波监听:直接检测无线信道当前是否存在信号;
  • 虚拟载波监听:通过 NAV 判断信道在未来一段时间内是否已被预约。

NAV(Network Allocation Vector,网络分配向量)本质上是一个倒计时计时器。

RTS、CTS 等帧中的 Duration 字段会说明:

从当前帧发送结束后,完成本次数据交换还需要占用信道多长时间。

附近站点收到 RTS 或 CTS 后,会根据 Duration 设置 NAV。在 NAV 归零之前,即使物理载波监听发现信道暂时空闲,也不会主动竞争信道。

因此,站点只有在以下两个条件都满足时,才会认为信道空闲:

物理信道空闲 且 NAV=0

NAV 计算

曾经考察过 NAV 的计算。计算 NAV 时,应抓住一个核心原则:

帧中的 Duration 表示:当前帧发送结束后,后续通信过程还需要占用信道的时间。

假设不考虑传播时延,在 RTS/CTS 交换过程中,需要分两种情况讨论。

收到 RTS 的站点

收到 RTS 的站点知道,RTS 发送结束后还需要依次进行:

因此,RTS 中的 Duration 为:

这些站点需要在 CTS、DATA 和 ACK 的整个交换过程中保持避让。

收到 CTS 的隐藏站点

隐藏站点可能无法收到发送方发出的 RTS,但可以收到接收方发出的 CTS。

CTS 发送结束后,还需要依次进行:

因此,CTS 中的 Duration 为:


RTS/CTS 的局限性

RTS/CTS 只能降低碰撞概率和碰撞代价,不能完全避免碰撞。

例如,多个站点可能:

  1. 同时检测到信道空闲;
  2. 选择相同的退避计数;
  3. 同时发送 RTS;
  4. 导致 RTS 在接收方处发生碰撞。

此时接收方无法正确收到 RTS,因而不会返回 CTS。发送方等待 CTS 超时后,会扩大竞争窗口,重新随机退避并重传 RTS。

因此,应准确理解为:

RTS/CTS 通过控制帧预约信道和 NAV 虚拟载波监听,缓解隐藏节点问题,并将碰撞代价尽量限制在较短的 RTS 帧上,但不能彻底消除碰撞。

IFS

由于无线信道的可靠程度不如有线网络,802.11 MAC 层采用与 停等协议 类似的一帧一确认机制,即发送方每发送一帧数据,都需要等待接收方返回 ACK 后才能继续发送下一帧。

为了尽量避免冲突,802.11 规定:站点完成一次发送后,并不能立即发送下一帧,而是必须先等待一段时间(期间继续监听信道)。这段等待时间称为 帧间间隔(InterFrame Space,IFS)。

不同类型的帧对应不同长度的 IFS,通过 IFS 的长短实现优先级控制:IFS 越短,优先级越高,因此 ACK、CTS 等控制帧能够优先于普通数据帧发送。

802.11 中常见的三种 IFS 如下:

  • SIFS(Short IFS):最短,优先级最高,用于 ACK、CTS、分片后的下一帧等需要立即响应的控制帧。
  • PIFS(PCF IFS):长度介于 SIFS 和 DIFS 之间,用于点协调功能(PCF)。
  • DIFS(DCF IFS):最长,普通站点发送数据帧前必须等待 DIFS。

长度关系如下:

t信道忙(上一帧传输)帧结束SIFS最短PIFS中等DIFS最长ACK / CTS立即响应帧PCF 控制帧点协调功能随机退避BackoffDATA普通数据帧长度对比SIFSPIFSDIFSIFS 用途速查SIFSACK、CTS、分片帧响应PIFS点协调功能(PCF) 帧DIFS普通数据帧争用信道前等待IFS 越短 → 优先级越高ACK/CTS 等 SIFS 后发出,可抢在普通数据帧之前占用信道SIFS < PIFS < DIFS

因此,题目如果问"哪一种 IFS 最长",要先判断帧的类型:

  • 普通站点竞争发送 DATA 前等待 DIFS
  • ACK、CTS 等应答控制帧发送前等待 SIFS

由于 SIFS 最短,因此 ACK、CTS 等控制帧能够优先于普通数据帧发送,从而避免再次发生竞争。

802.11 数据帧地址

下图展示了 802.11 数据帧头的完整字段布局。

802.11 数据帧头结构展示 802.11 帧头各字段:帧控制、持续时间、地址1-4、序号控制、QoS控制、帧主体、FCS,并标注地址字段的颜色含义帧控制2字节持续时间/ID2字节地址1(RA)6字节地址2(TA)6字节地址36字节序号控制2字节地址4可选(WDS)QoS控制可选帧主体可变长度FCS4字节地址1(RA):当前无线链路这一跳的接收方地址2(TA):当前无线链路这一跳的发送方地址3:视 To/From DS 而定,为最终目的或源主机地址4:仅用于 AP 间 WDS 桥接场景

其中:

  • 帧控制(Frame Control) 2 字节,包含 To DS/From DS 标志位等子字段,正是这两位决定了地址 1~3 的角色分配。
  • 持续时间/ID 用于 NAV(网络分配向量) 虚拟载波监听。
  • 地址 1~3 按你给的表格规则填充,颜色对应它们在当前跳/端到端语义中的角色。
  • 地址 4 只有在 AP 到 AP 的无线分布系统(WDS)桥接场景下才会出现,此时 To DS 和 From DS 同时置 1,四个地址分别对应 RA、TA、DA、SA。
  • QoS 控制 仅 QoS 数据帧才有,用于携带优先级(TID)等信息。
  • 帧主体 是可变长度的数据载荷,FCS 是 4 字节的帧校验序列(CRC)。

如果需要,我也可以单独画一张"To DS / From DS 四种组合下地址 1~4 具体含义"的对照图,把 AP↔AP、站点↔站点(IBSS)等情况也补全。

802.11 数据帧最多包含 4 个地址字段。408 考试中最常见的是站点与 AP 之间收发数据的情况,需要区分当前无线链路最终通信双方

场景地址 1(RA)地址 2(TA)地址 3
To DS(站点 → AP)AP 的 MAC源站点(SA)的 MAC最终目的主机(DA)的 MAC
From DS(AP → 站点)目的站点(DA)的 MACAP 的 MAC原始源主机(SA)的 MAC

其中:

  • RA(Receiver Address):当前无线链路这一跳的接收方。
  • TA(Transmitter Address):当前无线链路这一跳的发送方。
  • SA(Source Address):端到端通信的源主机。
  • DA(Destination Address):端到端通信的目的主机。

因此,RA/TA 描述的是当前无线链路这一跳;SA/DA 描述的是整个通信过程的最终源和最终目的。

例如,主机 H 通过 AP 向 Internet 中的主机 R 发送数据:

  • 地址 1(RA):AP 的 MAC。
  • 地址 2(TA):主机 H 的 MAC。
  • 地址 3:最终目的主机 R 的 MAC。

因此,这种情况属于 To DS