介质访问控制
数据链路层的另一个重点(之前一个是 ARQ 协议),重点掌握 CSMA/CD 的细节,会在选择题和解答题中考查。多路复用和 CSMA/CA 也要熟悉下,会在选择题中考查。
ALOHA 协议说实话没考察过,但是出现过在考纲中,所以还是加在教程中。
共享介质
在介绍 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)将可用带宽划分为若干个不重叠的 频段,每个 信号 占用一个频段。各个信号可以同时传输,但彼此之间不会干扰,因为它们占用不同的频率。
FDM 在传统的模拟电话系统和广播中广泛使用。
TDM
时分多路复用(TDM)将 时间 划分成若干个 时隙,每个 信号 在不同的时隙中传输。所有信号在时间上轮流使用同一传输介质。
TDM 常用于数字通信系统,如数字电话网络。
WDM
波分多路复用(WDM)是 FDM 的一种应用,主要用于 光纤通信。它将光纤的可用带宽划分为多个 波长(颜色),每个 信号 占用一个波长。
WDM 技术可以大幅增加光纤的通信容量,广泛应用于长距离和高速光纤网络。
CDM 与 CDMA
码分多路复用(CDM)使用不同的 编码 来区分各个 信号。所有信号可以在同一 频带 上同时传输,但通过使用不同的编码序列来避免相互干扰。
虽然 CDM 的概念可以用在许多不同的传输系统中,但在实践中,它主要作为 码分多址(CDMA,Code Division Multiple Access)的基础技术。
CDMA
在 CDMA 中,每一个 比特时间 划分为 个更短的间隔,称为 码片(chip),每个站被指派一个唯一的 维码片序列(chip sequence)。计算时通常把二进制 0 映射成 ,把二进制 1 映射成 。
- 如果发送比特 1,则发送自己的 m 位码片序列。
- 如果发送比特 0,则发送该码片序列的反码向量,即 。
简单理解就是,A 站向 C 站发出的信号用一个向量来表示,B 站向 C 站发出的信号用另一个向量来表示,两个向量要求相互 正交。向量中的分量,就是所谓的码片。
当两个或多个站点同时发送时,各路数据在信道中线性相加。为了从信道中分离出各路信号,要求各个站点的码片序列相互 正交。
令向量 表示站 S 的码片向量,令 表示其他任何站的码片向量。两个不同站的码片序列正交,就是它们的规格化内积(inner product)为 0:
任何站的码片向量和自身的规格化内积为 1,和其反码向量的规格化内积为 :
CDMA 的过程可以通过下图辅助理解:
上图以一个实例展示了 CDMA 的过程:
- 站点 A:码片序列 ,发送比特 1,所以发送原序列 。
- 站点 B:码片序列 ,但在这个例子中发送的是 ,这意味着 B 站实际发送比特 0。
- 信道叠加:。
- 信号分离:
- 恢复 A 的信号:接收向量与 做规格化内积,结果为 ,判定比特 1;
- 恢复 B 的信号:接收向量与 做规格化内积,结果为 ,判定比特 0。
- 正交性:,所以另一站的分量在解码时被消去。
下面的交互会逐项显示两站码片、信道叠加结果与规格化内积。例如把 B 的发送比特从 0 换成 1 时,可对照观察反码符号如何改变,避免只背最终向量。
交互使用的正交与归一化关系是:、、,规格化内积的求和部分为 。
两路 CDMA 码片怎样叠加又分离
逐步查看 A 发送比特 1、B 发送比特 0 时的码片向量、信道逐项相加结果,以及接收端如何用规格化内积恢复两路比特。
当前查看:分配正交码。A 的码片 S=(-1,-1,-1,+1,+1,-1,+1,+1),B 的码片 T=(-1,-1,+1,-1,+1,+1,+1,-1),两者规格化内积为 0。
ALOHA 协议
ALOHA 协议是一种早期开发的 随机访问协议,用于在 共享信道 上传输数据。ALOHA 有两种基本类型:纯 ALOHA 和时隙 ALOHA。
- 纯 ALOHA:用户可以在 任何时间 发送数据包。由于没有时间同步,数据包之间容易发生 冲突。
- 时隙 ALOHA:时间被分成离散的 时隙,用户只能在时隙的开始发送数据包。这种方法通过同步发送时间,减少了 冲突 的概率。
ALOHA 如何得知发送失败
在纯 ALOHA 中:
- 发送端 直接发,不监听信道
- 也没有“边发边检测”的能力
那怎么知道冲突了?
靠 ACK(确认应答)与超时重传机制
接收端会对数据进行差错校验,只有当接收端成功接收并通过差错校验(如 CRC)时,才会发送 ACK
纯 ALOHA
纯 ALOHA(Pure ALOHA)是一种简单的 随机接入协议,允许用户在 任意时刻 发送数据包,而无需对时间进行任何同步或分时。
工作原理:
- 用户 随时 发送数据包。
- 如果数据包成功到达接收端,则传输完成。
- 如果发生 冲突(即两个或多个用户同时发送数据包),相关用户需要等待随机的时间后重传。
在理想泊松到达模型中,纯 ALOHA 的吞吐量为
其中 是一个帧时长内的平均发送尝试次数。 时吞吐量最大,为 。
时隙 ALOHA
时隙 ALOHA(Slotted ALOHA)在纯 ALOHA 的基础上引入了 时间同步,将时间划分为一系列等长的 时隙。用户只能在 时隙的开始 发送数据包。
工作原理:
- 时间被划分为 等长的时隙。
- 用户在 时隙的开始 时发送数据包。
- 如果一个时隙内 只有一个用户 发送数据包,则传输成功。
- 如果多个用户在同一时隙发送数据包,发生 冲突,相关用户等待随机时间后重传。
相同理想模型下,时隙 ALOHA 的吞吐量为
在 时达到最大值 ,约为纯 ALOHA 的两倍。
CSMA 协议
CSMA(Carrier Sense Multiple Access)的中文叫做 载波监听多路访问,理解 CSMA 的关键在于理解它的名称中的两个部分:载波监听 以及 多路访问:
- 载波监听(Carrier Sense):因为 CSMA 是随机访问介质控制的一种方式,所以在发送数据前,必须确定当前 通信介质 中没有其他设备正在发送数据。所以 载波监听 可以被理解为以太网口内部芯片自带的一种功能,具体而言就是一种可以监听 信道 在当前位置是否有数据传输的功能。
- 多路访问(Multiple Access):多个设备可以访问同一个 通信介质。这意味着在任何给定时间,任何设备都可以尝试发送数据。
所以 CSMA 可以理解为 通过 载波监听 避免 冲突,进而实现共享介质上的 多路访问。
这里需要深入理解传播时延和传输时间这两个概念:
- 传播时延(propagation time)= 距离 / 信号传播速度
- 传输时间(transmission time) = 数据大小 / 数据传输速率
CSMA 的问题在于它无法处理 碰撞,当一个设备监听到当前介质中无信号时,它就可以发送数据,但监听得到的结果可能是 “假结果”。因为有可能其他设备已经发送信号了,只是信号由于传播时延还没有到达当前设备。
所以假设当前设备监听得到了“假结果”,那么此时发送数据后介质上就会发生 冲突。
那么 CSMA 如何处理冲突呢?
CSMA 不具备 碰撞处理 功能,冲突处理 是 CSMA/CD 的功能。这意味着在 CSMA 中,设备不会主动检测到 碰撞。
所以“纯 CSMA”主要作为分析模型;工程协议通常在它的基础上增加碰撞检测、碰撞避免、确认或重传机制。纯 CSMA 只监听信道是否空闲,但:
- 不能检测冲突(如 CSMA/CD)
- 也不避免冲突(如 CSMA/CA)
- 一旦多个设备在信道刚空时同时发送,必然冲突,没有机制处理
这在真实网络中会导致高碰撞率和低效率。
常见协议的关系如下:
| 协议 | 工程中的位置 | 典型场景 | 主要特点 |
|---|---|---|---|
| CSMA | 主要是基础模型 | 教学与理论分析 | 发送前监听;后续冲突处理需由具体协议补充 |
| CSMA/CD | 经典共享式、半双工以太网采用 | 早期有线以太网 | 监听 + 碰撞检测 + 截断二进制指数退避 |
| CSMA/CA | IEEE 802.11 DCF 采用 | 无线局域网(Wi-Fi) | 物理/虚拟监听 + 随机退避 + ACK,可选 RTS/CTS |
CSMA 协议不会直接考查,但是作为 CSMA/CD 的基础,还是需要熟悉下。
三种类型
CSMA 根据站点在 信道空闲或忙 时的行为分为三种基本策略:
| 特征 | 1-persistent CSMA | Non-persistent CSMA | p-persistent 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 Sense 指“载波监听”,不是某个名为 Carrier 的器件。
以下图为例,假设 A 向 D 发送一段数据,C 向 A 发送一段数据,我们可以观察到:冲突发生 的时间点 和 设备检测到 冲突的时间点是不同的。
当 A 和 C 检测到冲突时,它们会立即停止正常帧的发送,并发送 强化碰撞的干扰信号(jam signal),保证总线上的各站都能识别这次碰撞。它不是一帧面向某个目的地址的“广播通知”。
流程
CSMA/CD 的工作流程如下:
- 准备发送:适配器从网络层获得一个分组,封装成帧,放入网络适配器缓存准备发送。
- 检测信道:监听信道是否空闲,若信道空闲,则开始发送该帧;若信道忙,则持续检测直至信道空闲。
- 在发送过程中,适配器仍然持续检测信道。这里只有如下两种可能。
- 发送成功:在一个争用期(slot time)内一直未检测到碰撞,之后就不会再与本次发送开始前后的其他站发生碰撞;发送方仍要把整个帧发完。
- 发送失败:在争用期内检测到碰撞,立即停止正常帧发送并发出 jam signal。随后执行 截断二进制指数退避算法,随机等待后返回步骤 2。若连续发生 16 次碰撞仍不能成功,则放弃该帧并向上报错。
截断二进制指数退避算法
在随机访问网络中,当 冲突 发生后,设备需要 等待一段时间 后重试发送,以避免再次冲突。 指数退避算法(Exponential Backoff Algorithm)通过动态调整等待时间,减少连续冲突的概率,提高网络效率。
其核心思想是当冲突发生时,设备随机选择一个等待时间,并在每次冲突后 成倍增加等待时间范围,以降低后续冲突的可能性。
指数增长规则 如下。连续第 次发生碰撞后,先令
再从整数集合
中等概率选择一个数,退避时间为
- 经典以太网的一个时隙为 512 比特时间;在 10 Mbit/s 以太网中就是 51.2 微秒。
- 指数 最大取 10,所以随机窗口最多增长到 个时隙;第 11~16 次碰撞不再扩大范围。
如果尝试达到一定次数仍冲突,放弃传输并上报错误。
举个实际例子:
假设某设备在尝试发送时检测到 冲突:
- 第 1 次碰撞后:在 中随机选择一个整数,即等待 0 或 1 个 slot time。
- 第 2 次碰撞后:在 中随机选择一个整数。
- …
- 第 10~16 次碰撞后:都在 中随机选择。
- 连续第 16 次碰撞后仍失败:报错并放弃该帧。
最小帧长与争用期
CSMA/CD 能够正常工作的 限制条件 是:
帧的发送时延至少要等于信号在冲突域中最大往返传播时延,即总线端到端最大单向传播时延的两倍。
要在帧的发送过程中及时发现冲突,发送站必须在整个帧发送完毕之前收到冲突信号。如果发送站只有在帧全部发送完之后才能检测到冲突,那么冲突产生的数据已经完整地传输到了网络上,无法避免数据损坏。
因此,最小帧长 由这个时间条件决定。若链路速率为 ,冲突域端到端的最大单向传播时延为 ,则
经典以太网把争用期规定为 512 比特时间,因此 MAC 帧最小为 64 B(从目的 MAC 地址到 FCS,不含前导码与帧开始定界符)。如果帧太短,发送站可能在碰撞信号返回之前就已发送完毕,从而无法把碰撞归因于当前帧。
注意:这一机制的依据是,碰撞影响必须在网络中传播并被发送站捕获,发送站才能意识到碰撞。若帧的发送时延过短,发送站可能在碰撞信号返回之前就已结束发送,从而错过碰撞检测。
因此,帧的发送时延必须不小于最大单向传播时延的两倍,才能确保碰撞在帧发送完毕前被发现并处理。注意区分“传播时延”和“发送时延”,不要都称作传输时延。
CSMA/CA 协议
CSMA/CD 适用于 以太网(使用有线连接的局域网),但在 无线局域网(WLAN,Wireless LAN)中无法直接使用 CSMA/CD,主要有以下原因:
- 无线设备 不能同时“听”和“说”:无线收发器在发送数据时,无法同时监听信道来判断是否发生碰撞。
- 信道干扰 比有线环境严重:无线信号受环境干扰更大,误判空闲或碰撞的概率更高。
- 隐藏节点问题(隐蔽站):假设 A 和 C 两台无线设备都想给 B 发送数据,但 A 和 C 彼此“看不到”,只看到 B 是空闲的。结果就是 A 和 C 同时给 B 发送,发生碰撞,但它们却以为没事。
为此,IEEE 802.11 的分布式协调功能采用 CSMA/CA。它以 冲突避免(Collision Avoidance,CA)取代发送期间的碰撞检测。“冲突避免”并不表示能完全消除碰撞,而是通过监听、随机退避、确认以及可选的 RTS/CTS 尽量降低碰撞概率。
流程
- 侦听信道(Carrier Sense)
- 设备在发送数据前通过物理侦听(检查无线能量或可解码帧)和虚拟侦听(NAV,网络分配向量,记录预计占用时间)判断信道是否空闲。信道持续空闲 DIFS 后,站点仍需按竞争窗口执行随机退避;倒计时仅在信道空闲时递减,信道变忙则冻结,之后再继续。
- 发送请求(RTS,Request to Send)
- 退避计数归零后,设备可以直接发送 DATA,也可先发送 RTS 帧,声明传输所需时间。RTS/CTS 是可选机制,常在帧较大或隐藏站影响明显时启用。
- 清除发送请求(CTS,Clear to Send)
- 若使用 RTS/CTS,接收设备等待 SIFS 后回复 CTS,确认本次传输并让能听到 CTS 的附近站更新 NAV。它能缓解隐藏站问题,但不能保证消除所有碰撞。
- 数据传输
- 发送设备收到 CTS 后等待 SIFS,再发送数据帧。其他设备依据 NAV 暂缓竞争;若未启用 RTS/CTS,则退避计数归零后直接发送 DATA。
- 确认帧(ACK,Acknowledgment)
- 接收设备成功接收数据后(等待 SIFS),发送 ACK 帧确认。若发送端未收到 ACK(可能因 碰撞 或干扰),启动重传机制,重新执行上述步骤。
根据以上过程我们可以观察到 CSMA/CA 的一些 关键特点:
- 碰撞避免:CSMA/CA 通过物理/虚拟侦听、随机退避、ACK 以及可选 RTS/CTS 降低碰撞概率;它不像经典共享式以太网的 CSMA/CD 那样边发边检测。
- 隐藏节点问题:两设备因距离远无法互相侦听,可能同时向同一接收方发送。RTS/CTS 通过让周围设备设置 NAV 来缓解该问题,但不能解决暴露站等所有无线竞争问题。
IFS
由于无线信道较易受干扰,802.11 的单播数据帧通常配合 停等确认:站点发送一帧后,需要收到对方 ACK 才认为本次发送成功;广播和组播帧通常不使用这种逐帧 ACK。
为了尽量避免冲突,802.11 标准规定:所有站在完成一次发送后,必须先等待一个极短的时间(期间继续监听信道)才能发送下一帧。这段等待时间称为 帧间间隔(InterFrame Space,IFS)。不同类型的帧对应的 IFS 长度不同,IFS 的长短用来实现优先级管理,从而保证关键帧能够在竞争激烈的信道中优先获得发送机会。
802.11 标准使用了下列三种 IFS:
- SIFS(Short IFS):最短的帧间隔,优先级最高。用于:
- 接收方回复 CTS 或 ACK;
- 分片突发中的后续帧等需要最高优先级响应的传输。
- 示例:AP 接收到 RTS 后,等待 SIFS 时间发送 CTS,之后接收到数据后,再等待 SIFS 时间发送 ACK。
- DIFS(Distributed IFS):普通数据帧的发送间隔。用于:
- 一个站点在发现信道空闲后,准备发起新的通信前等待的时间。
- 示例:A 想要发起通信,必须先监听信道空闲,并等待 DIFS 才能发送 RTS。
- PIFS(Point Coordination IFS):比 DIFS 短、但比 SIFS 长。仅用于中心协调器(AP)抢占信道,用于轮询控制(PCF 模式)。
等待 IFS 序列过程如下:
A: 监听信道空闲 → 等待 DIFS → 发送 RTS
AP: 等待 SIFS → 回复 CTS
A: 等待 SIFS → 发送 DATA
AP: 等待 SIFS → 回复 ACK
NAV
为了应对无线网络中的 “隐蔽节点” 问题,802.11 引入了 NAV(Network Allocation Vector) 概念,作为一种 “虚拟载波侦听机制”。
NAV 是一种 倒计时定时器,它告诉站点:接下来的多长时间内,信道将被其他设备占用。具体过程如下:
- A 发送 RTS 帧,并在其中声明:从 RTS 发送起,直到收到 ACK,通信将持续多久。
- AP 回复 CTS 帧,在 CTS 中再次包含整个传输剩余所需时间(包括 DATA 和 ACK)。
- 所有收到 RTS 或 CTS 的站点,都会根据帧中的时间字段,设置自己的 NAV 计时器,并保持沉默,避免冲突。
在上图中:
- B 是隐蔽站,可能听不到 A 的 RTS,但能听到 AP 的 CTS → 会根据 CTS 设置 NAV。
- 其他站点即使未直接收到数据(例如 DATA),也会因为事先通过 RTS/CTS 设置了 NAV,在期间不会发起竞争。
简单来说,NAV 就像设备内部的一个“占用表”,告诉自己:别人正在用,等一会再发。