计算机网络学习站

kp-008 · 02-物理层与数据链路层

介质访问控制与 CSMA/CD

核心 约 25 分钟 CSMA/CD介质访问控制冲突二进制指数退避
我的进度:

注:本文基于模型知识整理,建议结合权威教材与 RFC 原文核对细节。

一句话定义

多台主机共享一条广播信道时,介质访问控制(MAC, Medium Access Control)解决「谁在什么时候可以发送」;以太网的经典答案是 CSMA/CD:先听后发、边发边听、冲突即停、发强化干扰、二进制指数退避重试。

为什么重要

共享信道的协调问题贯穿所有广播式网络——从早期同轴电缆以太网到今天的 Wi-Fi 与蜂窝上行。CSMA/CD 中「争用期 2τ 推出最小帧长 64 字节」是计算机网络里最漂亮的设计闭环之一:物理参数(传播时延、速率)反过来决定 MAC 层帧格式,理解它才能真正理解以太网为什么长这样、速率升级为什么牵动网段跨距,以及为什么现代全双工交换式以太网可以彻底告别这套机制。

前置知识

建议先读 kp-007《组帧与差错检测:奇偶校验、CRC 与海明码》,需要帧的概念;同时应熟悉 kp-002《性能指标》中发送时延与传播时延的区分,本文的推导完全建立在这两者的关系上。

核心概念

  • 介质访问控制三大流派:
  • 信道划分(channel partitioning):把信道按频率、时间或码字静态切给各用户(FDM/TDM/CDMA,见 kp-006)。负载重时无冲突、效率高;负载轻时时隙空转,浪费大。
  • 随机访问(random access):允许自由竞争,冲突后重试。代表:ALOHA、时隙 ALOHA、CSMA、CSMA/CD。
  • 轮流(taking turns):轮询(polling)与令牌传递(token passing)。无冲突且公平,但令牌维护有开销,令牌丢失即全网瘫痪。
  • ALOHA 到时隙 ALOHA:纯 ALOHA 想发就发,与任何正在传输的帧重叠即失败;时隙 ALOHA 把时间切成时隙、只允许在时隙起点发送,冲突窗口减半,效率约提高一倍(教科书经典结论,具体数值推导不展开)。
  • CSMA(载波侦听多路访问,Carrier Sense Multiple Access):发送前先侦听,信道忙则不发,已能大幅减少冲突,但消除不了冲突——原因正是传播时延造成的「侦听盲区」。
  • CSMA/CD(CD 即 Collision Detection):边发边听,发现冲突立即停发。
  • 强化干扰信号(jamming signal):检测到冲突后故意发一段短信号,确保全网都感知到这次冲突。
  • 二进制指数退避(binary exponential backoff):第 i 次冲突后从 0 到 2^i − 1 中均匀随机选 k,等待 k 个时隙再重试;竞争窗口封顶后不再增长,重试次数也有上限(教科书共识:经典以太网为 16 次),超过即放弃并向高层报错。
  • 争用期(contention period)2τ 与最小帧长:冲突检测的物理下界,见下文推导。

公式与模型

设单程最大传播时延为 τ:

  • 最坏情形下,A 刚发出的帧头即将走完全程时,最远端的 B 侦听到信道空闲并发送,冲突发生在 t = τ 附近,冲突信号还要再走一个单程才回到 A,故 A 在 t = 2τ 之前无法确知是否冲突——争用期 = 2τ。
  • 最小帧长条件:帧的发送时间 ≥ 2τ,即最小帧长(比特)= 2τ × 数据率。
  • 经典 10 Mb/s 以太网取争用时隙 = 512 比特时间,对应最小帧 64 字节;该时隙长度反过来限制了网段的最大跨距(量级为公里级,实际标准还受中继器数量等约束而更短)。

图示

A ──────────────── L ──────────────── B      单程传播时延 τ

t = 0        A 开始发送,帧头向 B 传播
t = τ 前夕   帧头几乎到达 B,B 侦听到「信道空闲」,也开始发送
t = τ        两个信号在途中相遇,冲突发生,干扰向两端扩散
t = 2τ 前夕  冲突信号传回 A,A 检测到冲突:停发、发 jam、退避

结论:发送方至少要持续发送 2τ 时长,才能保证「有冲突必被自己检出」
     即 发送时间 ≥ 2τ,等价于 帧长 ≥ 2τ × 数据率(最小帧长的由来)

原理与机制

CSMA/CD 完整流程:

  1. 从网络层收到分组后组装成帧;
  2. 侦听信道:空闲(并满足帧间最小间隔,经典以太网为 96 比特时间)则发送,忙则继续侦听;
  3. 发送过程中持续对比信道信号与己方发送内容(边发边听);
  4. 检测到不一致即判定冲突:立刻终止发送,发出强化干扰信号,让所有站点都知道信道已被污染;
  5. 执行二进制指数退避:第 i 次冲突在 0 到 2^i − 1(i 封顶)中随机选 k,等 k 个争用时隙后回到第 2 步重试;冲突次数达到上限则放弃并报错。

为什么必须有最小帧长:若帧太短,发送方可能在 2τ 检测窗口结束前就已发完,之后即使发生冲突它也一无所知,误以为发送成功,只能等上层超时兜底,错误被掩盖。「发送时间 ≥ 2τ」这条硬约束把速率、跨距、帧长三者绑在一起:速率翻倍而帧长不变,τ 必须减半,网段跨距随之缩短。

现代以太网为何不再需要 CSMA/CD:交换机把网络切成每个端口一个冲突域,全双工链路收发各占一线,根本不存在共享信道,冲突无从发生,802.3 在全双工模式下也不再使用 CSMA/CD。无线场景另当别论:Wi-Fi 适配器自己发出的信号远强于它同时能收到的对方信号,「边发边听」不可行,且存在隐藏终端问题,因此 802.11 走冲突避免路线 CSMA/CA(见 kp-029)。轮流流派中,令牌传递曾与以太网竞争局域网霸主地位,因成本与复杂度落败,如今基本退场,只在部分工业现场总线中留有余脉。

实例分析

把经典以太网的参数串一遍:数据率 10 Mb/s,争用时隙 512 比特,即 2τ = 51.2 微秒;信号在铜缆中的传播速率约为光速的量级偏下(每微秒数百米),单程 25.6 微秒对应约 5 公里量级——这就是经典以太网网段跨距按公里级设计的物理来源。速率升到 100 Mb/s 而 64 字节最小帧不变时,512 比特时间缩为 5.12 微秒,τ 只剩 2.56 微秒,跨距被压到百米量级(双绞线标准正是 100 米);千兆以太网若仍按 512 比特时隙计算,跨距只剩几十米、不可用,于是半双工模式引入载波延伸(carrier extension)等手段凑足发送时长,主流的全双工模式则干脆绕开争用问题。

退避演算:某站点已连续冲突 2 次,竞争窗口为 0 到 2^2 − 1 = 3,随机选中 k = 2,则等待 2 × 512 比特时间后重试;若再次冲突,窗口扩到 0 到 7,如此指数扩张直至封顶——负载越重退避越久,冲突自行「降温」。

常见误区

  • 认为 CSMA/CD 能消灭冲突:它不能,只能让冲突被尽早检测、代价被尽量压低,重传仍不可避免。
  • 认为「发送前侦听到空闲就安全」:传播时延造成盲区,远处刚发出的信号尚未到达,侦听结果不可信,争用期 2τ 正是为此而生。
  • 把 64 字节最小帧当成随意选的参数:它由「发送时间 ≥ 2τ」推出,速率或跨距变了这条等式就不再自动成立。
  • 认为今天的以太网仍在运行 CSMA/CD:全双工交换式以太网已不使用,它只存活于半双工遗留场景。
  • 把退避的指数增长理解成无限扩张:竞争窗口封顶、重试次数有上限,不会永远翻倍。

自测题

  1. 为什么检测一次冲突最长需要 2τ?

答案要点: 最坏情形是帧头即将到达最远端时对端开始发送,冲突信号还要再传一个单程 τ 才回到发送方,合计 2τ。

  1. 10 Mb/s 以太网 512 比特时隙对应多长时间?最小帧长由此如何确定?

答案要点: 512 比特 ÷ 10 Mb/s = 51.2 微秒;最小帧长 = 512 比特 = 64 字节(目的地址到 FCS),保证发送时间 ≥ 2τ。

  1. 数据率提高到 100 Mb/s 后维持 64 字节最小帧,对网段跨距意味着什么?

答案要点: 512 比特时间缩为十分之一,τ 必须缩小十倍,跨距缩至百米量级,因此快速以太网网段更短。

  1. 写出 CSMA/CD 的行动口诀,并解释「发强化干扰」的目的。

答案要点: 先听后发、边发边听、冲突即停、指数退避;强化干扰让全网站点都意识到信道已被污染,尽快让步。

  1. 为什么现代全双工交换式以太网不再需要 CSMA/CD?

答案要点: 交换机每端口独立冲突域、收发双线全双工,不存在共享信道与并发发送,冲突机制失去作用对象。

延伸阅读

  • 谢希仁《计算机网络》,数据链路层共享信道一节
  • IEEE 802.3
  • J. Kurose, K. Ross, Computer Networking: A Top-Down Approach,多路访问协议章节