备考网络规划设计师的朋友,局域网这块绕不开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。考试偶尔会问“以太网采用的传输技术是什么”,答案就是基带传输。
物理层标准太长,我整理了一张常用对照表,备考时反复看几遍能省很多事:
| 标准 | 速率 | 介质与接口 | 最大段长 | 关键说明 |
|---|---|---|---|---|
| 10BASE5 | 10Mbps | 粗同轴电缆,AUI接口 | 500米 | 最早的以太网,总线型 |
| 10BASE2 | 10Mbps | 细同轴电缆,BNC接口 | 185米(约200米) | 比10BASE5更细更灵活 |
| 10BASE-T | 10Mbps | 三类以上UTP双绞线,RJ45 | 100米 | 星型拓扑,使用2对线 |
| 100BASE-TX | 100Mbps | 五类UTP/STP双绞线 | 100米 | 快速以太网,使用2对线 |
| 100BASE-FX | 100Mbps | 多模光纤 | 全双工2km,半双工412m | 半双工距离受CSMA/CD限制 |
| 1000BASE-SX | 1Gbps | 多模光纤,850nm短波长 | 220米到550米 | 千兆以太网,短距离光口 |
| 1000BASE-LX | 1Gbps | 单模/多模光纤,1300nm长波长 | 单模5km,多模550m | 长距离千兆光口 |
| 1000BASE-T | 1Gbps | 超五类以上UTP双绞线 | 100米 | 4对线同时双向收发 |
| 10GBASE-SR | 10Gbps | 多模光纤,短距离 | 300米左右 | 万兆短距光口 |
| 10GBASE-LR | 10Gbps | 单模光纤,长距离 | 10公里 | 万兆长距光口 |
| 10GBASE-ER | 10Gbps | 单模光纤,超长距离 | 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/CA | CD用于有线以太网,靠冲突检测;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校验值在哪里,就足够把教材上的帧结构彻底落到实处理解了。这种“眼见为实”的训练,比把帧格式表背十遍都管用。