简介:这份文档面向计算机网络课程的初学者与实验课学生,围绕交换机与集线器的工作原理展开,帮助读者借助 Cisco Packet Tracer 完成从设备配置到现象观察的完整实验流程。资源包共 1 个 doc 文件,约 1.34MB,内容为结构完整的实验报告,涵盖实验目的、实验内容、思考题解答与实验感想等模块。文档中详细记录了集线器广播转发与交换机基于 MAC 地址转发表的自学习、定向转发机制,并通过三种典型场景对比两者在冲突域、广播域与网络性能上的差异,同时延伸至 ARP 协议、IP 地址与 MAC 地址关系等实验内容。目前已有 3406 人学习下载,适合需要撰写实验报告、理解二层交换原理或准备课程考核的读者参考借鉴。
1. 交换机与集线器:为什么一个广播一个定向转发
很多人第一次接触网络设备时,都会觉得集线器和交换机差不多——都是把几台电脑连起来,都能让数据从一台机器跑到另一台机器。但真正在模拟器里抓一次包就会发现,同样一份单播数据帧,集线器把它复制到所有端口,交换机却只往一个端口送。这个差异不是软件配置出来的,而是由它们工作的协议层次和内部数据结构决定的。
搞懂这件事的价值在于:它直接解释了以太网里冲突域和广播域是怎么被划分的,也解释了为什么用集线器扩网络会越扩越慢,而交换机扩网络虽然快,却仍然要面对广播泛洪的问题。更关键的是,交换机的自学习算法是整个二层转发体系的起点,理解了它,后面看 VLAN、生成树、链路聚合都会顺很多。这篇内容就围绕集线器的物理层广播机制、交换机的 MAC 地址自学习与转发表查表逻辑,以及三种典型转发场景,把底层机制拆开讲清楚。
2. 集线器的物理层本质:为什么它只能广播
2.1 集线器内部没有“判断”,只有“复制”
集线器工作在 OSI 模型的物理层,它处理的是电信号或光信号,而不是帧。这意味着集线器根本看不到数据帧里的源 MAC 地址和目的 MAC 地址——那些字段在它眼里只是高低电平的变化。它的内部结构非常简单:一个多端口中继器,任何一个端口收到信号,经过整形放大后,直接复制到其他所有端口。
这种设计带来的直接后果是:集线器连接的整个网络构成一个冲突域。所谓冲突域,就是同一时刻只能有一台设备发送数据的范围。因为所有端口共享同一个通信介质,如果两台主机同时发送,信号会在集线器内部叠加,导致接收方无法正确还原数据。CSMA/CD 协议就是为这种共享介质设计的,主机在发送前先监听信道,空闲才发,冲突了就退避重试。
在模拟器里配置一个包含 4 台主机和 1 个集线器的局域网,让其中一台主机向另一台发送单播数据包,然后在事件列表里观察。你会看到数据包从发送主机进入集线器后,被复制到所有其他端口,包括那些根本不是目标的主机。目标主机会正常接收,其他主机会检查目的 MAC 地址,发现不是自己的,然后丢弃。这个过程消耗了所有端口的带宽,也迫使非目标主机做一次无用的帧检查。
2.2 冲突域扩大带来的性能衰减
用集线器扩大网络规模时,冲突域会同步扩大。假设原来 4 台主机共享 10 Mbps 带宽,平均每台主机能分到 2.5 Mbps。如果通过集线器级联扩展到 8 台主机,总带宽仍然是 10 Mbps,平均每台只剩 1.25 Mbps。更严重的是,主机数量增加后,同时发送的概率上升,冲突次数呈指数级增长,实际有效吞吐量下降得比理论值更快。
这就是为什么集线器在现在的网络里基本被淘汰了。它的优势是便宜、即插即用、不需要配置,但代价是整个网络共享一个冲突域,规模越大性能越差。在模拟器里可以做一个简单验证:用集线器连接多台主机,同时发起大流量传输,观察冲突计数和吞吐量曲线,会看到明显的锯齿状波动。
3. 交换机的自学习算法:转发表是怎么建起来的
3.1 转发表的初始状态与学习过程
交换机工作在数据链路层,它能看到完整的以太网帧,包括源 MAC 地址和目的 MAC 地址。交换机内部维护一张 MAC 地址转发表,也叫 CAM 表,记录每个 MAC 地址对应哪个物理端口。这张表一开始是空的,交换机通过自学习算法逐步填充它。
自学习的逻辑很直接:当一帧从某个端口进入交换机时,交换机提取帧的源 MAC 地址,然后在转发表里查这个地址。如果表中没有这个 MAC 地址,就新增一条记录,把该 MAC 地址和进入的端口号绑定起来,并打上时间戳。如果表中已经有这个 MAC 地址,但记录的端口和当前进入端口不一致,就更新端口号和时间戳。如果一致,只刷新时间戳。
这个机制的核心假设是:一台主机不会频繁更换接入端口。所以源 MAC 地址出现的端口,就是该主机所在的位置。时间戳用于老化——如果一条记录长时间没有刷新,交换机就认为该主机已经离线或迁移,把它从表中删除,避免表项无限膨胀。
3.2 查表转发与泛洪的边界
学习完源 MAC 地址后,交换机拿目的 MAC 地址去查转发表。这里会出现三种情况,对应实验里观察到的三种转发行为。
第一种,转发表中没有目的 MAC 地址。交换机不知道目标主机在哪,只能泛洪——把帧复制到除了进入端口之外的所有其他端口。这就是实验里 PC1 第一次向 PC2 发送数据时看到的现象:交换机收到单播帧,但表里没有 PC2 的记录,于是向所有其他端口转发。注意,泛洪和集线器的广播有本质区别:泛洪是交换机在未知单播情况下的临时行为,一旦学到目标地址,后续就变成定向转发。
第二种,转发表中有目的 MAC 地址,但记录的出端口和帧的进入端口相同。交换机会直接丢弃这个帧。为什么?因为如果目标主机和源主机在同一端口下,说明它们连接在同一个共享介质上,帧已经通过该介质到达了目标,不需要交换机再转发一次。如果强行转发,反而会造成重复帧。实验里 PC1 连续第二次向 PC2 发送数据时,交换机已经学到了 PC2 的端口,但发现该端口就是帧进入的端口,于是丢弃。
第三种,转发表中有目的 MAC 地址,且出端口和进入端口不同。交换机按表项定向转发,只把帧送到目标端口。这是交换机最理想的工作状态,也是它比集线器高效的根本原因。
3.3 一个简化的自学习代码模型
下面用 Python 模拟交换机自学习与转发的核心逻辑,帮助理解表项更新和查表决策的先后顺序。
class Switch: def __init__(self): # 转发表:MAC -> (port, timestamp) self.mac_table = {} self.age_time = 300 # 老化时间,单位秒 def process_frame(self, src_mac, dst_mac, in_port, current_time): # 第一步:自学习,记录源 MAC 与进入端口 if src_mac not in self.mac_table: self.mac_table[src_mac] = (in_port, current_time) print(f"[学习] 新增 {src_mac} -> 端口 {in_port}") else: old_port, _ = self.mac_table[src_mac] if old_port != in_port: print(f"[学习] 更新 {src_mac} 端口 {old_port} -> {in_port}") self.mac_table[src_mac] = (in_port, current_time) # 第二步:查表转发 if dst_mac not in self.mac_table: # 未知单播,泛洪 print(f"[转发] 未知目的 {dst_mac},泛洪到除 {in_port} 外的所有端口") return "FLOOD" else: out_port, _ = self.mac_table[dst_mac] if out_port == in_port: # 出端口与入端口相同,丢弃 print(f"[转发] 目的 {dst_mac} 与源在同一端口 {in_port},丢弃") return "DROP" else: # 定向转发 print(f"[转发] 定向转发 {dst_mac} 到端口 {out_port}") return out_port def age_out(self, current_time): # 老化清理:删除超时表项 expired = [mac for mac, (_, ts) in self.mac_table.items() if current_time - ts > self.age_time] for mac in expired: del self.mac_table[mac] print(f"[老化] 删除 {mac}")这段代码里,process_frame先执行自学习,再执行查表转发,顺序不能颠倒。因为同一帧的源 MAC 地址必须先被记录,后续帧才能查到它。age_out模拟老化机制,防止转发表被离线主机的记录占满。实际交换机用硬件 CAM 实现这套逻辑,查表速度是线性的,但表容量有限,通常几千到几万条。
注意:自学习算法有一个前提——网络拓扑中不能存在环路。如果交换机之间形成环路,广播帧会在环里无限循环,转发表也会被同一 MAC 地址在不同端口间反复刷新,导致 MAC 地址漂移。生成树协议就是为解决这个问题设计的。
4. 三种转发场景的模拟器验证与排查
4.1 场景复现:从泛洪到定向转发
在模拟器里搭建包含 5 台主机和 2 台交换机的局域网,按实验步骤依次触发三种场景。第一次 PC1 向 PC2 发送 ICMP 请求,交换机转发表为空,事件列表里能看到数据包从 PC1 进入交换机后,被复制到所有其他端口。此时 PC2 会回复 ARP 应答或 ICMP 应答,交换机从应答帧里学到 PC2 的 MAC 地址和端口。
第二次 PC1 再向 PC2 发送数据,交换机查表发现 PC2 的端口就是帧进入的端口,直接丢弃。事件列表里会显示数据包在交换机处停止,没有继续转发。第三次换 PC4 向 PC2 发送数据,交换机查表发现 PC2 的端口和 PC4 的进入端口不同,于是定向转发到 PC2 所在端口。
这三个场景覆盖了交换机转发逻辑的全部路径。实际排查网络问题时,如果发现某台主机收不到数据,可以先看交换机转发表里有没有它的 MAC 地址,再看端口是否对应正确,最后看 VLAN 配置是否隔离了广播域。
4.2 常见踩坑记录
现象一:主机能 ping 通同网段,但跨交换机后时通时断。原因通常是转发表老化时间设置过短,或者网络中存在环路导致 MAC 地址漂移。解决方法是检查交换机之间的链路是否有冗余环路,启用生成树协议,并适当延长老化时间。
现象二:抓包看到大量重复单播帧。原因是网络里存在环路,交换机泛洪的帧在环里循环。解决方法是检查物理连接,确保任意两台交换机之间只有一条活动路径,或者配置生成树阻塞冗余端口。
现象三:转发表里同一个 MAC 地址频繁切换端口。这是 MAC 地址漂移的典型表现,通常由环路或错误接线引起。解决方法是排查拓扑,确认没有把两台交换机的多个端口互连形成环。
现象四:集线器和交换机混用时,冲突计数异常高。集线器连接的设备仍然共享冲突域,如果集线器下挂的主机流量大,冲突会波及到交换机的对应端口。解决方法是把高流量设备直接接到交换机端口,集线器只用于低流量或临时扩展。
现象五:VLAN 划分后,同一 VLAN 内主机无法通信。检查交换机之间的链路是否配置为 Trunk,且允许对应 VLAN 通过。如果 Trunk 链路没有放行某个 VLAN,该 VLAN 的帧会被丢弃,导致跨交换机通信失败。
5. 广播域与冲突域:交换机扩展网络的代价
5.1 交换机隔离了冲突域,但没有隔离广播域
交换机每个端口是一个独立的冲突域,端口之间不会因为同时发送而产生冲突。这是交换机相比集线器的核心优势。但交换机默认属于同一个广播域——广播帧、未知单播帧、组播帧仍然会被泛洪到所有端口。当网络规模扩大时,广播流量会占用大量带宽,消耗主机的 CPU 资源。
实验里用集线器扩展网络时,冲突域和广播域同时扩大,性能下降来自冲突加剧。用交换机扩展网络时,冲突域被隔离了,但广播域仍然在扩大,性能下降来自广播泛洪。这就是为什么大型网络必须划分 VLAN——VLAN 在数据链路层把一个大广播域切成多个小广播域,每个 VLAN 内的广播不会传到其他 VLAN。
5.2 VLAN 如何改变广播域的边界
VLAN 的本质是给以太网帧打标签,交换机根据标签决定帧属于哪个广播域。在模拟器里创建 VLAN 2 和 VLAN 3,把不同端口划分到不同 VLAN,然后在 Trunk 链路上允许这两个 VLAN 通过。此时 PC0 向 PC3 发送 ARP 请求,广播帧只在 VLAN 2 内传播,VLAN 3 的端口收不到。
这个机制的关键在于:交换机在转发帧之前,先查 VLAN 表确定帧所属的广播域,再在广播域内执行自学习和转发。如果目的 MAC 地址不在转发表中,泛洪范围也被限制在该 VLAN 内。所以 VLAN 既隔离了广播域,又保留了交换机端口级冲突域隔离的优势。
5.3 设计取舍:性能、成本与可管理性
集线器方案成本最低,但冲突域和广播域都无法隔离,只适合极小规模、低流量场景。交换机方案成本略高,隔离了冲突域,但广播域仍然需要靠 VLAN 或路由器来划分。三层交换机把路由功能集成进来,可以在硬件层面完成 VLAN 间转发,但配置复杂度和管理成本也相应上升。
实际组网时,接入层用交换机隔离冲突域,汇聚层用 VLAN 划分广播域,核心层用路由器或三层交换机做 VLAN 间路由。每一层都在解决上一层的遗留问题,同时引入新的复杂度。理解集线器和交换机的底层差异,是理解这套分层设计逻辑的起点。
提示:在模拟器里做实验时,建议先清空 ARP 缓存和交换机转发表,再按顺序触发三种场景。否则残留表项会干扰观察结果,让你误以为交换机没有按预期工作。
6. 从自学习到生成树:二层转发的边界与延伸
交换机的自学习算法解决的是“怎么找到目标端口”的问题,但它有一个隐含前提:网络拓扑是一棵树,没有环路。一旦出现环路,广播帧会无限循环,转发表会被反复刷新,整个二层网络会迅速瘫痪。生成树协议就是为打破环路而设计的——它通过选举根桥、计算最短路径,把冗余链路阻塞掉,逻辑上把拓扑修剪成一棵树。当主链路故障时,被阻塞的链路再自动启用。
这个机制和自学习算法配合起来,构成了二层转发的基本框架:自学习负责填充转发表,生成树负责维护无环拓扑。两者缺一不可。如果只学自学习,遇到环路就会翻车;如果只学生成树,不理解转发表怎么建,就看不懂阻塞端口恢复后流量怎么切换。
我自己的习惯是,每次在模拟器里搭完拓扑,先检查有没有环路,再清空转发表,然后按“未知单播泛洪 → 同端口丢弃 → 定向转发”的顺序走一遍,最后看生成树状态是否稳定。这套流程走下来,二层转发的问题基本都能定位到具体环节。从那以后我每次配交换机都强制走一遍这个检查顺序,省了很多事后排查的时间。
如果想把自学习算法、VLAN 划分、生成树收敛这些机制串起来,这份实验报告里的三个实验提供了完整的操作路径和现象记录。它把抽象的二层转发逻辑落到了具体的拓扑配置和事件列表观察上,适合边做边对照理解。希望帮到你。
本文还有配套的精品资源,点击获取