尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从MAC地址表到VLAN与STP:以太网交换机核心原理与实战排查指南

从MAC地址表到VLAN与STP:以太网交换机核心原理与实战排查指南 1. 先搞清交换机在局域网里的角色它和集线器、路由器到底差在哪1.1 集线器时代的一堂冲突课在讲交换机之前我觉得最好先聊一下集线器。只有对比过没有交换机的时代才能真正理解交换机解决了什么问题。集线器是纯物理层设备它做的事情比想象中还要简单把收到的电信号从所有端口再发出去。也就是说哪怕你只是给办公室另一台电脑发一个数据帧这个帧也会出现在集线器的每一个端口上网线那头所有设备都能看到这份数据。而且同一时刻只能有一台设备发送如果两台设备同时发信号就会冲突两个帧全部作废。早期以太网用CSMA/CD来解决这个问题发送前先监听、冲突后随机退避但不管怎么优化本质上仍然是一个一个房间所有人喊话的模型。我第一次在实验室里拿集线器做压力测试时印象特别深三台电脑同时互相ping延迟直接从1ms涨到几百毫秒丢包也上来了。原因不难解释整个网络只有一个冲突域重传次数太多有效吞吐量被大幅拉低。集线器连接的所有设备共享带宽也共享冲突域一台设备发送时其他设备只能等着。这个场景放在今天看起来很落后但它正好说明了一个关键问题连接局域网设备时我们需要一种能够只把数据送到该去的地方的设备而不是让所有人都听见。也正因为如此以太网交换机才会成为局域网里真正的主角。1.2 交换机如何拆掉冲突域交换机工作在数据链路层它对以太网帧的处理方式与集线器完全不同。交换机不会把信号无脑复制到所有端口而是先解析帧里的MAC地址信息再根据一张自行维护的转发表决定从哪个端口发出去。只要目标设备不在同一个端口方向交换机就可以让多个端口同时通信。比如四台电脑接在同一台交换机上A发给B的同时C也可以发给D交换机内部可以并行交换互不干扰。这个改变带来的直接效果就是每个端口单独成为一个冲突域但整台交换机下仍然是一个广播域。这句话我觉得值得反复强调最好直接记到笔记里。很多人会误以为交换机把冲突域和广播域都隔离了其实它只拆冲突域不拆广播域。广播帧目的MAC是FF:FF:FF:FF:FF:FF的帧依然会被转发到所有端口因为从设计语义上讲广播本来就是发给所有设备的。要隔离广播域得靠VLAN或者用路由器把网络切成多个网段。这个概念的层次关系如果搞混了后面学VLAN、学三层路由都会觉得别扭。1.3 学习时最容易混淆的三元组学《计算机网络》的时候我认为最值得花时间理清的就是集线器、交换机、路由器这三个设备的定位。它们虽然都放在机房里但在网络体系结构中的角色完全不同。我经常列这样一张表帮助复习设备工作层次转发依据隔离冲突域隔离广播域集线器物理层比特信号否否以太网交换机数据链路层MAC地址是否路由器网络层IP地址是是集线器连的是比特交换机连的是帧路由器连的是包。这个数据单元的差别不是抠字眼而是理解它们功能边界的关键。交换机的核心是MAC地址表路由器的核心是路由表一个收的是二层信息一个看的是三层地址。期末考或者面试问交换机和路由器有什么区别的时候如果只回答一个转发MAC一个转发IP其实还不够至少得从工作层次、转发依据、广播域隔离能力三个角度回答才显得真把这个概念吃透了。2. MAC地址学习与转发表交换机的记忆机制全解2.1 学习、泛洪、转发、丢弃一个帧的完整旅程交换机最核心的能力是MAC地址学习。我经常向初学者讲一句话交换机的转发表不是出厂写死的而是它自己边工作边学出来的。刚开机的交换机MAC地址表完全是空的。假设PC A的MAC地址是AA:AA:AA:AA:AA:AA连在1号口想给连在2号口的PC BBB:BB:BB:BB:BB:BB发一个单播帧交换机会经历一个完整的过程收到帧后先从帧头解析出源MAC和入端口把AA:AA:AA:AA:AA:AA对应1号口这个信息记入MAC地址表这叫源地址学习。然后看目的MAC。此时表里没有BB:BB:BB:BB:BB:BB的条目交换机不知道该往哪个端口发所以会把这个帧从除了1号口之外的所有端口发出去这个过程叫泛洪。PC B收到这个帧如果回包交换机就能从2号口学到BB:BB:BB:BB:BB:BB对应2号口。之后再收到PC A发给PC B的帧交换机可以直接查表精准转发到2号口不再泛洪。这个机制看起来简单但里面藏着一个非常关键的认知交换机是源地址学习目的地址转发。先搞清楚这个帧是谁从哪个口发进来的再去查目的MAC该往哪边走。如果源MAC学错了后面转发方向就全错了。还有些细心的人会问如果收到的帧目的MAC和源MAC刚好在同一个端口呢比如PC A发给自己的单播帧交换机查表发现目的端口和入端口相同会直接丢弃。这个情况在真实抓包里很少见但确实是交换机必须处理的边界逻辑。2.2 老化时间为什么不能把表项永久留在心里MAC地址表里的条目是有生命周期的默认老化时间通常是300秒不同厂商型号会有区别。每次收到来自这个源MAC的帧对应的计时器就会刷新一次如果超过老化时间再也没有收到这个MAC的帧条目就会被删除。为什么不能永久保留因为网络拓扑一直都在变电脑可能关机、网线可能拔了再插到另一个端口、笔记本可能在不同接入点之间漫游。如果表项永久保留交换机把发往这个MAC地址的帧一直送到旧端口数据就永远到不了真正在的地方。老化机制的存在配合泛洪机制一起兜底让交换机具备了很强的自愈能力表项过期后自动删除这台设备下次再发包交换机重新学习转发又恢复正常。这也能解释为什么实际网络里设备换个端口之后不需重启交换机过一会儿通信就自己恢复了。理解这一点之后好多为什么换了口之后就通了的现象都会变得理所当然。2.3 几个容易被忽略的细节第一个细节未知单播帧也会被泛洪。很多人以为只有广播帧才会泛洪单播帧一定是查表转发但实际不是。如果MAC地址表里没有目的MAC的条目交换机照样会把单播帧从所有其他端口发出去直到目的设备回包完成学习之后的通信才会精准起来。所以网络里第一次通信总是带点试探味。第二个细节广播帧会被泛洪但交换机不会把广播地址学进MAC地址表。广播地址FF:FF:FF:FF:FF:FF是给所有设备看的它不代表某个具体端口学进来也没有意义。泛洪是广播帧唯一的处理方式。第三个细节二层交换的不对称转发非常正常。PC A发向PC B的帧从1号口进、2号口出PC B回给PC A的帧从2号口进、1号口出这完全符合MAC地址表的结构。不要一看到某个MAC从一个口进来、出去时走了另一个对应关系就觉得异常。在路由器上做三层转发时来回路径反而可能由于路由选择而不同交换机更单纯每个MAC对应一个最近一次出现的端口它没有长期路径记忆。这些细节点看着不起眼在抓包排障的时候特别能派上用场。3. 动手搭建最小交换网络从连通性到抓包验证3.1 实验环境一台交换机加两台PC就够了纸上谈兵再多不如自己抓一次包。我强烈建议学交换机原理时至少亲手搭一次最简实验。真实设备也好模拟器也好拓扑就三样东西一台二层交换机、两台PC、两条网线。PC设置为同一个网段比如192.168.1.10和192.168.1.20掩码255.255.255.0网关可以先不配因为二层直连通信不需要网关。接下来做几件事先用PC1去ping PC2然后登到交换机命令行敲show mac address-table。你会看到原来可能是空的表现在多出了两条动态条目一条对应PC1的MAC和端口另一条对应PC2的MAC和端口。这里我想多说一句ping这个动作看起来是三层ICMP但从以太网层面落地时它首先需要ARP请求和ARP回复。ARP请求是广播帧会从交换机的所有端口发出去ARP回复是单播帧只要交换机已经学到目标MAC就会精准地从对应端口转发。抓包看的就是这个完整过程。3.2 用Wireshark观察MAC学习与帧转发在PC1上用Wireshark抓包然后去ping PC2过滤条件设为arp你会看到非常清晰的两条记录第一条请求的目的MAC是FF:FF:FF:FF:FF:FF这是广播第二条回复的目的MAC是PC1自己的MAC地址这是单播。把Wireshark的Source列和Destination列打开对比一下ARP请求和回复的目的MAC就能直观看到交换机在里面的作用广播帧被复制出去单播帧被定向转回。我建议你再多做一步先清空交换机的MAC表再通信一次观察泛洪现象怎样重新出现然后再自动学习。一旦现象和理论能够对上号这个知识点就真正变成你自己的了。如果条件允许还可以在交换机的某个端口上配置端口镜像然后在镜像口抓包看看非本机VLAN或者跨交换机方向的帧到底长什么样。端口镜像的原理就是把某一端口收发流量复制一份到另一个观察口常用在网络分析场景中做实验时拿来观察MAC学习过程特别直观。3.3 用MAC地址表排障一个实战习惯掌握原理之后我在日常排障里也养成了先看MAC表的习惯。有一次同事报某个工位网络不通我登到接入交换机上一看端口状态是up但show mac address-table里就是没有这台电脑的MAC。这说明什么说明交换机在物理层看到了信号但从来没有收到过一个能被正常识别为有效以太网帧的数据或者收到的帧源MAC被判定为异常。沿着这个思路查下去最后发现那根网线线序做错了虽然设备端的link灯是亮的但帧全部是坏的。网络排障时MAC表真的是特别趁手的工具。如果设备通信正常它一定会在某台交换机上留下MAC条目如果表里没有大概率二层没通如果表里有但端口不对就要考虑MAC漂移、环路或者私接设备的问题了。简单一条命令信息量其实很大。别只在考试时背命令真正用起来才能体会到它的价值。4. 环路产生的广播风暴与生成树协议STP原理与防护4.1 广播风暴是怎么打满整个网络的讲STP之前必须先讲一个残酷的现象——广播风暴。假设办公室里有几台交换机为了增加可靠性有人把交换机A的口1和口2分别接到了交换机B的两个不同端口上结果形成了一个物理环路。此时只要网内出现一个广播帧比如某台电脑发出的ARP请求它就会从交换机A的除入端口以外的其他口转发出去其中就包括连向交换机B的那个口交换机B收到后又会在它的其他端口上继续泛洪其中又包括回到交换机A另一个口的那条链路。于是这个广播帧在网络里被反复复制、转发、再复制形成风暴。MAC地址表在这种情况下还会疯狂抖动因为交换机一会儿从A口学到某个MAC一会儿又从B口学到同一个MAC表项在多个端口之间来回漂移。最后所有端口都被这些无穷无尽的广播帧占满正常数据帧根本挤不进去整个网络直接瘫痪。这个现象在实验室里我非常常见真实生产环境也出过类似问题。环路是交换网络的第一大杀手它不是某个设备坏了而是二层帧自己把自己复制到灾难级别。为什么广播帧能无限循环因为二层帧没有TTL没有跳数到期机制。只要环路存在广播帧就永远循环下去。这也是为什么每个学习计算机网络的人都必须理解STP存在的必要性。4.2 STP的核心逻辑根桥、根端口、指定端口生成树协议STP就是为了打破环路而生的。它能让物理上存在环路的网络在逻辑上裁剪出一个无环的树形拓扑。STP靠交换机之间交换BPDU网桥协议数据单元来协商。每台交换机刚开始都宣称自己是根桥不断广播BPDU最后桥ID最小的那个被选为根桥。桥ID由优先级和MAC地址组成优先级数值越小越优先。根桥选出来之后每台非根交换机要在自己的端口里选定一个根端口也就是距离根桥最近的端口负责接收根桥方向的BPDU每条链路上再选择一个指定端口。剩下的既不是根端口也不是指定端口的端口就进入阻塞状态不转发普通业务帧只监听BPDU。这样一来环路就被逻辑上切断了。端口状态迁移也很有意思刚开始端口处于阻塞态经过监听、学习两个阶段最后才进入转发态。传统STP从阻塞到转发大约要等30秒这就是为什么很多老交换机环境下设备插上线要过好一会儿才能通信。RSTP快速生成树通过提议/同意机制把收敛时间缩短到秒级现在园区网、接入网基本都应该用RSTP或MSTP。4.3 配置示范和常见误区在Cisco交换机上启用RSTP很简单一行命令spanning-tree mode rapid-pvst生产环境里最好手动指定根桥别让边缘接入交换机抢到根桥位置spanning-tree vlan 1 priority 4096优先级调低之后这台交换机在选举中更容易获胜成为根桥。很多初学者容易把STP误解成路由协议以为它会选择带宽最大、速度最快的链路作为转发路径。实际上STP选择的是距离根桥最近、桥ID最优的路径和带宽不是一回事。双上联场景里如果根桥选择不合理完全可能出现流量绕了一大圈才走到核心的情况。另一个常见误区是觉得阻塞端口完全不处理任何数据。实际上阻塞端口还在持续接收BPDU只是不转发业务帧而已。抓包时如果看到阻塞端口上有BPDU流动这恰恰是正常的环路保护在运行。STP排障基本就是看show spanning-tree里面的端口角色和状态。端口一直阻塞、根端口选举异常、BPDU被丢都能从这个命令里看到端倪。需要特别提醒的是开STP不代表永远安全如果有人在网络里接入了一台不支持STP的傻瓜交换机环路照样会绕开防护产生。5. 从部门隔离到跨交换机通信VLAN与Trunk的完整逻辑5.1 VLAN解决的是广播域太大的问题二层交换机默认把所有端口放在同一个广播域一个广播帧会传到所有设备。这在几十台电脑的小网里问题不大但到了几百上千台的园区网麻烦就来了广播流量太大设备被迫处理很多和自己无关的帧同时还有安全隐患财务电脑和访客电脑同处一个广播域等于共享同一个二层世界谁都能向谁发ARP谁都能探测到对方的存在。VLAN虚拟局域网就是在一台物理交换机上把端口分成多个逻辑独立的广播域。比如端口1-8划分到VLAN 10给财务部端口9-16划分到VLAN 20给访客网络。这样VLAN 10里的广播帧不会跑到VLAN 20去。在数据链路层以太网帧会携带VLAN标签来标识自己属于哪个VLAN。VLAN是广播域隔离从理论走向工程实践的最典型手段期末考、面试题里几乎必考。5.2 Access口和Trunk口到底怎么分划分VLAN之后交换机端口要区分角色。连接主机、打印机这些终端的端口一般配成Access口它只属于一个VLAN发出的帧不带VLAN标签。连接交换机之间、交换机到路由器的端口一般配成Trunk口默认放行多个VLAN并且会在帧上打上802.1Q标签让对端能判断这个帧属于哪个VLAN。802.1Q标签并不复杂就是在标准以太网帧的源MAC和类型字段之间插入4字节内容其中TPID标识这是一个带VLAN标签的帧TCI里包含优先级和VLAN ID。VLAN ID占12位所以取值0到4095可用范围通常是1到4094。这个概念看似全是比特但理解了它就能明白为什么两台交换机之间只需要一根Trunk线就可以让多个VLAN并行传输而不是每个VLAN单独拉一根线。Trunk本质上是一条多VLAN共享的高速公路每个帧都贴了路标交换机会按照路标把它们送到对应的VLAN。5.3 跨交换机VLAN隔离的配置思路举一个典型场景交换机SW1和SW2之间用一条Trunk连接财务PC接在SW1的Access口VLAN 10行政PC接在SW2的Access口VLAN 20。配置步骤大致是在两台交换机上都创建VLAN 10和VLAN 20。把对应端口设为Access并划入相应VLAN。把两台交换机互连的端口设为Trunk并指定允许放行的VLAN列表。Cisco风格示例SW1(config)# vlan 10 SW1(config-vlan)# name caiwu SW1(config)# vlan 20 SW1(config-vlan)# name xingzheng SW1(config)# interface gigabitethernet0/1 SW1(config-if)# switchport mode access SW1(config-if)# switchport access vlan 10 SW1(config)# interface gigabitethernet0/24 SW1(config-if)# switchport mode trunk SW1(config-if)# switchport trunk allowed vlan 10,20SW2做类似配置。需要注意Trunk口两侧放行的VLAN列表必须一致否则某些VLAN会单向互通或者完全不通。配置完成后可以验证同一VLAN的两台PC能互通不同VLAN的PC二层不通。然后在Trunk口抓包会看到不是本机VLAN的帧上带着802.1Q标签看到那个标签的瞬间你对VLAN的理解就比背书深刻多了。如果不同VLAN之间需要通信那就必须引入三层网关核心交换机上起VLANIF/SVI或者路由器接Trunk做单臂路由。二层交换机本身不处理跨VLAN的IP转发这是很多刚上手网络设备的人最容易忽视的一点。6. 学习阶段如何把交换机知识点串成体系复习路径与高频疑问6.1 自顶向下还是自底向上我的实际经验不少同学学《计算机网络》时会在教材方向上纠结。我的建议不太一样应用层、传输层这部分自顶向下确实更直观但学到以太网交换机时我更推荐先从数据链路层的帧格式入手搞清MAC地址在哪个字段、以太网帧由哪些部分组成然后再去理解MAC学习、VLAN、STP。因为交换机的所有行为都是以收到一个以太网帧为起点的如果没有帧格式的概念后面全是空中楼阁。备考的时候也是一样我习惯把MAC地址表交换、VLAN、STP串成一条线来复习二层转发靠MAC表广播域隔离靠VLAN环路防护靠STP。这三个点在小面试里几乎必考而且经常被组合在一道综合题里。不要孤立地背什么是VLAN什么是STP要试着回答为什么同一个广播域必须防环为什么VLAN划分之后路由要在三层解决能把因果串起来才是真理解。6.2 踩过的一些问题高频疑问集中回答问二层交换机自己能配IP地址吗能但那个IP通常是管理地址用于远程管理设备和普通数据的二层转发没有关系。想让接口拥有三层IP并参与路由转发得靠三层交换机上的VLANIF/SVI。问MAC地址表满了会怎样交换机没有多余空间记录新MAC目的MAC未知的帧就会退化成泛洪网络性能和安全性都会下降。所以在大规模网络里要关注设备MAC表容量也要控制广播域规模。问交换机算网桥吗可以理解成多端口的网桥。网桥是数据链路层概念的早期形态交换机是网桥的现代版本区别主要在交换矩阵、端口密度和处理能力上。问为什么交换机里有MAC表但我在汇聚层看不到某台PC的MAC很可能这台PC的MAC只存在于接入交换机上汇聚层不一定需要学习每个终端MAC。排查时先想清楚这个MAC应该出现在哪一层再去对应设备上查别急着下结论。问收到源MAC和目的MAC相同的帧正常吗大概率不正常这是环路的典型特征之一很多交换机会直接丢弃或者告警。处理思路是先确认端口下是否存在环路再看是不是有人私接了设备。6.3 一个真实办公室网络场景的完整走查最后用一套完整场景把前面所有知识串起来。办公室里两台接入交换机分别上联到一台汇聚交换机某一台PC报障说上不了网。我接到问题的排查顺序通常是先看接入交换机端口状态是不是up再看MAC地址表里有没有学到PC的MAC、学到的端口对不对然后确认端口所属VLAN和预期是否一致再检查交换机之间Trunk是否放行了这个VLAN随后上汇聚交换机看STP端口状态确认没有因为环路被阻塞最后去网关设备上检查ARP表里有没有这台PC。这套流程实际上就是沿着物理链路逐层往上排查的过程每一层对应一个核心概念物理链路、MAC学习、VLAN隔离、Trunk转发、STP防环、三层网关ARP解析。有一次我真是按这个顺序查出来的。接入交换机端口upMAC表里也有PC的MAC一切看似正常但VLAN不对——PC被插到了VLAN 20的口上而它的网关在VLAN 10。端口是up的MAC表也是正常的二层看起来没毛病但流量根本进不了正确的广播域。最后改掉Access口的VLAN归属立刻恢复通信。你看如果不理解VLAN隔离广播域这个原理面对这种故障大概率只能反复重启电脑。我在带实验和查障时最常提醒自己的一句话是交换机的本质是维护一张谁在哪个口的表再在这张表之上叠加VLAN隔离和STP防环。把这条主线抓牢不管网络规模多大一层一层剥开问题总能定位到具体环节。
返回列表