还记得刚入行时接到的第一个排障任务,客户说“整个办公室的网络都不通”,我跑到机房一看,机柜里一台老式集线器上面所有的指示灯都在疯狂闪烁,旁边的交换机倒显得很安静。老师傅过来扫了一眼说:“先分清楚哪台是集线器、哪台是交换机,再谈排障。”这句很简单的话,直接点到了要害。后来我自己带新人时发现,很多人能背出集线器和交换机的定义区别,但真到了配置、抓包、排障现场,会把冲突域、广播域、MAC地址自学习这些东西搅成一团。
这篇文章就把这两件事彻底讲透:集线器和交换机到底差别在哪,以及交换机的自学习算法是怎么一步步“自学成才”的。不管你是刚学计算机网络的学生,还是准备考网络工程师认证、准备入职做运维的新人,花二十分钟看完,再照着文中的实操思路在模拟器里跑一遍,基本就能把这个基础桩打牢。
1. 为什么先要分清集线器和交换机:从一次排障说起
1.1 两台设备长得像,脑子却差着一个层次
很多初学者会有个误区,觉得集线器和交换机外观差不多,都是插网线的盒子上带一溜指示灯,能连通就行。这个想法在纯家用场景里可能勉强说得过去,但一进入稍微复杂一点的办公环境、机房环境,这两台设备的行为逻辑完全不在一个档次。
集线器工作在物理层,它本身没有任何“思考能力”,收到一个比特信号就从除了接收端口以外的所有端口原样转发出去。它的本质就是一个多端口的中继器,做的是信号的整形和放大。而交换机工作在数据链路层,它拿到的是一个完整的数据帧,会读出帧里的MAC地址,查自己的MAC地址表,再决定从哪个端口发出去,或者干脆丢掉。
这个差别用一句话说就是:集线器是广播式的“大喇叭”,交换机是点对点式的“快递分拣员”。大喇叭喊一句,整栋楼都能听见;快递分拣员看一眼面单,就知道派送到哪条线路。
1.2 先搞清楚设备原理,再来谈组网和配置
我在带项目的时候发现,新人最容易犯的错不是不会配VLAN,而是把最底层的数据转发逻辑搞混。比如有人问“为什么交换机刚插上去会泛洪,但集线器每时每刻都在泛洪”,还有人问“为什么在一个交换机网络里抓包能抓到别人的流量,明明交换机不是只转发给目标端口吗”。
这些问题本质上都和自学习算法有关。交换机并不是天生就知道每个MAC地址在哪个端口,它是靠“学习”来的。这个过程有规律、有步骤,也有坑。理解了自学习算法,你就会明白为什么交换机一开始会向所有端口转发未知单播帧,为什么MAC地址表会老化,为什么会出现端口漂移,甚至能理解后续VLAN、STP这些技术到底在解决什么问题。
所以这篇文章的结构我很明确:先用对比的方式把集线器和交换机的区别讲透,再用拆解的方式把交换机自学习算法讲透,最后用一次模拟器实操把前面两个部分串起来。理论和动手各占一半,这样记忆才牢固。
2. 集线器与交换机的核心差异:不只是“有没有脑子”这么简单
2.1 工作层级不同,通信方式完全不同
集线器是物理层设备,它面对的对象是“比特”,也就是一串0和1的电信号。信号从任意一个端口进门,它就立刻复制成多份,从其余所有端口冲出去。你说它做了什么决策吗?没有,它根本看不懂数据里的内容,也不关心里面装的是谁的包。
交换机是数据链路层设备,它面对的对象是“帧”,也就是带上了MAC头尾的数据包。交换机能拆开帧的头部,读取源MAC地址和目的MAC地址,然后做判断。判断的依据就是自己内存里的MAC地址表,这个表也叫CAM表,是通过自学习算法动态建立和维护的。
这个层级差异带来的直接结果就是:集线器根本不存在“目的端口”这个概念,它只有一个动作叫“所有端口转发”。而交换机有三种动作:泛洪、转发、丢弃。这三种动作后面详细讲,但你现在要记住一点——交换机在绝大多数情况下是精准转发的,泛洪只是它“不懂的时候”才会做的行为。
2.2 冲突域:一根网线里的“争抢”
冲突域是个特别重要的概念,简单理解就是:在这个区域里,同一时刻只能有一个设备发送数据,如果两个设备同时发,信号就会在网络上互相叠加、互相破坏,形成冲突。
集线器的所有端口都在同一个冲突域里。什么意思呢?一台八口的集线器接了五台电脑,这五台电脑发数据的时候都得排队。A在发数据的时候,B如果也想发,B必须等到A发完。如果B不听劝硬要发,两边信号撞在一起,两个包都作废,大家还得等随机的时间重发。这就是以太网里的CSMA/CD机制,效率非常低。
交换机则不一样,它的每一个端口都是一个独立的冲突域。端口之间通过内部的交换矩阵交换数据,A和B之间通信的同时,C和D也可以通信,互相不干扰。打游戏的时候,四台电脑同时和服务器通信,用交换机就比用集线器顺畅得多,原因就在这里。
2.3 带宽使用方式:半双工共享 vs 全双工独享
带宽这个话题也是很多人学完之后就忘的点。集线器是半双工设备,同一时刻只能收或者只能发,而且是整个设备的带宽被所有端口共享。假设一台集线器的带宽是10Mbps,接了五台设备,理论上平摊下来每个设备只有2Mbps,实际算上冲突和重传,可能连2Mbps都不到。
交换机的每个端口都有独立的带宽,而且支持全双工,也就是可以同时收和发。如果一台交换机每个端口是100Mbps,那么每个设备独享100Mbps的收发能力,不会因为旁边多插几台电脑就分走你的速率。这也是为什么同样是组网,办公环境里几乎见不到集线器的身影,它被淘汰是非常合理的事。
要注意的是,全双工还得网卡和交换机都支持,并且链路协商成功才行。早年的半双工网卡插到交换机上,端口会自动协商到半双工模式,速率照样上不去。这个细节在排查“网速慢”的时候值得关注,后面会再提到。
2.4 安全性和隐私:集线器可以被轻松“旁听”
如果你把两台集线器串起来用,或者用集线器做主干,那整个网络里的数据对于任何一台接入的设备来说都是透明的。因为集线器把每一帧都复制给了所有端口,你在自己的电脑上打开抓包工具,就能看到整个冲突域里其他设备收发的数据。
交换机因为做了精准转发,正常情况下每个端口只会收到发给自己的数据,别人通信的内容到不了你的网线上。当然,交换机也能被某些攻击手段欺骗,比如ARP欺骗、MAC泛洪攻击等,但那是主动攻击的范畴,和集线器这种“送你脸上”式的广播还是不一样。
从这个角度看,交换机的出现不仅提升了网络性能,也顺带把隐私和安全的门槛抬高了不少。当时的局域网里,只要用集线器做共享式网络,任何人的QQ聊天、网页请求都可能被隔壁工位的人抓包看到,这在今天是不敢想象的。
2.5 一张表把核心差异说清楚
| 对比维度 | 集线器 | 交换机 |
|---|---|---|
| 工作层级 | 物理层 | 数据链路层 |
| 转发对象 | 比特信号 | 数据帧 |
| 转发逻辑 | 所有端口复制转发 | 按MAC地址表精准转发 |
| 冲突域 | 所有端口共享一个冲突域 | 每个端口独立冲突域 |
| 广播域 | 所有端口属于同一广播域 | 默认所有端口同一广播域(可用VLAN划分) |
| 工作模式 | 半双工 | 全双工 |
| 带宽方式 | 共享带宽 | 每个端口独享带宽 |
| 安全性 | 数据对所有端口可见 | 通常只送达目标端口 |
| 当前应用 | 基本淘汰,仅见于老旧教学设备 | 局域网组网主流设备 |
这张表我建议你直接存下来,笔试、面试、排障之前扫一眼都很有用。尤其是“冲突域”和“广播域”这两行,几乎年年考试年年有人错。
3. 交换机自学习算法拆解:MAC地址表从哪来、怎么用
3.1 MAC地址表:交换机的“认路手册”
交换机的自学习算法,核心产物就是MAC地址表。这张表长什么样?其实就是三列:MAC地址、对应的端口、还有这条记录的老化时间起始点。交换机每从某个端口收到一帧数据,它就会把帧里的源MAC地址和进来时的端口记到表里。
打个比方,MAC地址表就像小区门口保安手里的一本住户登记册。保安一开始谁都不认识,但只要看到住户进大门一次,就在册子上记一笔:张先生住3栋,从东门进;李女士住5栋,从西门进。下次再看到张先生要进来的信,保安就知道往东门方向送。交换机干的事情和保安完全一样,只不过它记的是MAC地址和端口的关系。
这本登记册放在交换机的内存里,一般用的是CAM表结构,学名内容可寻址存储器。它和普通内存的区别在于,普通内存是按地址找数据,而CAM是按内容找数据。查一个MAC地址在哪个端口,一次就能命中,速度非常快,适合硬件转发。
3.2 学习、泛洪、转发:交换机的三种基本动作
自学习算法的完整流程,可以拆成几个动作。第一步是“学习”。交换机收到一个数据帧,先看源MAC,把这个MAC地址和接收端口记录到MAC地址表里。这个动作是持续不断的,每个正常通信的设备都会被交换机记住。
第二步是“查表”。交换机看帧里的目的MAC地址,去MAC地址表里找对应的端口。
第三步就是分情况处理:
- 如果目的MAC地址表里有记录,并且端口不是接收端口,交换机就把帧从这个端口转发出去。这叫转发。
- 如果目的MAC地址表里有记录,但记录的端口就是接收端口,交换机就认为目标和源在同一个端口下,帧不需要转发,直接丢弃。这叫丢弃。
- 如果目的MAC地址表里没有记录,交换机不知道目标在哪个端口,只能把帧从除了接收端口以外的所有端口复制转发出去。这叫泛洪。
泛洪其实就是一种“大海捞针”式的转发方式。交换机不知道目标在哪,但局域网里的每个设备都会收到这个帧,目标设备一旦收到,它会回一个帧,交换机就通过这个回帧学习到了它的MAC地址和端口位置。下一次再向这个目标发数据,交换机就不需要泛洪了。
3.3 老化机制:交换机也是会“忘事”的
MAC地址表如果只增不减,时间长了就会存下成千上万条记录,而且很多记录对应的设备可能已经关机、搬走了。所以交换机有一个老化机制,老化的时间一般默认是300秒,也就是5分钟。
每条MAC地址表项都有一个计时器,每次收到来自这个源MAC地址的帧,计时器就重置一次。如果5分钟之内这个设备再也没有发过帧,交换机就把这条表项删掉。这个设计其实很聪明,网络拓扑是会变化的:有人把电脑从3号口换到5号口,如果表项不老化,交换机就会一直按旧记录向3号口转发,那数据就永远到不了。
老化时间是可以调的。在一些需要快速感知设备移动的场景里,管理员会把老化时间调短一些,比如60秒。但调太短也有问题,频繁的泛洪会增加网络负担。这个分寸后面实操部分会说,这里先留个印象。
这里有个之前提过的现象,很多新手会困惑:明明交换机做了精准转发,为什么我第一次ping一个设备的时候,抓包还是能看到ARP广播?因为第一次通信时,发送端不知道目标MAC地址,所以它发的是广播帧。对于一个广播帧,交换机本身也不认识目的地址里那串全F的广播MAC,所以它必然会对所有端口泛洪。这是正常现象,不是交换机有问题。
3.4 自学习不是万能的:它有哪些限制
自学习算法虽然巧妙,但它有个致命弱点:它只根据源MAC地址学习,不校验来源的真伪。如果有人恶意伪造其他设备的MAC地址发数据,交换机就会被骗,把表项改写成错误的位置,这叫MAC地址欺骗。如果伪造的源MAC数量巨大,把交换机的MAC地址表撑满,交换机就可能进入一种“fail open”状态,对所有帧都泛洪,这等于把交换机退化成了集线器,供攻击者旁听全网数据。
这就是为什么较新的交换机都支持端口安全功能:限制一个端口最多学习几个MAC地址,超过就告警或关停端口。市面上的企业级交换机基本都有这个功能,但默认不一定全开,配置的时候注意一下。
4. 实操复现:在模拟器里看交换机从“小白”到“老司机”
4.1 搭一个最简单的局域网环境
说那么多理论,不如动手跑一遍。我们不需要真实设备,用任意一款主流网络模拟器就行,比如教学常用的Packet Tracer或其他模拟软件,能模拟交换机和PC即可。
组网不用复杂,三台PC就够了:PC1和PC2接在交换机SW1上,PC3接在交换机SW2上,SW1和SW2之间用网线连起来。IP地址随便规划,比如PC1是192.168.1.1,PC2是192.168.1.2,PC3是192.168.1.3,掩码都是255.255.255.0。VLAN现在不配,所有端口都在默认VLAN里,保证广播域是通的。
注意:在模拟器里操作时,交换机的端口默认可能都是关闭状态,需要先执行端口开启操作。真实设备也是一样的道理,很多新买回来的交换机不通,先去查端口shutdown没shutdown。
4.2 第一次通信:观察MAC地址表从无到有
环境搭好后,先在交换机上查看MAC地址表。不同厂商的交换机命令有差异,但命令形态大致是这样的:在特权模式下执行查看MAC地址表的指令,比如show mac address-table或display mac-address。刚开始看,表里应该是空的,或者只有几条交换机自己产生的记录。
现在从PC1去ping PC2。执行ping之后,立刻回交换机上再看MAC地址表。你会看到PC1和PC2的MAC地址都出现在表里了,而且对应的端口分别是它们各自接入的端口。PC3的MAC地址还是不在,因为PC3还没发过任何帧。
这就能直观地看到:ping通了之后,交换机才学到两个设备的地址。如果ping之前抓包,你会看到交换机对未知目的帧做了泛洪,因为第一次它确实不知道PC2在哪。
4.3 用抓包验证泛洪和转发的完整过程
光看表还不够直观,可以再打开抓包工具抓一个完整的过程。先在PC3上抓包,再从PC1去ping PC2(PC2不在PC3这个端口下)。你会发现PC3虽然完全没参与通信,但它的抓包里能看到一个ARP请求,这个请求是从PC1发出来的,目的地址是广播地址,交换机把它泛洪到了包括PC3在内的所有端口。
但是再往后看,PC3的抓包里不会出现PC1和PC2之间后续的ICMP数据包。因为交换机已经通过ARP应答学习到了PC2的MAC地址,后面的单播帧就精准转发到PC2所在端口了,不会再往PC3这个端口发。
这个实验非常经典。它用最直白的方式证明了交换机自学习算法的行为:未知单播泛洪、学习、精准转发。你亲手跑一遍之后,以后再有人问“交换机是不是全部都泛洪”,你就能判断对方学没学明白了。
4.4 老化实验:主动缩短老化时间看表项消失
MAC地址表老化是另一个值得动手验证的点。大多数模拟器里的交换机支持修改老化时间,命令大致是设置MAC地址表项的老化时间为几十秒。你可以把老化时间从默认的300秒改成60秒,然后再次查看MAC地址表,等一分钟左右再查看,会发现原本的表项消失了。
这个现象的解释就是:PC没有持续发包,老化计时器走到头了,交换机把这个MAC地址忘掉了。这时候如果再从另一台PC发一个数据帧给这个目标,交换机又会泛洪一次,然后重新学习。
实操心得:在真实网络里,如果某台服务器经常无人访问,它的MAC表项被老化删除很正常,下次访问时第一次会泛洪一次,这是正常现象。真正要警惕的反而是MAC表项老化时间设得太短,导致大量泛洪消耗带宽,或者设得太长,导致设备更换位置后流量仍被错误转发一段时间。
5. 常见问题与排查技巧实录:交换机自学习算法的那些坑
5.1 MAC地址表抖动:端口漂移的真相
有些人可能会在交换机日志里看到类似“MAC address moving from port A to port B”的告警,这就是端口漂移。意思是同一个MAC地址一会儿从1号端口冒出来,一会儿从2号端口冒出来,交换机被迫反复更新表项。
端口漂移的常见原因有三个:一是网线插错地方,比如有人把一根跳线同时接到了交换机的两个端口,形成物理环路;二是有人在两台交换机之间私接了一台家用小交换机,导致MAC地址从多个路径都能学习到;三是存在伪造MAC的攻击行为。排查思路是先定位漂移的MAC地址对应哪台设备,再顺着网线检查物理链路,或者临时把可疑端口shutdown看告警是否消失。
5.2 广播风暴:环路带来的“雪崩”
之前说过,交换机对广播帧、未知单播帧都会泛洪。如果网络中存在一条环路,比如交换机的两个端口被一根网线连起来了,那广播帧就会在环路里不断进行泛洪、复制,形成指数增长的广播风暴。后果就是交换机CPU占用率飙升,所有端口被大量广播帧占满,正常数据发不出去,整个网络接近瘫痪。
这是交换机网络里最经典的故障之一。解决办法从根上说就是启用生成树协议STP,现代交换机默认都开启。但排查的时候还是得先找到环路在哪。最简单的做法是拔掉可疑网线,看网络是否恢复,然后再启用STP保护。
5.3 老化时间设置不当造成的转发异常
老化时间这件事,在真实运维中是有讲究的。假如某核心交换机下挂了很多终端设备,老化时间如果调得特别短,比如30秒,那么只要某个设备安静几十秒不发包,它的MAC表项就被清了。下一次给这个设备发数据时,交换机就得泛洪,大量泛洪叠加起来网络效率就会下降。
反过来,老化时间太长也不行。比如一个员工带着笔记本电脑从A交换机换到B交换机,旧表项没老化完,交换机在一段时间内还会把流量转发向旧端口。发现问题后可以用清空MAC地址表的命令来快速恢复,命令大致是清除MAC地址表的指令,不同厂商略有差异。这也顺便提醒你:在设备迁移比较频繁的办公网络里,适当缩短老化时间其实是合理的选择。
5.4 端口安全与常见攻击的防御思路
交换机自学习算法天然信任帧里的源MAC地址,这给了攻击者可乘之机。MAC泛洪攻击会让交换机表项占满,丧失精准转发能力;MAC欺骗攻击会让交换机把目标设备的表项改写到自己端口下,从而截获对方流量。
防御手段上,首先是开启端口安全,限制单个端口最多学习的MAC地址数量。这样做之后,如果超过限制,交换机可以选择丢弃数据帧、产生告警,或者直接物理关闭端口。其次是划分VLAN减少广播域范围,让泛洪的影响面变小。再严格一点,可以配置动态ARP检测等机制,防止ARP欺骗,不过这在基础篇里不展开,你先知道有这样的防范思路就好。
6. 写在最后的个人体会
我见过不少人把集线器和交换机的区别、自学习算法的流程背得滚瓜烂熟,但到了实验室里给交换机插上第一根网线时还是会犯嘀咕。这个知识点的核心不是背,而是建立一种“数据帧视角”的直觉。你拿到任何一个帧,能下意识地判断它是广播、未知单播还是已知单播,能想清楚交换机会对它做什么,就成了。
最后再分享一个小技巧:学习网络设备的行为规律,最有效的办法永远是动手抓一次包。不要只停留在模拟器里敲命令,最好再用抓包工具看一次真实的数据流。当你在抓包里看到那个ARP请求泛洪到所有端口,紧接着看到单播帧被精准转发,那一刻对交换机的转发逻辑理解就真正焊死在脑子里了。
交换机自学习算法是整个交换网络的基础,往后的VLAN、STP、链路聚合这些技术,要么是围绕它衍生出来的,要么是为了弥补它的不足而存在的。把这个根基打牢,后面学什么都会顺利很多。