资讯动态

二层交换机原理详解:从MAC地址表到VLAN与STP

发布时间:2026/10/13 10:52:50 来源:尧图企业网站定制
1. 交换机的角色与定位做网络这一行不管你是刚入行的新手还是已经在机房摸爬滚打几年的老油条交换机都是躲不开的设备。很多人最开始接触的网络设备就是交换机但说实话能把它原理真正讲清楚的人其实并不多。交换机工作在OSI模型的第二层也就是数据链路层它的核心工作依据是MAC地址。我们可以把交换机理解成一个极其聪明的“信件分拣中心”它不需要知道信里写的是什么内容也不关心从哪儿来要往哪儿去它只需要根据信封上的地址MAC地址准确地把信投递到对应的房间门口。这个类比基本就是交换机工作原理的灵魂。这篇文章我会从二层交换机的角度把工作原理掰开了揉碎了讲一遍。内容包括MAC地址表的建立与维护、数据帧的转发决策流程、VLAN与广播域的关系、生成树协议的基本逻辑以及我在实际项目里遇到的排障案例。无论你是准备考证、面试还是单纯想把家里的网络组明白这篇文章都应该能帮到你。我见过太多人配置交换机的时候只知道复制粘贴命令至于为什么这么配、转发的时候设备内部发生了什么完全摸不着头脑。这样干活儿是可以的但一旦出了问题就会非常被动。理解了工作原理之后你会发现很多配置命令其实是顺理成章的排障思路也会清晰很多。2. 从集线器到交换机一次必要的认知升级2.1 为什么交换机比集线器聪明在讲交换机原理之前有必要先说说它的“前任”——集线器也就是HUB。集线器的逻辑很简单它收到任何一个端口传来的电信号会把信号广播到所有其他端口上不做任何判断。就好比你往一堆人的微信群里喊了一句话不管这句话跟谁有关群里的所有人都会收到。这种模式的弊端很明显。第一是带宽浪费严重所有端口共享同一个冲突域同一时刻只能有一个设备在发送数据其他人只能等着。第二是安全性差一个人收到的数据所有人理论上都能收到抓包工具一开什么隐私都没了。交换机的出现本质上是在数据链路层引入了“智能判断”的能力。它认识到一个核心事实并不是所有数据帧都需要被所有人看到只有目的MAC地址对应的那个设备才需要。这个判断不是靠猜而是通过一张表来实现这张表就是MAC地址表专业点叫CAM表Content Addressable Memory Table内容可寻址内存表。交换机内部有一块专门的高速缓存区域用来存放这张表表里的每一条记录通常包含三个关键字段MAC地址、对应的交换机端口、以及这条记录的学习时间。交换机正是靠着这张表才实现了从“广播所有帧”到“精准转发帧”的跨越。2.2 交换机和路由器的边界感很多人分不清交换机和路由器觉得这俩都能把设备联起来上网有什么区别区别大了去了。交换机工作在二层靠MAC地址转发不修改帧内容转发速度极快路由器工作在三层靠IP地址转发会处理数据包的逻辑寻址速度相对慢一些但是能连接不同的网段。打个比方交换机是小区的物业——每个房间都有门牌号MAC地址物业知道谁住在哪栋楼哪个房间信件送到就在楼内转交速度自然快。路由器是城市的交通枢纽——你要从A城去B城得根据路牌IP地址决定走哪条路虽然慢一点但它能跨城市、跨区域地把你送到目的地。这里有个重要的概念交换机默认不跨网段工作。如果两台电脑在不同网段比如一台在192.168.1.0/24另一台在192.168.2.0/24它们直接接到同一个交换机上不配VLAN的情况下是互通的因为交换机不管IP但通常是靠网关路由器来做跨网段的通信。实际项目里交换机和路由器往往配合使用交换机负责内部的快速数据交换路由器负责内外网的路径选择和安全策略。3. MAC地址表交换机一切行为的核心逻辑3.1 地址表的建立被动学习机制交换机不是出厂就知道每个端口后面连着谁。它的学习机制是被动的完全依赖数据帧的流向。当一个数据帧从某个端口进入交换机时交换机会查看这个帧的源MAC地址然后做两件事把源MAC地址和这个入端口绑定起来记录到MAC地址表中如果这个MAC地址已经在表中且对应的端口一致就刷新一下时间戳。这里有个细节值得注意交换机只学习源MAC地址不通过学习目的MAC地址来建表。目的是通过查表确定的查不到才用别的手段处理。这个机制和我们平时接触的“主动探测”完全不同交换机从来不会主动发报文去问“谁在哪个端口”它只从日常流动的数据流里默默积累经验。用生活化的方式理解你每天上班都会路过一家早餐店你从来没有刻意去记它的位置但因为你天天路过某天你脑子里自然就知道那家店在哪儿了。交换机的MAC地址表就是这种“被动记忆”。这也解释了为什么交换机刚上电的时候或者接了一个新设备之后最初几个数据帧往往会被泛洪广播到所有端口因为表里还没有对应记录。3.2 老化机制动态的淘汰规则MAC地址表不是一劳永逸的。设备会移动网线会拔掉设备会关机如果MAC地址表永不更新里面就会堆积大量无效记录甚至导致帧被转发到错误端口。因此交换机给每条动态学习到的MAC地址记录都设置了一个老化时间默认情况下通常是300秒也就是5分钟。在老化时间内如果交换机再次收到来自某个源MAC地址的帧就会刷新该记录的计时器。如果超过老化时间没有再收到来自这个MAC的帧交换机就会把这条记录从表中移除。之后再有目的为这个MAC的帧进来就查不到记录了只能泛洪。这个过程看上去简单积压的问题不少后面会说一个我踩过的坑就是跟老化机制有直接关系。我们可以通过命令动态查看和学习这些状态。以常见的某厂商交换机为例在系统视图下执行display mac-address就能看到当前的MAC地址表。输出的内容一般包括VLAN ID、MAC地址、类型动态/静态、端口和老化时间。排查网络问题时这个命令是使用频率最高的命令之一。4. 数据帧的完整旅程从进入交换机到离开交换机4.1 收到帧之后的第一件事查表当一个数据帧从交换机的某个端口进入时交换机不会第一时间就决定怎么转发它会先把帧缓存到内存中然后解析出帧头部的目的MAC地址拿着这个目的MAC去MAC地址表中查找匹配项。正常情况下会出现三种结果第一种查到了且端口和当前入端口不同交换机就根据表中记录的端口将帧从那个端口转发出去这个过程叫单播转发。这种路径效率最高也是交换机存在的核心价值。第二种查到了但是对应端口和入端口是同一个端口。也就是说数据从A口进来目的设备也挂在A口。这种情况说明发送方和接收方在同一个端口下可能通过其他二层设备连接交换机就没必要往外转了直接把帧在内存里丢掉这叫过滤。第三种在表中查不到目的MAC地址对应的记录。交换机会采取“广播”策略把帧从除了入端口以外的所有端口都发送出去这个过程叫泛洪。泛洪看着像集线器行为但它的目的很明确我暂时不知道这个MAC在哪里只能问遍所有人目的设备收到后回复数据帧交换机就能从回包的源MAC地址里学到它的位置。4.2 转发决策的三种结果转发、过滤、泛洪把上面的内容整理一下转发决策不外乎就这三种结果。我用一个表格来对照看起来更直观查表结果转发动作场景说明查到目的MAC端口 ! 入端口单播转发正常精准转发发送方与接收方在不同端口下查到目的MAC端口 入端口过滤丢弃收发方在同一个端口下可能后面接了Hub/交换机未查到目的MAC泛洪首次通信或目的MAC已老化向所有端口广播除入端口这里需要特别强调泛洪和广播风暴不是一回事。泛洪是因为查不到表项才做的短时间行为当目的设备回复之后交换机就学到了地址后续帧都走精准转发。而广播风暴是网络环路或配置错误导致的恶性循环两者绝不能混淆。判断一个网络是否正常可以看交换机泛洪的频率正常的局域网里泛洪帧占比很低如果发现泛洪比率异常高基本可以断定二层表学习出了问题或者网络规模远超交换机表容量。4.3 同一个端口下的两个设备通信帧会出去吗上面提到过过滤但实际工作中还是有人问如果A和B都接在交换机的同一个端口下它们通信时交换机会怎么处理答案是交换机只会在内部直接丢弃这个帧不会把它从其他任何一个端口发送出去。原因很简单A发给B的帧从端口进入交换机交换机学习源MAC收到A的地址查目的MAC发现B的地址也在同一个端口下那就说明B就在端口的另一侧交换机没有必要去管这个端口内部的事情。这个行为跟二层交换机“不修改数据”、“不过滤内容”的原则一致。交换机从头到尾都只是根据MAC表做合理的二层的转发判断至于帧里承载的是什么协议IP、ARP、甚至是一些特殊的二层协议它都不关心也不需要关心。所有帧一律按同一种逻辑处理——查表、转发或丢弃。4.4 数据从入到出的时间开销去哪了有人可能会好奇交换机处理一个帧到底需要多久为什么有时候测延迟感觉很低有时候又会出现所谓的“首次延迟高”这里面涉及转发模式。常见的交换机转发模式有两种。第一种是存储转发模式交换机必须收到完整的帧之后先做循环冗余校验确认帧没有错误再根据目的MAC查表转发。这种模式的优点是可靠性高坏帧不会传出去缺点是延迟会随着帧的变大而增加。第二种是直通转发模式交换机只看帧头部的目的MAC地址一旦拿到地址在帧还没完全收完的情况下就开始往外发。它的优点是延迟极低缺点是如果帧后半部分有错误交换机也检查不出来会原样转发出去。大多数中高端交换机是支持配置转发模式的。如果业务对延迟非常敏感比如高频交易场景可以考虑直通转发如果是普通企业网或者数据中心存储转发其实是更稳妥的选择。我在实际项目里绝大多数情况都建议保持默认存储转发因为现在交换机的处理能力很强那点延迟差异微乎其微但拒绝坏帧的能力是实打实的收益。5. VLAN与广播域交换机如何切开一张大网5.1 交换机默认住在同一个广播域知道了泛洪机制之后可以自然地引出一个问题如果一个交换机下面接了几百台设备任何一台设备发起ARP广播整个交换机上的几百台设备都会收到这对网络性能是灾难。默认情况下不划分VLAN的交换机所有端口都在同一个广播域里。所谓广播域就是一张广播报文能够到达的网络范围交换机的所有端口天然属于同一个广播域。你发一个广播帧除入端口外的所有端口都会收到这个“所有人”就是广播域的成员范围。VLAN是解决这个问题的标准手段。VLAN的全称是Virtual Local Area Network虚拟局域网。它可以把一台物理交换机逻辑上切成若干个互不相通的独立网络。不同VLAN之间的二层流量是完全隔离的广播帧和未知单播帧只能在同一个VLAN内部泛滥不能跨VLAN传播。5.2 VLAN对转发决策的影响注意VLAN加入之后MAC地址表的表项就不再只是“MAC 端口”而是变成了“VLAN MAC 端口”。同一个MAC地址理论上可以在不同VLAN里出现多次对应不同端口因为一台设备在逻辑上可以属于多个VLAN。交换机查表的时候实际上是在对应VLAN的范围内查找。一个数据帧带着VLAN标签进入交换机交换机会根据这个VLAN ID去匹配MAC地址表查不到就在同VLAN的所有端口泛洪。同时也意味着如果目的MAC在另一个VLAN里交换机是永远不可能把帧转过去的这是设计上的天然隔离。这个机制带来了一个实用的经验如果你在排查某个VLAN里的设备之间不通先不要急着看IP先确认这两个设备的端口是不是同一个VLAN然后看交换机MAC表里有没有学习到双方的MAC地址。如果MAC地址表里只有一边的另一次查不到那方向大概率是链路问题或者对端没有上线。这条排障路径在项目中非常实用。5.3 跨交换机VLAN通信Trunk的必要性单台交换机划分VLAN很简单那么多台交换机之间要传输多个VLAN的流量怎么办不可能每个VLAN接一根物理线两台交换机之间。这时候就需要Trunk口也就是中继链路。Trunk口的基本特点是允许携带多个VLAN的流量帧在通过Trunk口的时候会被打上802.1Q标签标签里记录了VLAN ID。对端交换机收到带标签的帧后解析出VLAN ID再在这个VLAN的范围内查MAC表转发。这里有个常见的坑——Trunk口和Access口的混用。Access口默认只能承载一个VLAN如果两台交换机互联用的是Access口那么两端必须配置成同一个VLAN否则二层就是不通的。很多新手排障半天找不到原因最后发现是互联端口一端配了Trunk另一端配了Access或者两端的Trunk允许的VLAN列表不一致流量到了就被丢弃。6. 环路问题与生成树协议二层网络的安全底线6.1 环路会导致什么可怕后果二层网络最怕环路这句话能写进教科书。当网络中存在物理环路时交换机之间会形成一个广播帧的循环死循环帧从交换机A泛洪到交换机BB学到后泛洪回AA再泛洪回B每个交换机收到帧还会刷新对源MAC地址的学习导致MAC地址表在两个端口之间反复横跳。表现就是网络瞬间瘫痪CPU占用率飙高所有端口疯狂转发重复的广播帧整个广播域内的设备基本失去响应。这种场景我在某次项目中真实遇到过——某公司的网络突然全网卡顿交换机CPU一度达到99%排查完发现是两台接入交换机之间误插了一根跳线形成了环路。解决环路的标准手段是生成树协议Spanning Tree ProtocolSTP。它的核心理念很简单通过协议计算在网络中选择一个根桥然后阻塞掉那些形成环路的冗余端口逻辑上把全网拓扑修剪成一棵没有环的树。一旦主链路出现故障阻塞端口会被激活链路自动恢复。6.2 生成树协议的工作原理简化版STP的工作过程可以概括为选举和阻塞两个阶段。交换机之间通过交换BPDUBridge Protocol Data Unit桥协议数据单元来协商BPDU里有优先级、MAC地址、路径开销等信息用来决定谁是根桥、哪个端口是指定端口、哪个端口是根端口、哪个端口应该被阻塞。我们需要关心的核心是优先级数值越小越可能成为根桥路径开销越小越可能成为被选中的转发路径。在一棵生成树中每个非根桥交换机选择一个根端口每条链路上选择一个指定端口剩下的端口统一进入阻塞状态。正式收敛之后全网没有环路所有不该转发的路径都被逻辑切断了。现代网络设备基本上默认都启用了某种形式的生成树协议但许多工作室和小型网络里人们做实验时为了追求“启动快”会把STP直接关掉配置命令就是一句undo stp enable之类。说句不好听的在没有环路的拓扑里关掉STP确实没事但一旦物理上又出现了回环路径全网就等着瘫痪吧。我个人的建议是宁可保留STP也不要在生产环境关闭它。即使网络规模很小STP带来的那点收敛时间代价远小于环路风暴带来的灾难性故障损失。7. 实操如何通过命令行看清交换机的决策过程7.1 必备命令清单与解析理论说得再多最终还是要落到命令行上去验证。下面是我比较常用的二层排障命令清单命令源自某常见厂商设备的风格不同厂商命令名称略有差异核心逻辑是一样的命令作用使用场景display mac-address查看MAC地址表确认设备是否被交换机学习到display vlan查看VLAN配置确认端口所属VLAN、Trunk允许列表display stp brief查看STP端口状态确认端口是否被阻塞、角色是什么display interface查看端口状态与计数器确认端口错包、丢弃包情况reset mac-address清空MAC地址表清除残留学习记录后重新观察这些命令看似基础但在排障的时候能救命的往往就是它们。我见过很多人在二层排障时直接上抓包工具抓了半天也没定位到问题。其实多数二层问题只需要仔细观察MAC表和端口计数器就能推断出来。7.2 模拟一次简单的通信过程验证我们来看一个非常典型的场景。有两台电脑A接在交换机GE0/0/1口B接在GE0/0/2口A去ping B。第一步A发出ARP请求这个请求帧的目的MAC是全F的广播地址。帧从GE0/0/1进入交换机交换机查MAC表发现目的是全F的广播地址直接泛洪到除入端口外的所有端口包括GE0/0/2B收到后回应ARP应答。第二步B的应答帧从GE0/0/2进入交换机源MAC是B的MAC地址。交换机学习到“B的MAC对应GE0/0/2”这条记录同时查目的MAC发现A的MAC地址在之前学习到了于是精准地从GE0/0/1转发出去。A收到应答通信建立。此时在交换机上执行display mac-address就能看到两条动态表项一条指向GE0/0/1对应A的MAC一条指向GE0/0/2对应B的MAC。整个过程完全可以复现。理解了这一套流程你就明白了为什么第一次ping会有延迟后面ping就很快——因为ARP请求和未知单播的泛洪阶段已经过去了MAC表已经建立起双方的转发表项。7.3 如何判断交换机是不是在“瞎转发”有个很实用的技巧当网络延迟异常时可以通过端口计数器来判断交换机工作是否正常。执行display interface命令看端口的Input/Output字节数和错误计数。如果某个端口的错误包数量猛增说明链路上存在冲突、错帧或者协商问题。判断交换机是不是在反复泛洪可以观察MAC表的变化频率。如果每隔几秒删除大量记录又不断学习新记录说明链路在反复震荡可能存在环路或设备反复上下线。这个时候如果网络全面卡顿先查环路别急着看别的。这是最经典的二层排障思路切记。8. 常见问题与排查技巧实录8.1 MAC地址表里的记录为什么一直不消失在实际工作中有几次遇到客户反馈交换机MAC表里有些地址总是存在删也删不掉。一看表项类型显示的是静态或者黑名单类型才发现是之前有人配置过静态MAC表项。静态MAC表项不会老化除非手动删除某些安全场景下故意配置的但在普通企业网里这就很莫名其妙了。所以遇到不断出现的MAC记录第一步不是急着清而是先看表项类型。如果显示的是dynamic才属于正常动态学习可以老化删除如果是static或者其他特殊类型需要检查是否有人为配置残留。用命令display mac-address输出里通常会有Type列看清再操作。8.2 两个设备在同一VLAN却ping不通这个问题出现的概率非常高排查顺序建议按照我下面列的来先确认两台设备的IP地址在同一个网段子网掩码无误。二层通但是三层不通的案例里最典型的原因是IP配置不在同一网段。看两端的交换机端口状态是否UP端口有没有被STP阻塞。STP阻塞状态下端口只转发协议报文不转发数据帧。看MAC地址表确认两个MAC都能被学习到。如果只有一端学到那就是链路或者对端问题。确认VLAN一致Access口PVID一致Trunk口允许的VLAN列表包含对应VLAN。按照这个顺序走80%的同类问题都能查出结果。经验之谈是很多人第一步就漏了直接去查VLAN绕了一大圈结果发现是终端自己的IP配置错了非常浪费时间。8.3 广播风暴来临时的应急处理如果真的碰上广播风暴整网已经卡死光靠敲命令已经来不及了因为设备CPU已经被打满。这时候不要慌一步一步来。第一件事物理断开疑似环路端口这是最粗暴也最有效的方法。断开环路后网络会迅速恢复CPU占用率降下来然后再去查询日志确认环路位置。第二件事确认根因。如果是因为加了冗余链路但没开STP那就赶紧打开STP如果是因为STP配置不当导致重新检查根桥选举和路径开销。第三件事长期预防。核心交换机上可以开启风暴控制功能对广播、组播、未知单播设置速率阈值超过阈值的流量直接丢弃。这个功能在绝大多数企业交换机上都支持开了之后即使再次出现环路网络也不会直接被击穿。8.4 交换机转发效率为什么越来越低还有一类问题跟硬件表项有关。交换机芯片里的MAC表容量是有限的从几千条到几十万条不等。如果网络里的终端数量特别多或者网络里存在大量伪造MAC的攻击行为表项被占满后就不再学习新地址了所有新设备的帧全部泛洪整个网络的转发效率瞬间崩塌。这种问题靠排查链路性能是查不出来的直接看MAC表条目数占总量比就能判断。如果距离满载不远了考虑启用端口安全特性限制单端口MAC学习数量或者优化VLAN设计把大广播域拆分成小广播域。实际项目中我还遇到过因为某个端口下挂了一台开了MAC地址欺骗的测试设备导致表项溢出找出那个端口后立马恢复。定位方法是逐端口查看MAC学习数量或者干脆拔线逐段排查配合日志的告警信息效率会高很多。9. 写在最后的个人经验做网络这一行真正的核心竞争力不一定是会配置多少复杂的功能而是能不能在故障发生的时候三两下就把问题定位清楚。而定位问题的底层能力就是对设备转发原理的深度理解。我个人的体会是交换机原理是网络技术里最不该跳过的内容。从MAC地址表学习机制到VLAN隔离再到环路防护这些概念融会贯通之后你面对的不再是一堆零散的命令行而是一台结构清晰的设备。敲命令的时候脑海里能浮现出帧从入端口到出端口走过的完整路径而不是机械地输入。最后再分享一个我自己的习惯每次接手新项目第一件事绝对不急着上架设备而是花十分钟把拓扑理清楚确认每一根线从哪个端口到哪个端口、哪些VLAN会流过哪些链路。网络故障里超过一半的问题其实都是拓扑混乱导致的。理解了交换机的转发逻辑你会自然而然地养成这个习惯因为你知道帧走哪条路人心里必须得有数。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑