408 计算机网络 · 数据链路层 · 介质访问控制(MAC)
范围:信道划分、随机访问、轮询访问三大类介质访问控制协议;重点是CSMA/CD 的争用期与最小帧长、截断二进制指数退避,以及各类协议的性能对比。
附带:CSMA/CA(作为2.5 节,紧跟 CSMA/CD,属随机访问的最后一块)与碰撞域(第七节,属局域网小节),按各自"定位"标注。
〇、本节在讲什么:为什么需要 MAC
介质访问控制(Medium Access Control)要解决一个根本矛盾:
广播共享链路(比如老式以太网、WiFi)多个结点共享同一传输介质(总线、无线信道),而同一时刻、同一频段上只允许一个结点发送,否则信号叠加、互相破坏 —— 这就是碰撞(冲突)。
于是需要一个规则来决定"谁能在什么时候用信道"。这套规则就叫介质访问控制协议。它属于数据链路层的介质访问控制子层(MAC 子层)。
三大类思路(408 的骨架,必须背下来):
| 大类 | 核心思想 | 代表协议 | 特点 |
|---|---|---|---|
| 信道划分 | 把信道切开,各用一份,互不干扰 | FDM、TDM、STDM、WDM、CDM | 静态分配,无碰撞,但不灵活、易浪费 |
| 随机访问 | 谁有数据谁就争用,碰撞了再想办法 | ALOHA、CSMA、CSMA/CD | 动态、灵活,轻负载效率高,重负载碰撞多 |
| 轮询访问 | 按次序轮流授予发送权 | 轮询(polling)、令牌传递 | 无碰撞、可保证时延,重负载效率高,有令牌/轮询开销 |
一句话记忆:信道划分是"分地",随机访问是"抢地",轮询访问是"排队"。
对比主线:轻负载 → 随机访问最好;重负载 → 轮询(令牌)最好;信道划分两头不讨好。
一、信道划分介质访问控制
把一条物理信道在频率、时间、波长或编码四个维度上分割,划分成多条互不干扰的逻辑子信道,每对结点独占一条。
1.1 频分多路复用 FDM
把总带宽划分为若干频段,每个用户始终占一个频段,同时发送。
所有用户在时间上重叠、在频率上分离。
优点:充分利用带宽、技术成熟。缺点:需要保护频带(guard band)防串扰,造成浪费;用户空闲时其频段也闲置。
1.2 时分多路复用 TDM
把时间划分为等长的 TDM 帧,每帧再分成若干时隙,每个用户固定占一个时隙,轮流发送。(不管ABC有没有数据,都固定分配时隙),天然适配于数字信号直接传输比特流。
所有用户在频率上重叠、在时间上分离。
关键缺点:某用户无数据时,其固定时隙仍被空占(时隙闲置),带宽浪费。
1.3 统计时分复用 STDM(异步 TDM)
TDM 的改进:不预先固定分配时隙,而是按需动态分配,只给有数据的用户分配时隙。(图中就是前面只给用户A分配时隙)
需要地址信息标识每个时隙属于谁。
效率高于 TDM,但可能产生冲突(本质已接近随机访问的思想)。
TDM vs STDM 考点:TDM 的时隙是"固定分配、无论有无数据";STDM 是"动态按需、须带地址"。STDM 提高了信道利用率。
1.4 波分多路复用 WDM
- 本质是光的频分多路复用:在一根光纤中同时传输**多个不同波长(频率)**的光载波。
- 常用
1310 nm和1550 nm两个低损耗窗口;密集波分复用 DWDM 可在一根光纤上复用几十上百个波长。
1.5 码分多路复用 CDM / 码分多址 CDMA
每个用户分到一个正交的码片序列(chip sequence),用户同时同频发送,靠编码的正交性区分。
每个比特时间再划分为
m个码片(chip),m通常为 64 或 128。发送比特1就发自己的码片序列S,发比特0就发S的反码S̄。(为简化,图上的m等于4)正交性条件(必须记住):设两个不同用户的码片序列为
S、T,其规格化内积
1m S⋅T=0(正交)1m S⋅S=11m S⋅Sˉ=−1\frac{1}{m}\,S\cdot T=0\qquad\text{(正交)}\qquad \frac{1}{m}\,S\cdot S=1\qquad \frac{1}{m}\,S\cdot \bar{S}=-1m1S⋅T=0(正交)m1S⋅S=1m1S⋅Sˉ=−1
- 接收方解码:把收到的信号分别与各用户的码片序列做规格化内积,得到
+1就是比特1,-1就是比特0,0表示该用户没发。(接收端在收到叠加信号的时候,会遍历所有发送方用户的码片,分别做规格化内积,该题就是只有A和B)
考点小结:若两个序列内积为0,则正交;题目常给一个混合信号,要求算出某用户发了什么(累加多个用户信号后与目标码片序列求内积)。
二、随机访问介质访问控制
核心思想:不预先划分,所有用户平等争用信道。发生碰撞就退避重发。是一种"用不确定性换灵活性"的方案。
2.1 ALOHA 协议
纯 ALOHA(Pure ALOHA)
想发就发,完全不监听信道。
发出后等待确认;若超时未收到确认,认为碰撞,随机等待一段时间后重发。
危险区:一个帧与前后各一个帧时间都可能碰撞 ⇒易受碰撞的时间是 2 个帧长(2T)。
吞吐量公式:设一个帧时
T内网络平均产生G个帧(含重传),则
S=G e−2G⇒Smax=0.184 (G=0.5)S=G\,e^{-2G}\qquad\Rightarrow\qquad \boxed{S_{max}=0.184\ (G=0.5)}S=Ge−2G⇒Smax=0.184(G=0.5)
- 即纯 ALOHA 的最大信道利用率仅 18.4%。
时隙 ALOHA(Slotted ALOHA)
把时间划分为等长时隙(时隙 = 一个帧时
T),用户只能在时隙开始时发送。碰撞危险区从
2T缩短为1T,只能与同一时隙内的帧碰撞。代价:需要全网时钟同步。
S=G e−G⇒Smax=0.368 (G=1)S=G\,e^{-G}\qquad\Rightarrow\qquad \boxed{S_{max}=0.368\ (G=1)}S=Ge−G⇒Smax=0.368(G=1)
- 即时隙 ALOHA 最大利用率 36.8%,恰好是纯 ALOHA 的2 倍。
2.2 CSMA 协议(载波监听多路访问)
相对 ALOHA 的改进:发送前先监听信道(“先听后说”)。
- 载波监听:用硬件检测信道上是否有其他结点在发送。
- 1-坚持 CSMA:监听到忙就继续听,一旦空闲立即发送(发送概率为 1)。
- 优点:信道一空闲就利用,利用率高。
- 缺点:多个站点同时监听到空闲会同时发送,必然碰撞——传播时延越大,碰撞概率越大。
- 非坚持 CSMA:监听到忙就随机等待一段时间再重新监听。
- 优点:减少了碰撞(不会扎堆抢)。
- 缺点:信道空闲后可能没人马上发,造成信道利用率降低、时延增大。
- p-坚持 CSMA:适用于时分信道。监听到空闲时,以概率
p立即发送,以概率1-p推迟到下一个时隙再判断;监听到忙就等到下一个时隙再听。- 是 1-坚持与非坚持的折中,
p可调。
- 是 1-坚持与非坚持的折中,
根本缺陷:CSMA 只能"先听后说",一旦发送就无法停。若两个站点在传播时延内几乎同时开始发送,双方都"听"的时候信道是空闲的,于是都发出去 ——碰撞不可避免。解决之道是在发送过程中继续监听⇒ CSMA/CD。
2.3 CSMA/CD 协议(载波监听多路访问 / 碰撞检测)★核心
关键改进:“边听边发”(碰撞检测,Collision Detection)——发送过程中持续监听信道,一旦发现信号失真(碰撞),立即停止发送,并发送**人为干扰信号(jamming signal)**通知所有站点。
工作流程(“先听后发、边听边发、冲突停发、随机重发”)
- 先听后发:发送前监听,忙则等待。
- 边听边发:边发边检测,若检测到碰撞,立即停止发送,改为发干扰信号。
- 随机重发:执行截断二进制指数退避,等待后重试。
争用期(碰撞窗口)与最小帧长推导 ★必考
场景:设总线端到端传播时延为τ(单程),ε无限趋近于0。最坏情况是:
- 在
t = 0时 A 开始发送,信号需经τ才到达最远端的 B; - B 在
t = τ − ε(信号即将到达 B 之前)监听到信道空闲,开始发送,立刻发生碰撞; - 碰撞信号再从 B 传回 A,又需要
τ; - 于是 A 要在
t = 2τ − ε才能检测到碰撞。
结论:一个站点最多需要2τ时间才能确知自己是否遭遇碰撞。因此:
2τ称为争用期(contention period),也叫碰撞窗口(collision window)。只有经过争用期还没有检测到碰撞,才能肯定这次发送不会碰撞。
由此推出最小帧长:如果 A 在检测到碰撞之前就已经把整个帧发完了,它永远不会知道发生了碰撞,也就不会重传。所以要求站点在整个争用期内都必须仍在发送:
Td=LminC ≥ 2τ⟹Lmin ≥ 2τ⋅CT_d=\frac{L_{min}}{C}\ \ge\ 2\tau\qquad\Longrightarrow\qquad \boxed{L_{min}\ \ge\ 2\tau\cdot C}Td=CLmin≥2τ⟹Lmin≥2τ⋅C
即最小帧长 = 争用期 × 数据率 = 往返传播时延 × 数据率。
以太网实例(必背数字)
10 Mb/s以太网,取2τ = 51.2 μs:L_min = 51.2×10^-6 s × 10×10^6 b/s = 512 bit = 64 B- 故以太网规定最小帧长 64 字节(不足则填充到 64 B),
512 bit也称为一个"slot time"(争用期对应的时间单位)。 - 反过来:数据率越高,最小帧长越大(因为同样时间能发更多比特);
10 Mb/s → 64 B,100 Mb/s → 512 B。
两个对称的结论:
- 若帧太短(< 最小帧长):可能在检测到碰撞前就发完 ⇒ 检测不到碰撞 ⇒ 必须填充。
- 若帧太长:会长时间占住信道,别的站点等待过久 ⇒ 以太网规定最大帧长 1518 字节。
截断二进制指数退避算法(Truncated Binary Exponential Backoff)★
发生碰撞后,站点不能立即重发(否则再次碰撞),需随机退避:
- 取基本退避时间 = 争用期
2τ(即一个 slot time)。 - 从整数集合
{0, 1, …, 2^k − 1}中随机取一个数r,退避时间为r × 2τ。 - 参数
k = min{重传次数, 10},即:- 第 1 次碰撞:从
{0,1}中取(k=1); - 第 2 次碰撞:从
{0,1,2,3}中取(k=2); - ……
- 第 10 次及以后:
k固定为 10,退避窗口不再增大,上限为{0,…,1023}。
- 第 1 次碰撞:从
- 当重传 16 次仍不成功时,丢弃该帧并向高层报告。
为什么叫"截断":
k到10就封顶,不随碰撞次数继续指数增长(否则窗口会无限变大、时延失控)。
设计要点:退避窗口随碰撞次数增大(平均等待变长,缓解拥塞),但有上限(避免时延无界);同时窗口从小到大能让少量站点快速恢复发送。
考点变形:
- “第
i次碰撞后可选的退避时间有几种?” ⇒2^i种(i ≤ 10);i > 10时固定2^10 = 1024种。 - “平均退避多少?” ⇒ 均匀分布期望
(2^k − 1)/2个争用期。 - “最多重传几次?” ⇒16 次。
2.4 CSMA/CA 协议(碰撞避免,无线)★
CSMA/CD 在有线总线上很有效,但无线不能照搬。CSMA/CA 就是"无线版"的随机访问协议,它与 CSMA/CD 是直接对照的一对:
| 比较项 | CSMA/CD(有线) | CSMA/CA(无线) |
|---|---|---|
| 中文名 | 载波监听多路访问/碰撞检测 | 载波监听多路访问/碰撞避免 |
| 发送中做什么 | 边发边听,检测到碰撞立即停发 | 只发不听,无法检测碰撞 |
| 碰撞处理 | 检测到碰撞 → 停发 → 退避重发 | 尽量提前避免碰撞 |
| 如何知道发送成功 | 没检测到碰撞就认为成功 | 必须等接收方回 ACK,收不到就重传 |
| 退避时机 | 仅在检测到碰撞后 | 即使没检测到碰撞也要退避 |
| 用于 | 有线以太网(802.3) | 无线局域网(802.11) |
为什么无线不能用 CSMA/CD 做碰撞检测(高频简答):
- 无法边发边收:无线网卡发送时自身信号强度远大于接收信号,难以同时有效接收并检测微弱信号,硬件代价极高。
- 隐蔽站问题(hidden station):
A、C都能与B通信,但A、C相距远、互相听不到。于是A发给B与C发给B会在B处碰撞,而A、C都检测不到。 - 暴露站问题(exposed station):
B正在发给A,C想发给D(与A无关),C监听到信道忙而误以为不能发,其实它的发送并不会干扰B→A,造成不必要的等待。 - 信号强度随距离衰减快,且存在多径衰落,碰撞检测不可靠。
因此 CSMA/CA 采用"碰撞避免(Avoidance)":尽量在碰撞发生前就避开,靠以下手段:
- 先听后发(载波监听)——与 CSMA 相同。
- 帧间间隔 IFS(InterFrame Space):不同优先级的帧等待不同长度的空闲时间才能发。
SIFS(最短):用于ACK、CTS、以及已持有信道的数据帧的后续帧(优先级最高)。
PIFS:用于PCF(点协调功能)。
DIFS(最长):用于普通的异步数据帧(DCF)。
关系:
SIFS < PIFS < DIFS。因为 ACK 只等 SIFS,所以ACK 总比别人的新数据帧先抢到信道,从而保证确认不被撞。
- 随机退避:信道空闲后仍需退避一段随机时间(与 CSMA/CD 类似,但即使没检测到碰撞也要退避,以主动避免碰撞)。
- 确认机制 ACK:CSMA/CA 无法检测碰撞,只能靠接收方显式回 ACK来推断帧是否成功;收不到 ACK 就重传。
RTS/CTS 信道预约机制(虚拟载波监听机制)
- 可选 RTS/CTS 握手:发送方先发
RTS(请求发送),接收方回CTS(允许发送),二者都携带"本次通信将持续多久",听到的其他站点据此设置网络分配向量 NAV并保持沉默 —— 有效缓解隐蔽站问题。 - 具体流程:①发送方广播 RTS 控制帧(先听后发,忙则退避)
②AP 广播 CTS 控制帧(需在 RTS、CTS 中指明预约时长)
③其他无关节点收到 CTS 后自觉 “禁言” 一段时间;发送方收到 CTS 后,就可以发送数据帧
④AP 收到数据帧后,进行 CRC 校验,若无差错就返回 ACK 帧
两点访问方式:DCF(分布式协调功能,用 CSMA/CA,必须实现)与PCF(点协调功能,由 AP 集中轮询,可选)。
2.6 随机访问各协议对比
| 协议 | 是否监听 | 是否检测碰撞 | 最大信道利用率 | 关键缺点 |
|---|---|---|---|---|
| 纯 ALOHA | 否 | 否 | 18.4% | 碰撞危险区 2T,效率最低 |
| 时隙 ALOHA | 否(只在时隙起点发) | 否 | 36.8% | 需全网时钟同步 |
| 1-坚持 CSMA | 是 | 否 | 高于 ALOHA | 空闲瞬间多站齐发,必然碰撞 |
| 非坚持 CSMA | 是 | 否 | 较高 | 空闲后可能无人发,时延大 |
| p-坚持 CSMA | 是 | 否 | 较高 | 参数p需整定 |
| CSMA/CD | 是 | 是 | 接近 1(高负载下仍可很高) | 碰撞后仍需退避;不适用于无线 |
| CSMA/CA | 是 | 否(改为避免 + ACK 确认) | 低于 CSMA/CD | 退避开销大、需 ACK,吞吐量低于有线 |
三、轮询访问介质访问控制
核心思想:不争用,而是由一个中心控制者或令牌来顺序授予发送权。无碰撞,可保证最大时延。
3.1 轮询(Polling)
- 一个**主结点(primary)轮流"邀请"各从结点(secondary)**发送:主结点发轮询帧 → 从结点有数据就发、无数据就回 NAK → 主结点问下一个。
- 优点:无碰撞,可按优先级/公平性调度。
- 缺点:轮询开销大(空闲站点也要被询问);主结点是单点故障;引入额外轮询时延。
- 适用:低负载时效率反而低(大量无效轮询),高负载时效率高。
3.2 令牌传递(Token Passing)
- 一个称为令牌(token)的特殊帧在环上循环传递,只有持有令牌的站点才能发送数据。发完(或超时)后把令牌传给下一站。
- 代表:令牌环(Token Ring,802.5)、令牌总线(Token Bus,802.4)。
- 优点:无碰撞、重负载下效率高且稳定、可支持优先级、可计算最大等待时间(令牌绕环一周的时间有上界)。
- 缺点:令牌维护复杂(令牌丢失要重新生成、多令牌要清除);轻负载时站点还得干等令牌绕过来,时延大、效率低。
轮询类 vs 随机访问的核心对比(高频简答):
- 轻负载:随机访问好(几乎不碰撞,即发即走);轮询差(为没数据的站点白花开销)。
- 重负载:轮询/令牌好(有序发送,几乎无碰撞,吞吐量稳定);随机访问差(碰撞剧增,吞吐量反而下降)。
四、三大类协议总对比 ★
| 比较项 | 信道划分 | 随机访问 | 轮询访问 |
|---|---|---|---|
| 分配方式 | 静态、预先划分 | 动态、争用 | 动态、按序授予 |
| 是否可能碰撞 | 不会 | 会 | 不会 |
| 轻负载性能 | 差(空闲也占资源) | 好 | 差(轮询/令牌开销) |
| 重负载性能 | 一般 | 差(碰撞剧增) | 好 |
| 时延保证 | 有(固定分配) | 无 | 有(可算上界) |
| 典型场景 | 电话干线、光纤骨干、蜂窝 | 以太网、无线 | 令牌环、实时工业网络 |
高频结论:随机访问的信道吞吐量随负载增大先升后降;轮询/令牌的吞吐量在高负载下趋于稳定(接近 1)。
五、碰撞域与广播域(与本节的"共享信道"直接相关)
| 设备 | 所在层次 | 碰撞域 | 广播域 | 说明 |
|---|---|---|---|---|
| 集线器 Hub | 物理层 | 所有端口同属一个碰撞域 | 一个 | 本质是多端口中继器,共享带宽,必须用 CSMA/CD |
| 网桥 / 交换机 | 数据链路层 | 每个端口一个独立碰撞域 | 一个(不划分) | 按 MAC 地址转发,独享带宽,可全双工 |
| 路由器 | 网络层 | 每个接口一个 | 每个接口一个 | 隔离广播域 |
- 碰撞域(冲突域):能互相碰撞的站点集合。CSMA/CD 只在同一碰撞域内有效。
- 广播域:一个站点发出的广播帧能到达的范围。
- 交换机全双工:端口全双工工作时不再需要 CSMA/CD(收发各占一对线,不会碰撞),所以"交换式以太网"里 CSMA/CD 实际上被"关掉"了。
记忆:Hub 不隔离任何域;交换机隔离碰撞域、不隔离广播域;路由器两者都隔离。
六、易错点清单
- ALOHA 数字:纯 ALOHA 最大18.4%,时隙 ALOHA36.8%,别记反;时隙 ALOHA 的收益来自缩短碰撞危险区(2T → 1T),代价是全网时钟同步。
- 1-坚持 CSMA 的致命缺陷是"监听到空闲立即发"⇒ 多站同时抢,必然碰撞;非坚持 CSMA 的缺陷是时延大(空闲可能无人发)。
- CSMA 与 CSMA/CD 的区别只有一条:CSMA/CD边发边听(碰撞检测),CSMA 只先听后说。
- 争用期是
2τ(往返)不是τ(单程)。最小帧长公式是L_min = 2τ·C,写成τ·C是最常见错误。 k = min{重传次数, 10},退避窗口2^k,封顶 1024 个争用期,最大重传 16 次。别把两个数字(10 和 16)记混。- CSMA/CD 不能用于无线,原因是隐蔽站/暴露站 + 无法边发边收;无线用CSMA/CA(碰撞避免,靠 IFS + 退避 + ACK + 可选 RTS/CTS)。
SIFS < PIFS < DIFS;ACK/CTS用SIFS,普通数据帧用DIFS。- WDM 是光的 FDM;CDMA 靠码片序列正交性区分用户,内积
+1/0/−1分别对应比特1/未发/比特0。 - 集线器所有端口是一个碰撞域;交换机每个端口是一个碰撞域但仍是一个广播域。
- 信道划分"不会碰撞"但不是"最优":因为静态分配在用户空闲时浪费信道,所以轻负载下反而不如随机访问。