在软考网络规划设计师和网络工程师的历年真题中,CSMA/CD的出现频率非常高。从2010年网规真题到2024年上半年网工真题,命题人反复在这一知识点设置考点,形式涵盖概念辨析、计算推导和场景判断。多数考生对CSMA/CD的理解停留在"先听后说、冲突停发"的八字节口诀上,一旦遇到涉及争用期、最小帧长、后退算法或信道利用率计算的题目就束手无策。这篇文章从共享介质网络的根本矛盾出发,把CSMA/CD的底层机制、参数推导和命题套路一次性讲清楚。
在以太网诞生之初,所有计算机通过一根同轴电缆共享同一根传输介质。这种拓扑结构简单、成本低廉,但有一个根本性的通信难题:当多台计算机同时往总线上发送数据时,电信号会在介质上叠加,导致接收方无法正确解析任何一方的数据帧。这种现象被称为冲突。
在共享总线网络中,任何一台主机发出的信号都会沿总线向两端传播,途中经过的每一台主机都会收到。两台主机如果在时间上重叠发送,电信号就会在总线上相遇混合。接收方看到的将是一个失真的波形,既不是A主机的帧也不是B主机的帧,而是无法还原的噪声。两个发送方都浪费了传输机会,介质带宽也被无谓占用。
CSMA/CD的全称是载波监听多路访问与冲突检测——这个名称本身就揭示了协议的两个核心动作。载波监听指的是发送方在发送数据之前先检查总线上是否有其他主机正在传输,如果信道空闲则开始发送,如果信道繁忙则持续监听等待。冲突检测指的是发送方在发送过程中持续监视总线上的信号电压,一旦发现实际电压超出正常发送电压的阈值,就判断发生了冲突,立即停止发送。
这种机制的精妙之处在于它不依赖任何中心节点或调度器,所有主机按照同一套规则自主决策,是完全分布式的介质访问控制方式。在以太网发展史上,CSMA/CD是区别于令牌环网、令牌总线网的核心特征,也是以太网成为局域网事实标准的关键能力之一。
共享总线网络中的所有主机处于同一个冲突域中,任意两台主机同时发送都会导致冲突。而交换式以太网的每一对端口之间形成一个独立的冲突域,使得冲突从根本上被消除。这一差异直接决定了CSMA/CD在两种网络架构中的不同命运——在共享总线网络中它是必需品,在交换式网络中它变成了历史遗产。
CSMA/CD的工作流程是一个完整的五步闭环,每一步都是对上一步结果的响应。
第一步是载波监听。发送方在发送前先检测总线上的载波信号。如果信道空闲且空闲时间达到帧间间隔要求,发送方就可以开始发送。如果信道繁忙,发送方持续监听,直到检测到信道空闲,再等待一个帧间间隔后开始发送。
一个容易被忽略的细节:即使发送方检测到信道空闲并立即开始发送,冲突仍可能发生。原因是信号在介质上的传播需要时间。主机A在时刻T检测到信道空闲并开始发送,相距较远的主机B可能在T+Δt时刻也检测到信道空闲(A的信号尚未传播到B的位置),B也开始发送,两个信号在途中相遇就发生了冲突。Δt的最大值就是端到端传播时延,两倍端到端传播时延就是争用期参数。
第二步是发送数据帧。发送方在开始发送后并不会放松警惕,而是持续进行冲突检测。在发送过程中,发送方不断比较总线上的信号电压与自身发送电压的差异。如果电压异常升高——超过了正常发送时可能出现的最大值——就说明有其他主机的信号叠加了进来,冲突已经发生。
第三步是冲突强化。一旦检测到冲突,发送方不会立刻停止,先发送一个人为干扰信号,通常持续三十二到四十八个比特的时间。目的是确保所有参与冲突的主机都明确感知到冲突,避免因接收灵敏度不足而漏检。强化信号结束后,冲突各方同时停止发送。
第四步是后退等待。停止发送后,冲突各方并非立即重传,而是各自等待一段随机时间。等待时间的计算使用的就是著名的二进制指数后退算法。这个算法是CSMA/CD的精华所在,也是软考命题的重点区域,后文会详细展开。
第五步是重新监听。等待时间结束后,发送方回到第一步,重新对信道进行载波监听。重传次数通常上限为十六次,全部因冲突失败则向上层报告丢弃该帧。
争用期的长度决定了发送方需要进行冲突检测的时间窗口。假设端到端单向传播时延为τ,那么从发送方开始发送算起,最坏情况下要经过2τ的时间才能确定是否发生冲突。这个2τ就是争用期,也称为冲突窗口。发送方只有在发送开始后的前2τ时间内可能检测到冲突,一旦超过这个窗口仍未检测到冲突,就可以确认自己已经占用了信道,后续发送不会再遇到冲突。
帧间间隔是相邻两次发送之间的最小间隔时间,在以太网中规定为九十六个比特时间。这个间隔有两个作用:一是给接收方留出处理上一帧的时间,二是防止某个主机连续霸占总线。软考命题中偶尔会考察帧间间隔与最大吞吐量之间的关系,考生应当理解帧间间隔会直接降低有效传输速率。
最小帧长是CSMA/CD协议中最具工程智慧的设计之一,它直接决定了以太网的覆盖范围和传输速率之间的约束关系。
为什么需要最小帧长?答案是:发送方必须在发送完整个帧之前检测到冲突。如果帧太短,发送方在冲突发生前就已经结束了发送,那么它永远不会知道这次发送失败了,也不会执行重传。这样的帧等同于从协议的控制下溜走了,破坏了CSMA/CD的可靠性保证。
具体来说,帧的发送时延必须大于等于争用期,用公式表达即L/R ≥ 2τ。在10Mbps以太网中,争用期确定为五十一点二微秒,对应的最小帧长为五百一十二比特,即六十四字节。
这个六十四字节的最小帧长意味着任何短于六十四字节的数据帧都需要通过填充字段补齐,否则协议无法保证冲突检测的有效性。
反过来,最小帧长与争用期的关系也限定了以太网最大覆盖范围。百兆以太网将数据率提高了十倍,如果争用期不变,最小帧长就应该是八百字节,这显然不可接受。因此百兆以太网的做法是反过来缩短争用期到五点一二微秒,使最小帧长保持不变。争用期缩短意味着最大网络直径必须缩小——这就是百兆以太网覆盖范围比十兆以太网小得多的根本原因。
到了千兆以太网,继续缩短争用期会导致网络直径过小。千兆以太网的解决方案是引入载波扩展机制,将最小帧长扩展到五百一十二字节,保持争用期合理。这是一个典型的工程权衡:用额外填充开销换取可用的网络覆盖范围。
二进制指数后退算法是CSMA/CD协议中对冲突进行自适应处理的核心机制。它的设计思路非常简单且有效:碰撞发生的次数越多,说明当前网络负载越重,每个站点就应该等待更长的时间再重试,从而降低再次碰撞的概率。
算法的具体规则如下:发送方在第k次冲突后——k从零开始计数——从整数集合{0, 1, 2, …, 2^k-1}中随机选取一个整数r,然后等待r个争用期的时间后再尝试重传。当k等于一时,从{0, 1}中随机选取,等待零或一个争用期;当k等于三时,从{0, 1, 2, 3, 4, 5, 6, 7}中随机选取,等待零到七个争用期;以此类推。k的上限通常设为十——即当冲突次数达到十次后,随机范围不再翻倍,保持在0到1023之间。
这套规则体现了三个关键的协议智慧。第一,后退窗口随冲突次数指数增长,保证了在网络负载加重时各站点的重传时间迅速拉开差距,大大降低了连续冲突的可能性。第二,随机选取等待值使得同时冲突的两个站点极有可能选取不同的等待值,从而在下一轮错开发送时间。第三,引入上限机制防止后退时间无限制增长,避免了在高负载场景下出现不可接受的延迟。
软考命题人最爱考察的一个混淆点是:后退时间的基数是什么?很多考生误以为是以帧发送时间为单位,实际上后退算法的等待时间是以争用期为单位的。在10Mbps以太网中,一个争用期就是发送五百一十二比特的时间,即五十一点二微秒。如果随机选取的r值为三,实际等待时间就是三乘以五十一点二微秒,约等于一百五十三点六微秒。
另一个命题热点是后退窗口的指数增长规律与网络负载之间的关系。当网络负载较轻时,冲突次数通常不会超过一到两次,后退时间很短,重传几乎感觉不到延迟。但当网络负载接近饱和时,冲突频繁发生,后退窗口迅速扩大到几百甚至上千个争用期,导致平均延迟急剧上升。这解释了为什么共享总线以太网的有效吞吐量会在负载超过百分之六十左右时开始急剧下降——不是因为信道容量不够,而是因为冲突和后退消耗了大量可用的传输时间。
在网规高级真题中,信道利用率是一个频繁出现的计算类考点。理解信道利用率,需要先引入一个关键的归一化参数a。
参数a的定义为:a
本篇完!