☰
以太网与CSMA/CD:从冲突检测到退避算法再到标准全解
2026/10/14 4:03:37 网站建设 项目流程

备考网络规划设计师的朋友,局域网这块绕不开CSMA/CD、二进制指数退避和以太网标准这几个名字。说实话,很多人在原理层面都能说出个大概,但一遇到“最短帧长怎么算”“退避时间等多久”“100BASE-FX半双工为什么只有412米”这类考题就卡壳。这篇文章直接把这条线串起来讲透:CSMA/CD在解决什么问题,退避算法背后是怎么设计的,以太网从10M到400G的标准该怎么认,最后再给你一套做计算题和判断题的实战抓手。无论你是正在备考软考网规,还是工作中要碰以太网规划和排障,这部分内容都值得认真捋一遍。

1. CSMA/CD机制拆解:先听后发、边发边听

1.1 从一个聚会场景理解CSMA/CD

想象一个房间里只有一个麦克风,几个朋友要轮流发言。合理的规则是:开口前先竖起耳朵听一下,有没有别人正在说话;没人说,你再拿起麦克风说。万一你和另一个人同时抢到了麦克风,声音重叠了,大家都觉得乱,那就一起停下来,各自等一段随机的时间再重新争取。这就是CSMA/CD的核心逻辑:载波监听、多路访问、冲突检测。

在最早的总线型以太网里,所有站点共享一根同轴电缆,同一时刻只允许一个站点发送数据。所谓“载波监听”,就是每个站点在发送前监听信道上有无数据信号;所谓“多路访问”,是说信道是公共的,谁都可以尝试使用;所谓“冲突检测”,是发送的同时还要监视信道,发现信号异常(比如信号幅度超过正常范围)就判定发生了碰撞。

这个协议属于IEEE 802.3标准的MAC子层协议。学习它的时候,脑子里一定要记住它诞生于“共享介质、半双工”的时代,它解决的是多个站点如何公平、高效地共享一个信道的问题。现在交换机网络里多数端口是全双工的点到点连接,CSMA/CD很多场景下已经不启用了,但它的设计思路至今仍影响着我们对冲突域、最小帧长、半双工模式这些概念的理解。

1.2 CSMA/CD的完整工作流程

CSMA/CD可以归纳为四句话:先听后发,边发边听,冲突停发,随机重发。展开来说,一个站点要发送数据帧时,会经历下面几个阶段。

第一个阶段,信道检测。发送站点持续监听信道,如果检测到信道忙,就推迟发送,并且继续监听直到信道空闲。这里有个容易被忽略的细节:以太网帧之间有帧间隙(IFG),标准规定是96比特时间,比如10Mbps以太网就是9.6微秒。站点点发送数据前,不只是简单地看到信道没有信号就可以发,通常还要等信道空闲达到一个IFG的时间,确保上一个帧已经完全结束,这符合协议的接入规则。

第二个阶段,开始发送。信道空闲后,站点开始发送数据帧。但发送不是“发完就拉倒”,而是边发送边从接收通道检测信号。为什么边发边听?因为电磁波在电缆上传播需要时间,一个站点从开始发送到检测出冲突,最远要等信号跑到最远端、撞车后再跑回来,这个时间是“往返传播时延”,也就是前面提到的2倍传播时延。如果帧已经在短时间内发完了,等冲突信号回来时发送都已经结束了,那冲突就没被检测到,数据就被白白丢了。这就是后面最小帧长问题的来源。

第三个阶段,检测到冲突后的处理。一旦站点在发送过程中检测到冲突,它会立即停止发送数据,但不会直接沉默。它会先发一个强化冲突的信号,一般称为Jam信号,通常为32或48比特的连续数据。这个信号的作用是确保总线上其他站点也能及时发现冲突,而不是以为只是一次正常的信号波动。这个细节在考试里偶尔会考到,记住它的目的是“强化冲突”。

第四个阶段,随机延迟重发。冲突发生后,所有卷入冲突的站点都退让一步,各自按二进制指数退避算法计算一个随机的等待时间,等待时间过后再重新尝试发送。这里“随机”很重要,如果所有站点冲突后都等同样长的时间,那它们下次必定还会撞在一起,网络就瘫痪了。

1.3 为什么全双工时代CSMA/CD还在被反复强调

现在你去机房看,基本全是交换机组网,服务器和交换机之间都是千兆、万兆光纤或者双绞线连接,网卡和交换机端口协商成全双工模式,一发一收各走各的通道,根本不冲突,CSMA/CD自然就不参与工作。那为什么软考网规还年年考,工作里还要求理解它?

第一,CSMA/CD塑造了“冲突域”这个概念。同一个冲突域内,任意时刻只能有一个站点成功发送。集线器连接的设备都在同一个冲突域里;交换机的一个端口就是一个独立的冲突域。这个区分是网络设计的基础,也是回答“集线器和交换机的区别”“交换机为什么能扩展网络”这类问题的一把钥匙。

第二,它决定了以太网帧的最小长度。为了让发送站点在帧发完之前就能感知到冲突,必须保证帧的发送时间大于等于最大往返传播时延。于是就有了经典公式:最短帧长 = 2 × 最远两端点间的传播时延 × 数据传输速率。这个公式不只在考试里出现,在规划长距离半双工链路时依然有实际意义。

第三,它在半双工和协商机制里依然存在。网卡和交换机端口在10M/100M速率下经常有人配置成半双工或自动协商,一旦两端协商不一致,就会出现大量冲突和CRC错误。此时你翻手册,CSMA/CD的机制还是排障的理论基础。

2. 二进制指数退避算法:冲突后等待多久才能重发

2.1 为什么不能简单等待固定时间再重发

冲突之后,所有涉及冲突的站点如果立刻重发,等于零间隔再撞一次,必然再次冲突。如果等待固定且相同的时间,也一样会同步撞车。那能不能等一个很长的固定时间呢?可以,但网络效率太低了,明明没什么站点竞争,却非要干等。

核心矛盾在于:等待时间太短容易再次冲突,等待时间太长浪费带宽。更好的思路是让等待时间随机化,并且随着冲突次数的增加,动态拉大选择范围。你想想,一次冲突可能是两个站点偶然撞上;如果连续冲突多次,说明信道上的竞争站点很多,此时等待时间的选择范围应该扩大,才能降低再次相撞的概率。二进制指数退避算法就是这么设计的。

2.2 算法规则详解

当站点第n次(n从1开始计数)发生冲突后,它会从0到(2^n - 1)这2^n个整数中随机选一个数K,然后等待K个时隙(Slot Time)后再重发。举个例子,第一次冲突时,n=1,可选范围为0到1,也就是随机选0或1;第二次冲突时,n=2,随机选0到3;第三次冲突时,随机选0到7。每次冲突,选择范围以2的指数级翻倍,这就是“二进制指数”名字的由来。

同时协议还规定了两个约束:一是当n增长到10以上时,退避范围不再继续扩大,固定在0到1023之间,也就是最多等待1023个时隙,避免等待时间无限膨胀;二是当重传次数达到16次仍然失败时,站点就放弃这一次发送,并且向上层协议报告错误。这个16次的上限也很重要,考试选择题偶尔会直接问“重传多少次后放弃”,答案是16次。

这里需要区分“时隙”和普通时间单位的不同。CSMA/CD中的时隙长度定义为争用期,即网络上最大往返传播时延2τ,在10Mbps经典以太网中约为51.2微秒,等价于512比特的发送时间。为什么是512比特?因为以太网最短帧长是64字节,也就是512比特,两者正好对应。站点选好随机数K之后,实际等待时间就是K乘以51.2微秒,之后还要再等一个帧间隙IFG,才能尝试重发。

2.3 退避过程实例计算

假设一个10Mbps以太网中有A、B两个站点同时发送数据,发生第一次冲突。此时n=1,A和B各自从0和1中随机选数。情况有两种可能。如果A选了0,B选了1,那么A立刻重发,B等到51.2微秒后再重发,冲突解除。如果A和B都选了0,两者立刻重发,于是发生第二次冲突。

第二次冲突时,n=2,A和B各自从0到3中随机选数。假设A选的随机数是3,B选的随机数是0。那么A要等待3×51.2微秒=153.6微秒,B则可以立即重发。注意这里B立即重发仍然可能撞上其他站点,如果B又发送又冲突了,它的退避次数继续增加。每个站点独立记录自己的冲突次数,互不影响。

再算一个更贴近考试的综合题:一段同轴电缆总线长2000米,信号传播速率为2×10^8米/秒,数据传输率10Mbps。最远两端的站点同时发送时,要经过多久才能检测到冲突?

单程传播时延τ = 2000 / (2×10^8) = 10微秒。往返传播时延2τ = 20微秒。所以一个站点最快在开始发送后20微秒左右就可以感知到冲突。为了保证在这之前帧还没发完,发送持续时间必须大于20微秒,20微秒×10Mbps = 200比特,约25字节。但802.3标准规定最短帧长为64字节,所以最终这个网络的最小帧长仍然是64字节,因为标准值大于计算值。考试时经常有人只按公式算出一个小于64字节的数就直接选,丢分很冤。牢记结论:计算值与标准值比较,取较大者。如果题目给定条件算出来大于64字节,就用计算值。

2.4 算法设计的巧妙之处

指数退避的精妙之处在于自适应性。网络空闲时,冲突少,退避范围小,等待时间短,信道利用率高。网络拥塞时,冲突频发,退避范围迅速扩大,站点之间的重发时间差异拉大,冲突概率大大降低,网络不至于因为抢信道而整体崩溃。这种“遇到拥塞自动退让,冲突越频繁退让越狠”的思路,后来也被很多其他协议借鉴,比如Wi-Fi的CSMA/CA也采用了类似的机制。

3. 以太网标准体系:从10M到400G的命名密码

3.1 标准命名规则与家族演变

IEEE 802.3从1983年发布第一个以太网标准以来,陆续加入了大量物理层规范。这些标准有一个共同的命名公式:速率 + 传输方式 + 介质标识。比如10BASE-T里面,10代表10Mbps,BASE代表基带传输,T代表双绞线。理解了这个公式,看到名字基本就能猜到速率和用什么线。

为什么特别强调BASE(基带)?因为历史上还存在过宽带(Broadband)以太网,它把信道划分为多个频段,可同时传多路信号,但成本高、复杂度大,后来没有成为主流,所以现在几乎见到的都是BASE。考试偶尔会问“以太网采用的传输技术是什么”,答案就是基带传输。

物理层标准太长,我整理了一张常用对照表,备考时反复看几遍能省很多事:

标准速率介质与接口最大段长关键说明
10BASE510Mbps粗同轴电缆,AUI接口500米最早的以太网,总线型
10BASE210Mbps细同轴电缆,BNC接口185米(约200米)比10BASE5更细更灵活
10BASE-T10Mbps三类以上UTP双绞线,RJ45100米星型拓扑,使用2对线
100BASE-TX100Mbps五类UTP/STP双绞线100米快速以太网,使用2对线
100BASE-FX100Mbps多模光纤全双工2km,半双工412m半双工距离受CSMA/CD限制
1000BASE-SX1Gbps多模光纤,850nm短波长220米到550米千兆以太网,短距离光口
1000BASE-LX1Gbps单模/多模光纤,1300nm长波长单模5km,多模550m长距离千兆光口
1000BASE-T1Gbps超五类以上UTP双绞线100米4对线同时双向收发
10GBASE-SR10Gbps多模光纤,短距离300米左右万兆短距光口
10GBASE-LR10Gbps单模光纤,长距离10公里万兆长距光口
10GBASE-ER10Gbps单模光纤,超长距离40公里万兆超长距光口

这张表里有一个高频考点,就是100BASE-FX的半双工距离为什么只有412米而不是2公里。原因还是在CSMA/CD:半双工模式下,为了保证最短帧长64字节在发送完之前能检测到远端冲突,最大往返时延必须小于等于51.2微秒。光纤中信号传播速度约为2/3光速,即约2×10^8米/秒,算下来半双工跨距上限就在412米附近。全双工模式下没有冲突检测的需求,所以距离可以拉到2公里。每次看到这个数据,都应该条件反射式地想到“冲突窗口”和“最短帧长”,这就是学懂和死记的区别。

3.2 编码技术与速率提升的底层逻辑

以太网速率越走越高,物理层编码也在不断进化。10M以太网使用曼彻斯特编码,每个比特中间有一次跳变,既传输数据又携带时钟。代价是信号频率是数据率的两倍,编码效率只有50%。到了100M时代,100BASE-TX采用4B/5B编码加MLT-3线路编码,效率提升到80%。千兆以太网中,1000BASE-T干脆在四对双绞线上同时传输,每对线速率是250Mbps,加起来凑成1Gbps,而且用五电平的PAM5编码,实现了四对线同时双向传输。

光纤以太网的编码走的是另一条路线。100BASE-FX用4B/5B加NRZI,千兆光口用8B/10B编码,万兆光口用64B/66B编码。编码效率从50%提升到80%再到约97%,说明物理层一直在想办法用更少的带宽浪费换取更高速率。考试如果考到编码名称,通常就是上面这几个,记住“10M曼彻斯特、100M 4B/5B、千兆光口8B/10B、万兆64B/66B、1000BASE-T用PAM5”就够了。

3.3 双绞线选型与RJ45线序

10BASE-T和100BASE-TX只使用双绞线中的两对线,一般是一对发送一对接收,所以百兆到桌面很多人习惯只打4根线就能通。但1000BASE-T需要四对线全部参与同时收发,少一对线就只能协商到百兆。这个现象在实际布线中非常常见:预埋网线只做了4芯,千兆交换机怎么协商都只有100M。遇到这种问题,重新打水晶头做8芯是标准解法。

线序上要记住T568A和T568B两种标准:T568B的线序是白橙、橙、白绿、蓝、白蓝、绿、白棕、棕;T568A只是把2和6这两对互换。直通线两端用同一种标准,交叉线一端A一端B。早年做实验经常要区分直通和交叉,现在绝大多数网卡和交换机端口都支持自动翻转(Auto MDI-X),插什么线都能自适应,但考试和原理题里仍然会考到这个概念。

4. 以太网帧结构与硬件细节

4.1 MAC帧逐字段拆解

以太网帧是数据链路层的封装结果,对整个TCP/IP通信至关重要。帧结构从前往后依次是:前导码7字节、帧起始定界符1字节、目的MAC地址6字节、源MAC地址6字节、类型/长度字段2字节、数据字段46到1500字节、帧校验序列FCS 4字节。前导码和定界符属于物理层同步用的,真正交付给MAC子层的帧从目的MAC开始。

前导码是56比特交替的1和0,接收方利用它来锁定时钟;帧起始定界符的值是10101011,最后两位的变化告诉接收方“下一字节就是目的地址了”。有网管员抓包时发现抓包软件里看不到前导码,因为网卡已经把它吃掉了,不体现在帧数据里。

类型/长度字段是个双关字段。在Ethernet II帧格式里,它表示上层协议类型,比如0x0800是IPv4,0x0806是ARP,0x86DD是IPv6;在IEEE 802.3原始格式里,它表示数据字段的长度。区分规则很简单:值大于等于1536(0x0600)时按类型解释,小于等于1500时按长度解释。现在局域网里几乎全是Ethernet II格式,这个字段绝大多数情况是类型。

FCS占4字节,采用CRC-32算法,覆盖范围从目的MAC地址到数据字段的末尾。接收方收到帧后重新计算CRC,与帧尾的校验值比对,不一致就丢帧。CRC只能检错、不能纠错,所以以太网误帧只能靠上层重传,这句话也会出判断题。

4.2 最短帧长64字节是怎么定出来的

前面说最短帧长64字节的初衷是保证在发送过程中能检测到冲突。10Mbps以太网中64字节=512比特,发送时间正好是51.2微秒,这也要求整个冲突域内最大的往返传播时延不超过51.2微秒。标准法定的最大冲突域范围,比如10BASE5的2500米使用4个中继器,就是在这个约束下设计出来的。

但64字节这个值还兼顾了另一个需求:如果网络完全没冲突(全双工),帧也不能太短,否则接收端会产生太多帧中断,处理不过来。所以即使在全双工链路,802.3仍然保持最短帧长64字节,数据字段不够46字节时要补填充位。许多抓包新手看到短帧里数据区尾部有一串0,以为出了问题,其实是填充字段。

最长帧1518字节同样有讲究。早期链路误码率不算低,帧太长的话,一个比特错误很容易造成整个大帧作废,重传成本高。1518字节是当年权衡信道效率和检错能力后定下的值。现在服务器和存储网络里经常用到巨型帧,通常是9000字节,但可以理解为“局域网内部关起门来自己改规则”,在运营商和广域网链路上并不通用。

4.3 MAC地址、网卡与交换机行为

MAC地址共48比特,通常写成12位十六进制。前24位是厂商代码OUI,由IEEE统一分配,后24位是厂商自己分配的序列号。所以正常情况下网卡MAC地址全球唯一。但MAC地址是可配置的,改网卡MAC在操作系统里就能操作,所以“唯一性”最多算制造商保证的出厂约定。

第一字节的最低比特位用来区分单播和组播:0表示单播,1表示组播。全1的MAC地址就是广播地址FF-FF-FF-FF-FF-FF,目标广播帧会被同网段内所有主机接收。交换机转发依据就是这些MAC地址:收到帧后把源MAC和入端口写入MAC地址表,查目的MAC匹配表项则从对应端口转发,查不到就向除入端口外的所有端口泛洪。MAC表项有老化时间,常见默认是300秒,老化机制是为了让设备移动后转发表能自动更新。

网卡实际上是一个相当智能的设备。MAC帧的封装、CRC计算、冲突检测、退避计时这些繁琐工作都由网卡硬件完成,CPU只负责把要发送的数据交给网卡、接收时把帧数据提上来。所以很多人做网络性能调优时会调网卡队列、中断绑定,本质都是在优化网卡与CPU之间的协作方式。

5. 高频考题解法与现场排障经验

5.1 三类计算题的固定套路

软考网规里关于以太网的计算题,翻来覆去就是三类:最短帧长、退避等待时间、最大跨距。三类题的核心公式都是一个:最短帧长(比特)= 2 × 单程传播时延 × 数据传输速率。

第一类是给距离算最短帧长。先算单程时延τ = 距离 ÷ 传播速度,再乘2得到往返时延,再乘速率得到最小比特数,最后和64字节比较取大者。这里最常见的坑是单位:距离用米,传播速度用米/秒,速率用bit/s,时延肯定落在微秒级,最后比特数别算成字节。有些题目给的是公里和兆,换算时记得1公里=1000米,1Mbps=10^6bps。

第二类是给最短帧长反推最大跨距。比如10Mbps以太网,最短帧长512比特,发送时间51.2微秒,那么往返时延最大值就是51.2微秒,单程最大是25.6微秒,跨距=25.6微秒×2×10^8米/秒=5120米。但这是理想计算结果,实际标准里的中继器延迟、收发器延迟都要扣除,所以才有了实际工程上的限制值。

第三类就是退避等待时间计算。给定冲突次数n,计算随机范围0到2^n-1,再乘以时隙长度。10Mbps时隙长度是51.2微秒,100Mbps是5.12微秒,1Gbps半双工的时候是4096比特时间。换算关系是:时隙(秒)= 时隙比特数 ÷ 速率。数字别记混,做题时先问自己是哪个速率。

5.2 易混淆知识点速查

备考过程中容易搞混的概念远不止一两个,我把高频雷区整理出来,考前对一遍能少踩很多坑:

易混淆点正确理解
CSMA/CD与CSMA/CACD用于有线以太网,靠冲突检测;CA用于无线局域网,靠冲突避免
集线器与交换机集线器物理层设备,所有端口一个冲突域;交换机二层设备,每端口独立冲突域
交换机与路由器交换机隔离冲突域但不隔离广播域;路由器隔离广播域
Ethernet II与802.3帧前者的类型/长度字段按类型解释,后者按长度解释
100BASE-TX与1000BASE-T前者2对线,后者4对线
三类线/五类线/超五类线三类线支持10M,五类线支持100M,超五类支持1000M
光口半双工与全双工距离半双工受CSMA/CD限制,距离短;全双工无冲突问题,距离远
广播帧泛洪交换机对未知单播泛洪,对广播帧也泛洪,两者原理不同

有一个判断题特别爱出:有人说“以太网交换机可以隔离广播域”,这句话是错的。交换机只能隔离冲突域,广播域要靠三层设备(路由器或三层交换机)来划分。理解了这一点,很多组网拓扑题的思路会清晰很多。

5.3 备考与工作中的实践体会

我个人备考时最大的感受是,CSMA/CD这部分光看书背流程不够,一定要动手推演几遍。你可以在纸上画一条总线,标上两个站点,把发送、冲突、退避依次走出来,每次冲突都按指数退避规则实际算一遍随机等待时间。推演过两三次之后,“为什么最小帧长是64字节”“为什么退避上限是1023个时隙”这种问题就再也不会忘记了。

工作中遇到和以太网相关的排障,这套知识同样用得上。比如百兆网络里一根网线8芯只通了4芯,速率协商不上来,这是连CSMA/CD都不需要启用的“物理层问题”;但如果某个设备强制半双工,对端是全双工自动协商,会出现大量碰撞和FCS错误,这时候你再回头看CSMA/CD和帧间隙,立刻就能理解为什么半双工设备效率会暴跌。

最后再分享一个我自己验证过的小方法:用抓包工具抓一个最普通的以太网帧,对照帧格式逐字节拆一遍。你不需要看太深,只需要找到目的MAC、源MAC、类型字段、数据部分和末尾的CRC校验值在哪里,就足够把教材上的帧结构彻底落到实处理解了。这种“眼见为实”的训练,比把帧格式表背十遍都管用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询