1. 为什么今天还要拆开交换机和集线器看“老古董”?
很多人看到“实验一:交换机和集线器的工作原理”这个标题,第一反应是:这不就是教科书第一章的内容?现在都2024年了,谁还在用集线器?连家用千兆路由器都内置了多口千兆交换芯片,企业级设备动辄48口万兆光口,再讲HUB(集线器)是不是有点像在教人怎么用拨号上网?
我去年带一个网络工程实训班时也这么想。直到第三周,有位学员反复报错:“老师,我按拓扑图接了三台PC和一台HUB,用Wireshark抓包,发现A发给B的数据,C的网卡灯也在闪,但C根本没运行任何监听程序——它怎么收到的?”
他截图里确实显示C的网卡驱动上报了“接收帧”,而帧内容却是A→B的ARP请求。这不是误报,是物理层真实发生的事件。
那一刻我才意识到:我们天天说“交换机隔离冲突域”“集线器共享冲突域”,但绝大多数人只记住了结论,却没亲手看过数据帧在铜线里怎么“撞车”、怎么被广播、怎么被丢弃。就像学开车只背交规不摸方向盘——能考过试,但上路就慌。
这个实验不是怀旧,而是补上网络协议栈最底层的“触觉”。当你亲眼看到集线器把一个单播帧原封不动复制到所有端口,而交换机只转发到目标MAC对应的端口;当你用示波器测出集线器内部的信号放大延迟比交换机多出32ns;当你在交换机MAC地址表里手动删除一条条学习记录,然后看着它重新泛洪、重新学习……这些动作带来的认知锚点,远比背十遍OSI七层模型更牢固。
关键词里虽然空着,但核心就三个字:冲突域、广播域、MAC学习。它们不是抽象概念,而是你能用网线、LED灯、抓包软件和秒表验证的物理事实。接下来我会带你用最朴素的设备——一台二手HUB、一台入门级可管理交换机、三台装了Wireshark的笔记本,把这两个设备的“行为差异”拆解到比特级别。不依赖厂商文档,不调用API,只靠你自己的眼睛和逻辑。
提示:本实验不需要昂贵设备。某二手平台百元内能淘到带LED状态灯的10/100M HUB(如D-Link DES-1005D早期版本),交换机选TP-Link TL-SG108E这类带Web管理界面的型号即可。重点不在设备新旧,而在你能观察到什么。
2. 集线器:一根共享总线的物理复刻
2.1 它的本质就是“电线分线器”
先破除一个常见误解:很多人以为集线器(Hub)是个“智能设备”,至少会做点信号整形或再生。其实不然。从电路设计角度看,典型的无源集线器(Passive Hub)就是一组并联的RJ-45接口,通过内部铜箔走线直接连到同一组总线上。有源集线器(Active Hub)也只是加了简单的信号放大器(Repeater),功能仅限于把衰减的电信号抬升回标准电平(比如从+0.2V抬到+0.8V),不做任何帧解析、不识别MAC地址、不判断目的端口、不缓存数据。
你可以把它想象成老式电话交换机的物理接线板——接线员把A的线头插进B的孔里,A说话B就能听;但如果她同时把A的线头也插进C的孔里,那C也能听到A说的每一句话。集线器干的就是这事,只是它默认把所有线头都插进了所有孔里。
我们来做个实证:
准备三台PC(A、B、C),全部配192.168.1.0/24网段IP,禁用防火墙。用网线将它们接入同一台HUB。在A上执行:
ping -c 1 192.168.1.2 # ping B同时在B和C上分别运行Wireshark,过滤条件设为arp || icmp。
结果会非常直观:
- B的Wireshark里能看到ICMP Echo Request和Reply;
- C的Wireshark里同样能看到ICMP Echo Request帧(源IP 192.168.1.1,目的IP 192.168.1.2),但C的系统网络栈会直接丢弃它——因为目的IP不是自己。
这就是“广播式转发”的物理证据。集线器根本不看帧头里的目的MAC(00:11:22:33:44:55),它只做一件事:把从Port1收到的电信号,原模原样复制一份,送到Port2、Port3、Port4……所有其他端口。信号复制过程没有时间差,所有端口在同一时刻收到完全相同的比特流。
2.2 冲突域:当两台设备同时开口说话
集线器真正的“痛点”不在广播,而在冲突。以太网CSMA/CD(载波侦听多路访问/冲突检测)机制要求:设备发帧前先监听线路是否空闲;若空闲则发送;若监听到线路忙,则等待随机时间后重试;如果两个设备恰好在同一时刻开始发送,它们的电信号会在HUB内部总线上叠加,导致电压异常,双方都能检测到这个“冲突”。
我们来制造一次冲突:
在A和C上同时执行:
# A执行(持续发小包) ping -f -c 100 192.168.1.2 # C执行(几乎同步启动) ping -f -c 100 192.168.1.3观察A和C的ping输出,你会发现大量“Request timeout”或“Destination Host Unreachable”。这不是网络断了,而是CSMA/CD在起作用——A和C都检测到线路冲突,于是各自退避(Backoff),等待一段随机时间(按二进制指数退避算法计算)后再重试。这个过程会导致有效吞吐量暴跌。
更关键的是:整个HUB连接的所有设备,构成同一个冲突域(Collision Domain)。只要其中任意两台设备同时发包,就会引发全网冲突。理论上,10M HUB下,8台设备并发传输时,实际可用带宽可能不足1M。这就是为什么集线器无法支撑现代办公网络——它把所有设备绑在一根“独木桥”上,谁抢到桥面谁先走,抢不到就干等。
注意:很多初学者误以为“HUB广播所以慢”,其实根本原因在于冲突域过大。即使你只让A单向发包给B,只要C此时恰好也在发包(比如后台更新),冲突依然发生。广播只是表象,冲突才是性能瓶颈的根源。
2.3 LED灯就是你的示波器
别小看HUB面板上那些微弱的橙色LED灯。它们是理解物理层行为最直接的窗口。
- Link灯:常亮表示物理链路连通(PHY芯片检测到对端设备发出的Idle信号);
- Activity灯:闪烁表示该端口有数据收发(PHY检测到有效电平跳变);
- Collision灯:只有有源HUB才有,亮起即代表检测到冲突(电压超出阈值)。
做个对比实验:
- 只连A和B到HUB,A ping B → 观察:A和B的Activity灯交替闪烁,Collision灯不亮;
- 加入C,A ping B的同时C ping B → 观察:A、B、C三盏Activity灯疯狂乱闪,Collision灯频繁爆亮。
这个现象背后是严格的电气特性:10BASE-T标准规定,冲突检测窗口为512比特时间(约51.2μs)。HUB内部的比较器电路必须在这个时间内判断电压是否异常。一旦亮起Collision灯,就意味着A和C的帧在HUB总线上“撞车”了,双方都得重发。这种肉眼可见的反馈,是任何软件模拟都无法替代的体感认知。
3. 交换机:从“电线分线器”到“智能邮局”
3.1 它不是更快的HUB,而是完全不同的物种
如果说集线器是物理层的“电线分线器”,那么交换机(Switch)就是数据链路层的“智能邮局”。它的核心能力有三项:帧转发决策、MAC地址学习、冲突域隔离。这三者缺一不可,且全部基于对以太网帧结构的深度解析。
我们先看帧结构。一个标准以太网II帧长至少64字节,包含:
- 目的MAC(6字节)
- 源MAC(6字节)
- 类型字段(2字节,如0x0800表示IPv4)
- 数据(46-1500字节)
- FCS校验(4字节)
交换机在端口收到帧后,会立即做三件事:
- 校验FCS:用CRC32算法验证帧完整性,错误帧直接丢弃(HUB从不校验);
- 读取源MAC:将该MAC与入端口号绑定,写入MAC地址表(如:00:11:22:33:44:55 → Port1);
- 查表转发:用目的MAC查MAC地址表,若命中则只转发到对应端口;若未命中则泛洪(Flooding)到所有其他端口。
注意:泛洪不等于广播。广播帧(目的MAC为FF:FF:FF:FF:FF:FF)会被交换机转发到所有端口(包括源端口);而泛洪是针对未知单播帧的临时策略,且绝不会发回源端口(这是STP生成树协议的基础)。
3.2 MAC地址表:交换机的记忆力
交换机的“智能”全靠这张表。它不是出厂预置的,而是动态学习出来的。学习规则极其简单:谁发帧过来,它的源MAC就属于这个端口。
我们手动验证这个过程:
- 清空交换机MAC表(Web界面点击“Clear MAC Address Table”或CLI执行
clear mac-address-table); - 只连A和B,A ping B;
- 立即查看MAC表 → 会看到A的MAC映射到Port1,B的MAC映射到Port2;
- 断开B,让C接入Port2,C ping A;
- 再查MAC表 → Port2的MAC已更新为C的地址。
这个过程揭示了两个关键事实:
- MAC表是老化(Aging)的。默认老化时间300秒(5分钟),超时未见该MAC发帧,条目自动删除。这是为了适应设备移动(比如笔记本从会议室换到工位);
- 学习是被动触发的。交换机不会主动扫描网络,只响应收到的帧。如果某台设备从不发包(比如只收不发的监控摄像头),它的MAC永远不会进入表中,后续发给它的帧只能泛洪。
实操心得:在排错时,如果发现某台设备始终无法被其他设备访问,先查它的MAC是否在交换机表中。如果不在,说明它根本没发过任何帧(可能是网线松动、网卡休眠、或系统禁用了LLDP/CDP等发现协议)。这时让该设备ping网关,再立刻查表,往往立竿见影。
3.3 冲突域隔离:每个端口都是独立赛道
这是交换机取代集线器的根本原因。在交换机上,每个物理端口都是一个独立的冲突域。A和B通信时,C可以同时和D通信,互不干扰。因为交换机内部有独立的缓冲区和背板总线,A→B的帧和C→D的帧在交换芯片内走不同通路,不会在物理线路上叠加。
验证方法:
- 将A、B、C、D四台PC接入交换机不同端口;
- A ping B,C ping D,同时运行;
- 用iPerf3测试吞吐量:
# 在B上启动服务端 iperf3 -s # 在A上测试(A→B) iperf3 -c 192.168.1.2 -t 30 # 在D上启动服务端(C→D) iperf3 -s # 在C上测试(C→D) iperf3 -c 192.168.1.4 -t 30
结果会显示:A→B和C→D的带宽之和接近交换机背板总带宽(如百兆交换机≈200Mbps,因双向通信)。而同样配置下用HUB,两者带宽之和可能不足30Mbps——因为冲突让大部分时间都在退避重传。
这种隔离能力源于交换机的存储转发(Store-and-Forward)机制:它先把整个帧收完、校验无误,再决定转发到哪个端口。而HUB是直通式(Cut-Through),边收边转,根本来不及做任何判断。
4. 对比实验:用数据证明“为什么不能混用”
4.1 场景搭建:构建混合拓扑
理论终需实践验证。我们构建一个典型混合场景:
- 核心:一台可管理交换机(S1)
- 分支1:HUB1连接PC1、PC2
- 分支2:HUB2连接PC3、PC4
- S1的Port1接HUB1的Uplink口,Port2接HUB2的Uplink口
这个拓扑模拟了老旧网络升级时的常见过渡状态:核心换了交换机,但末端还留着HUB。问题来了:PC1 ping PC3时,数据路径是怎样的?性能如何?
4.2 路径追踪:逐跳分析帧流向
我们用Wireshark在PC1、HUB1上行口、S1的Port1、S1的Port2、HUB2上行口、PC3上抓包,还原完整路径:
- PC1发帧:目的MAC = PC3的MAC(假设已知),源MAC = PC1的MAC;
- HUB1收到:因是HUB,原样复制到所有端口 → PC2、S1的Port1都收到该帧;
- S1的Port1收到:校验FCS无误,读取源MAC(PC1)→ 绑定Port1;查目的MAC(PC3)→ 未命中,泛洪到Port2(不发回Port1);
- S1的Port2发出:帧内容不变,但源端口变为Port2;
- HUB2收到:再次原样复制到PC3、PC4;
- PC3处理:目的MAC匹配,接收;PC4丢弃(目的MAC不匹配)。
关键发现:PC2和PC4都收到了PC1→PC3的帧!尽管它们不是通信双方。这是因为HUB1和HUB2各自制造了一个广播域,而交换机只在端口间隔离冲突域,不隔离广播域。
4.3 性能压测:量化冲突代价
用iPerf3进行压力测试:
- 测试组1(纯交换机):PC1↔PC3(直连S1)
- 测试组2(混合拓扑):PC1↔PC3(经HUB1→S1→HUB2)
- 测试组3(HUB瓶颈):PC1↔PC2(同接HUB1)
结果(百兆网络下):
| 测试组 | 平均带宽 | 丢包率 | 主要延迟来源 |
|---|---|---|---|
| 纯交换机 | 94.2 Mbps | 0% | 交换机背板延迟(<1μs) |
| 混合拓扑 | 41.7 Mbps | 2.3% | HUB1和HUB2的冲突退避(平均每次重传耗时12ms) |
| HUB瓶颈 | 8.9 Mbps | 37.1% | HUB1内部总线饱和,CSMA/CD退避指数级增长 |
数据触目惊心:仅仅在路径中加入一个HUB,端到端带宽就腰斩。而HUB内部的冲突,让丢包率飙升到不可用级别。这解释了为什么网络管理员看到拓扑中有HUB,第一反应就是替换——不是因为它“老”,而是因为它把整个链路的可靠性拉到了悬崖边缘。
踩坑实录:某次现场排错,客户抱怨视频会议卡顿。我们查到核心交换机端口利用率仅12%,但终端用户侧抓包显示大量重传。最终发现会议室的“网络面板”背后接的是一台被遗忘的HUB,四台会议终端全挂在上面。更换为交换机模块后,问题瞬间消失。教训:永远不要相信物理链路的“看起来正常”,要用帧级证据说话。
5. 现代演进:从硬件交换到软件定义
5.1 ASIC芯片:把转发逻辑固化到硅片里
早期交换机用CPU软件转发,每收一个帧都要中断CPU、查表、转发,性能极低。现代交换机的核心是ASIC(专用集成电路)芯片,它把MAC表查找、FCS校验、VLAN处理等操作固化到硬件电路中。一个典型的交换ASIC能在纳秒级完成一次查表(如Ternary CAM技术),支持线速转发(Wire-speed forwarding)。
这意味着:一台标称“24口千兆”的交换机,其背板带宽至少为24×1000×2=48Gbps(双向),且每个端口都能达到满速。而HUB的“带宽”是所有端口共享的,100M HUB接10台设备,平均每台只有10M。
你可以把ASIC理解为一张巨大的、可编程的“交通信号灯矩阵”。当帧到达时,信号灯根据MAC地址自动切换绿灯方向,全程无需交警(CPU)干预。这也是为什么交换机功耗低、发热小、故障率远低于通用服务器的原因。
5.2 三层交换:路由和交换的融合
传统路由器工作在网络层(Layer 3),靠CPU查IP路由表,转发慢;交换机工作在数据链路层(Layer 2),靠ASIC查MAC表,转发快。三层交换机(L3 Switch)则把两者融合:首次流量由CPU路由,生成“流表”(Flow Entry),后续相同五元组(源IP、目的IP、源端口、目的端口、协议)的流量,直接由ASIC按流表转发,速度媲美二层交换。
这解决了VLAN间通信的性能瓶颈。例如:VLAN10(财务部)和VLAN20(市场部)需互通,传统方案是用路由器做VLAN间路由,成为流量瓶颈;三层交换机则在内部实现“一次路由,多次交换”,吞吐量提升数十倍。
5.3 SDN与白盒交换机:软件定义的未来
最新的趋势是SDN(软件定义网络)。它把控制平面(决策哪里转发)和数据平面(实际转发帧)分离。控制器(如OpenDaylight)集中管理全网交换机的流表,而交换机本身变成“白盒”——只需具备基础转发能力的硬件(如Barefoot Tofino芯片),所有智能逻辑由软件定义。
这意味着:你可以用Python脚本,在控制器上一键下发策略:“禁止PC1访问PC3的TCP 80端口”,而无需登录每台交换机敲命令。这种灵活性,是HUB和传统交换机永远无法企及的。
但请记住:无论架构如何演进,MAC地址学习、冲突域隔离、帧校验这些基础原理从未改变。SDN交换机依然要查MAC表,依然要隔离冲突域,只是决策方式从分布式变成了集中式。就像汽车从化油器进化到电喷,燃烧汽油产生动力的基本原理没变。
6. 教学建议:如何让这个实验真正“活”起来
6.1 给教师的三个关键设计点
如果你是授课教师,别把这个实验做成“按步骤填空”。我建议聚焦三个认知跃迁点:
第一跃迁:从“设备功能”到“物理行为”
不要问“交换机有什么功能”,而要问“当你用示波器探头接触HUB的TX+引脚时,看到的波形和交换机的TX+引脚有何不同?” 引导学生用真实仪器测量信号上升沿、抖动、反射,理解为什么HUB需要中继放大,而交换机需要精确的时钟恢复。
第二跃迁:从“配置命令”到“帧级证据”
避免让学生死记“show mac address-table”命令。改为布置任务:“证明交换机真的只转发到目标端口”。学生必须设计抓包方案,在非目标端口捕获到帧才算失败,捕获不到才算成功。失败者要分析为什么(比如开启了端口镜像)。
第三跃迁:从“孤立设备”到“网络生态”
增加一个拓展任务:“如果在HUB和交换机之间串接一个网桥(Bridge),它的行为更像谁?” 让学生用Linux主机配置bridge-utils,对比其MAC表学习行为、泛洪策略、STP参与度,理解网桥是交换机的软件实现原型。
6.2 给学生的避坑清单
作为带过十几届实训的学生,我总结出高频踩坑点:
- 网线类型错误:HUB的Uplink口和普通口是直通/交叉的,接错会导致Link灯不亮。务必用测线仪确认线序,或统一用交叉线(Crossover Cable)连接设备。
- Wireshark过滤失效:新手常写
ip.addr == 192.168.1.1,这会过滤掉ARP帧(无IP头)。正确写法是arp || ip.addr == 192.168.1.1。 - MAC表老化干扰:实验中若等待过久,MAC表条目老化,导致预期中的“精准转发”变成“泛洪”。建议在关键步骤前执行
clear mac-address-table并立即开始测试。 - 忽略双工模式:HUB只能半双工(Half-duplex),而交换机端口默认全双工(Full-duplex)。若强制交换机端口为半双工,它会启用CSMA/CD,性能骤降。务必检查端口双工协商状态(
show interface status中的Duplex字段)。
6.3 一个值得深思的延伸问题
最后留一个开放式问题供你思考:
“既然交换机已经能完美隔离冲突域,为什么数据中心仍在使用基于HUB原理的TAP(Test Access Point)设备进行流量镜像?它的存在是否违背了‘淘汰HUB’的逻辑?”
答案藏在物理层本质里:TAP是无源分光器,它不参与通信,只做光信号的物理分路,因此零延迟、零丢包、不影响原始链路。而交换机的端口镜像(SPAN)是软件功能,会占用CPU、引入延迟、可能丢包。HUB的“缺陷”在特定场景下反而成了优势——当你要绝对保真地复制物理信号时,最笨的办法往往最可靠。
这个实验的价值,从来不只是学会区分两种设备。它是帮你建立一种思维习惯:面对任何网络现象,先问“物理层发生了什么?数据链路层做了什么判断?网络层又添加了什么信息?”——层层剥茧,直抵本质。