前两天有人问我,eNSP里VRRP和STP该怎么放在一张拓扑里练,网上的教程要么单讲VRRP,要么单讲STP,合在一起就不知道怎么搭。这个问题我太有感触了。练协议就像练武功,单个招式都会,一上实战就乱。VRRP是网关冗余,STP是二层防环,真实园区网里几乎永远同时出现。这篇就按一个完整的双核心冗余场景从头到尾走一遍,包含拓扑规划、原理回顾、完整配置、故障演练、排错速查,所有命令都在eNSP里实测可跑。适合刚学数通、准备网工认证、或者协议忘得差不多想捡回来的人。
1. 实验需求与拓扑规划:先把设备摆明白
1.1 为什么VRRP和STP要放到同一张拓扑里练
先说需求来源。很多教程在讲VRRP时,只有两台交换机加一台PC,看起来很简单;讲STP的时候,又是另一套拓扑。但真实项目里,这两个协议是同时起作用的:网络要有网关冗余,就必然有两台核心设备同时接在二层网络上;既然两台核心都要接接入交换机,物理链路就一定会出现环路,而出现环路就必须让STP挡掉多余的路径。
把两个协议拆开练的问题在于,你永远看不到它们之间的互相影响。比如VRRP的心跳报文走的是二层组播,如果中间路径被STP阻塞了,主备状态会不会出问题?再比如STP的根桥和VRRP的Master要不要选在同一台设备上?这些只有在完整拓扑里才会暴露出来。所以这次实验的核心不是“会敲命令”,而是让读者明白两个协议是怎么在同一个网络里协作的。
1.2 拓扑结构与VLAN/网关规划表
我设计的拓扑是这样的:两台核心交换机SW1、SW2,两台接入交换机SW3、SW4。SW1和SW2之间有一条互联链路,SW3、SW4各自双上联到SW1和SW2,物理上形成两个环路。PC1接在SW3下,PC2接在SW4下,分属VLAN 10和VLAN 20。为了演示负载分担,VLAN 10的VRRP主设备选SW1,VLAN 20的VRRP主设备选SW2;STP根桥选SW1。
| 设备 | 角色 | 互联接口 | 备注 |
|---|---|---|---|
| SW1 | 核心A | GE0/0/1连SW2,GE0/0/2连SW3,GE0/0/3连SW4 | STP根桥,VLAN10的VRRP Master |
| SW2 | 核心B | GE0/0/1连SW1,GE0/0/2连SW3,GE0/0/3连SW4 | VRRP优先级更高的是VLAN20 |
| SW3 | 接入一 | GE0/0/1连SW1,GE0/0/2连SW2,GE0/0/3接PC1 | PC1划入VLAN10 |
| SW4 | 接入二 | GE0/0/1连SW1,GE0/0/2连SW2,GE0/0/3接PC2 | PC2划入VLAN20 |
地址规划直接抄这张表:
| VLAN | 网段 | 虚拟网关 | SW1 VLANIF | SW2 VLANIF | 终端 |
|---|---|---|---|---|---|
| VLAN 10 | 192.168.10.0/24 | 192.168.10.254 | 192.168.10.251 | 192.168.10.252 | PC1: 192.168.10.10 |
| VLAN 20 | 192.168.20.0/24 | 192.168.20.254 | 192.168.20.251 | 192.168.20.252 | PC2: 192.168.20.10 |
这里特别注意:两台核心的VLANIF真实地址不能配成虚拟IP,否则就成了虚拟IP拥有者,VRRP的优先级逻辑会变成255,负载分担效果就不对了。
1.3 eNSP环境准备与设备选型建议
eNSP版本不用太纠结,近几年的版本都行。设备选型建议:核心交换机选S5700,接入交换机也用S5700,没有额外差别;两台接入如果型号不同也没关系,不影响二层功能。所有PC用基础PC型号,配置静态IP。
有一点必须提醒:eNSP里S5700默认工作模式是MSTP,不是经典STP,也不是RSTP。如果你在配置时不主动把模式改成RSTP,后续查看STP端口角色时容易和自己脑子里的模型对不上。所以实验第一步建议先把所有设备统一改成RSTP。另外,eNSP启动四个交换机后需要一点时间,不要刚启动就急着敲配置,等接口状态稳定再操作,否则容易出现端口还没UP导致VRRP初始化的假象。
2. 核心原理解读:VRRP和STP各自管什么
2.1 VRRP的虚拟IP、状态机与主备切换
VRRP全称虚拟路由冗余协议,核心思想是一组设备共享同一个虚拟IP,终端把这个虚拟IP当网关。正常时只有Master响应终端的ARP请求,Backup只默默收Master周期发送的VRRP通告报文。通告报文目的组播地址是224.0.0.18,IP协议号112,默认1秒发一次。
判断主备切换的机制很简单:Backup连续3个通告周期没收到Master的报文,也就是3秒,它就会认为Master挂了,自己升为Master。升级之后,虚拟IP对应的虚拟MAC也一起接管,终端不需要任何感知。比如虚拟MAC是0000-5e00-01xx,xx就是VRID,VRID 10对应0a,这样终端ARP缓存的网关MAC会自动通过新报文刷新。
优先级范围是0到255,默认100。两台设备优先级相同时,接口IP地址大的设备优先成为Master,但这个细节不建议依赖,练习时明确配置优先级更直观。抢占模式默认开启,优先级高的设备恢复后会重新夺回Master;为了防止主备反复横跳,可以给抢占加一个延迟时间。
在华为设备上写VRRP,必须把VRID和虚拟IP配置到VLANIF接口下,同一个VRID内的虚拟IP在所有设备上必须一致,否则两台设备各说各话,根本组不成一个虚拟路由器。这个点很多人第一次做容易踩,后面排错部分还会提到。
2.2 STP的BPDU、根桥选举与端口角色
STP解决的是二层环路问题。没有STP时,交换网络出现物理环路会引发广播风暴、MAC地址抖动,交换机CPU被打满,整个网络瘫痪。STP的解决思路是让交换机之间交换BPDU报文,也就是桥协议数据单元,通过比较选举出一棵无环的树。
BPDU里有几个关键字段:根桥ID、根路径开销、发送者桥ID、发送者端口ID。选举过程分三层。第一层,全网络优先级最小的桥成为根桥,优先级一样时MAC地址小的胜出。第二层,每个非根桥挑一条到根桥开销最小的路径,对应的本地端口叫根端口。第三层,每条链路上再比较发送者,离根更近的那台交换机的端口成为指定端口;剩下既不是根端口也不是指定端口的端口,就进入阻塞状态。
现代网络一般不用经典STP,而是RSTP。RSTP把端口角色细分为根端口、指定端口、Alternate端口和Backup端口,状态收敛从几十秒缩短到秒级。阻塞端口在RSTP里叫Discarding状态,术语上要能区分。配置层面只是一个stp mode rstp的差别,但理解RSTP的快速收敛机制,对排障很有帮助。
2.3 两个协议配合时的协同点与常见误区
一个很常见的误区是担心STP把核心交换机之间的互联链路阻塞掉,导致VRRP心跳不通。实际上STP选路有严格逻辑,根桥上的所有端口都是指定端口,如果核心A选了STP根桥,核心A到核心B的互联端口一定是指定端口,不会被阻塞;真正被阻塞的是接入交换机到核心B的上联口。所以VRRP通告报文能正常走核心间链路。
另一个协同点是根桥位置。如果VRRP的Master和STP的根桥不在同一台设备,终端流量到达网关后,还要再从根桥路径绕一圈,转发效率变差。比如VLAN 10的Master在SW1,根桥却是SW2,PC的流量先上到SW1网关,访问外网或跨VLAN时还要经过SW2,路径浪费。所以练习规划时就让SW1既是STP根桥又是VLAN10的Master,SW2承担VLAN20的Master,两台都不闲着。
还有一个容易忽视的点:VRRP心跳报文属于二层组播,它依赖的是VLAN广播域的通畅性。两台核心之间的Trunk必须放通VRRP所在的所有VLAN,如果只放通了业务VLAN忘了放通VLAN10,结果就是VRRP组10的两个设备互不可见,全部认为自己应该当Master,出现双主脑裂。
3. 完整配置过程:从VLAN到VRRP一次打通
3.1 基础二层配置:VLAN与Trunk链路
配置顺序建议从底层到上层。先创建VLAN,再放通Trunk,再配STP,最后配VRRP,这样后面出问题时排查层次清晰。
SW1上的基础配置:
system-view sysname SW1 vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass vlan 10 20SW2、SW3、SW4的Trunk配置几乎一样,区别只是接口编号。这里提醒一个细节:核心与接入之间的Trunk,仅放行需要的VLAN就够了,不要图方便写成port trunk allow-pass vlan all。练习里没问题,但真实环境中Trunk上意外放行VLAN会扩大广播域,甚至把环路延伸到不该有环的地方。
SW3和SW4上连接PC的接口配置为Access并划入对应VLAN。以SW3为例:
vlan batch 10 20 interface GigabitEthernet0/0/3 port link-type access port default vlan 10 stp edged-port enable我特意在这里把stp edged-port enable一起配了。这个命令的意思是把接入PC的端口声明为边缘端口,交换机一UP就直接进入转发状态,不用等STP收敛。PC终端不会发BPDU,所以这样配置安全且高效。SW4的GE0/0/3对应VLAN 20,命令格式完全一样。
3.2 STP配置:切换RSTP、指定根桥、开启保护
四台设备都进入系统视图,执行:
stp mode rstp然后分别在SW1和SW2上设置根桥优先级:
stp priority 4096stp priority 8192优先级越小越容易成为根桥,所以SW1是根桥,SW2是备份根桥。SW3、SW4维持默认优先级32768即可。如果不想记优先级数值,也可以在SW1上直接用stp root primary,在SW2上用stp root secondary,效果等价,但练习里建议用优先级,方便理解选举逻辑。
在接入交换机上全局开启BPDU保护:
stp bpdu-protection有了这个保护,如果边缘端口意外收到BPDU报文,交换机会把端口关闭而不是让该端口参与STP计算,防止有人私接交换机导致环路。注意这句话的意思是一旦触发,端口状态会变成Down,需要手动restart或重新undo shutdown恢复,不是自动恢复。
3.3 VRRP配置:虚拟网关与负载分担
核心交换机上先给VLANIF配真实IP,再创建VRRP组。SW1这样配置:
interface Vlanif10 ip address 192.168.10.251 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.10.254 vrrp vrid 10 priority 120 vrrp vrid 10 preempt-mode timer delay 5 interface Vlanif20 ip address 192.168.20.251 255.255.255.0 vrrp vrid 20 virtual-ip 192.168.20.254SW2配置要反过来,让VLAN 20成为它的强项:
interface Vlanif10 ip address 192.168.10.252 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.10.254 interface Vlanif20 ip address 192.168.20.252 255.255.255.0 vrrp vrid 20 virtual-ip 192.168.20.254 vrrp vrid 20 priority 120 vrrp vrid 20 preempt-mode timer delay 5解释一下为什么加preempt-mode timer delay 5。抢占默认是立即生效的,如果SW1从故障中恢复,它会立刻把VLAN10的Master抢回来,而抢回来的瞬间会造成一次短时切换。加上5秒延迟,可以让网络先稳定一小段,避免主备来回抖动。在真实环境里,这个延迟时间根据业务重要性调整,一般3到10秒。
另外,如果实验拓扑有连接外网的出口链路,通常还会配合vrrp vrid 10 track interface监控上行口,上行口掉线时降低自身优先级主动让位。本实验没有配置出口,就不做这步,但要知道有这个机制。
3.4 终端PC配置与基础连通性验证
PC1和PC2在eNSP里直接双击配置:
PC1:IP 192.168.10.10,掩码255.255.255.0,网关192.168.10.254
PC2:IP 192.168.20.10,掩码255.255.255.0,网关192.168.20.254
配置完成后,先做一次基础验证。PC1 ping 网关192.168.10.254应该通,PC2 ping 网关192.168.20.254应该通。PC1再ping PC2的192.168.20.10,应该也通。因为PC1把报文发给虚拟网关,SW1作为VLAN10的Master查路由表,VLAN20是直连网段,直接转发。
如果PC1能ping通网关但ping不通PC2,优先检查两台核心的VLANIF是否都配了IP,以及两个VLAN是否都存在于所有Trunk的放行列表里。
4. 故障演练与验证方法:协议不是配完就完事
4.1 静态验证:看懂display vrrp和display stp输出
配置完成后先看静态状态。在SW1上执行:
display vrrp正常输出里,VRID 10的状态是Master,VRID 20的状态是Backup。在SW2上看,结果应该反过来。这个输出第一屏就够判断主备关系了,不需要看全量。如果显示Initialize,说明VLANIF没有UP,优先检查接口状态和IP配置。
再在SW3上执行:
display stp brief会看到两个上联口一个角色是ROOT、状态FORWARDING,另一个角色是ALTERNATE、状态DISCARDING。ALTERNATE端口就是被阻塞的备用路径,这是正常现象,不是故障。在SW4上看应该是同样的结果,因为根桥是SW1,两个接入交换机到根桥的最近路径都走SW1。
SW2上执行display stp可以看到自己的桥优先级是8192,根桥是SW1的桥ID。这四个命令组合起来,就能把“根桥在哪里、备份端口在哪里、主备状态对不对”全部确认。
4.2 故障模拟一:核心设备宕机后的VRRP切换
静态验证只是开头,真正的关键是让故障发生一次。我在实验里常用的办法是模拟SW1整台设备宕机:在SW1上把GE0/0/1、GE0/0/2、GE0/0/3全部shutdown,同时保持VLANIF10还在但底层接口全断,相当于核心设备从网络中消失。
操作前先在PC1上连续ping网关192.168.10.254,观察输出。然后执行shutdown操作,你会看到ping丢几个包,随后恢复。丢包数量取决于切换速度和ping间隔,通常不超过3到5个。因为SW2在连续3个通告周期没收到SW1的报文后,会升为Master并开始响应虚拟IP,整个过程3秒左右。
此时再到SW2上执行display vrrp,VRID 10已经变成Master。这就是VRRP的价值:终端只是短暂丢包,不需要改任何配置,网关自动由另一台设备接管。
恢复SW1的接口后,由于配置了5秒抢占延迟,需要等约5秒,SW1会重新抢回VLAN10的Master。如果没有延迟,恢复瞬间可能出现一次不必要的切换。实操中你会发现,这个延迟配置对网络稳定性非常重要。
如果想看得更细,可以在SW2的GE0/0/1上开启抓包,观察VRRP组播224.0.0.18的报文。正常时1秒一个,Master故障后SW2发不出周期性报文?不对,应该是SW2作为Backup只收不发,故障切换后SW2开始周期性发送VRRP通告。这个抓包过程能直观看到协议时间线,比单纯看命令输出有趣得多。
4.3 故障模拟二:链路中断后的STP收敛
STP的验证和网络环路相关。在SW3上,当前根端口是连接SW1的GE0/0/1,备用阻塞端口是连接SW2的GE0/0/2。现在模拟上联链路中断,在SW3上执行:
interface GigabitEthernet0/0/1 shutdown此时SW3到根桥的路径断掉,原本阻塞的GE0/0/2会在RSTP机制下迅速从Discarding转为Forwarding,PC1的流量改从SW2上联出去。PC1持续ping网关,你会发现丢包时间比VRRP切换更短,RSTP收敛通常在秒级完成。
恢复GE0/0/1后,RSTP会重新计算,根端口切回GE0/0/1,GE0/0/2回到ALTERNATE状态。注意:如果用的是经典STP,这个收敛过程可能要几十秒,这也是我强烈建议实验里用RSTP的原因。体验完RSTP之后,你可以自己把模式改成stp mode stp对比一下,感受收敛时间的差异,这对理解802.1w改进点很有帮助。
这个实验环节容易忽略的是,故障模拟要交替进行,不能只测一次。建议把VRRP切换和STP收敛拆成两次独立演练,每次都先确认基线状态,再制造故障,最后观察恢复,形成习惯。这样才能真正形成肌肉记忆。
5. 常见问题与排错速查:我在eNSP里踩过的坑
5.1 VRRP状态异常排查
实验里最容易碰到的坑集中在VRRP上。我把典型现象和排查思路整理成了一张表:
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| display vrrp显示Initialize | VLANIF接口没有UP | 检查VLANIF是否配置IP,底层物理口是否shutdown |
| 两台设备都是Master | VRRP心跳报文不通 | 检查核心间Trunk是否放通对应VLAN,STP是否阻塞了唯一路径 |
| 虚拟IP ping不通 | 终端网关配置错误 | 检查PC网关、VLAN归属,确认VRID与虚拟IP在同一广播域一致 |
| 配置了priority但主备没按预期 | 配置写错了VRID | display vrrp看PriorityRun和PriorityConfig是否一致 |
| 恢复后主备频繁切换 | 抢占立即生效 | 配置preempt-mode timer delay,通常3到5秒 |
第一个场景我实测遇到最多。很多时候是模拟器刚启动,交换机接口还没完全UP,你急着敲完配置一看VRRP是Initialize,以为配置错了,其实等十几秒接口起来就好了。
双主的问题更要重视。有一次我把SW1和SW2之间互联口的port trunk allow-pass vlan 10 20敲成了只放行VLAN10,结果VLAN20的VRRP组两边互相看不见,两个设备的VRID 20同时变Master。这种问题用display vrrp一眼能看到异常,但如果设备多、VRRP组多,就必须靠逐台查看和display current-configuration核对Trunk放行列表。
5.2 STP引发业务中断的排查
STP故障的表现通常不是“不通”,而是“意外不通”或者“时通时断”。最常见的一种是边缘端口没生效,PC接上去后等了几十秒才能上网。这是因为没有在接PC的端口上配置stp edged-port enable,端口参与了STP计算,收敛时间拖长了业务启动时间。
另一种相反的情况是边缘端口触发了BPDU保护,端口直接Down。此时在接口下执行display interface看错误计数,或display stp看端口状态,多半能看到BPDU保护相关记录。处理方法是确认端口确实只接终端,然后undo shutdown恢复端口。
还有一种隐藏较深的问题是STP根桥没按预期选出来。比如SW1明明配置了4096,display stp一看根桥却是SW2。原因通常是命令敲到了错误的设备上,或者配置没有保存模拟器重启丢了。遇到这种情况,逐台执行display stp确认本机优先级和根桥ID,比对桥优先级,问题马上暴露。
5.3 排错命令组合拳
遇到网络异常,我最建议按下面的顺序排查:底层物理状态、VLAN放行、STP计算、VRRP状态、终端网关。命令组合如下:
| 排查目的 | 命令 | 关键输出 |
|---|---|---|
| 查看接口状态 | display interface brief | 物理口UP还是DOWN |
| 查看VLAN端口归属 | display vlan | 端口是否在正确VLAN |
| 查看Trunk放行 | display port vlan | 哪些VLAN放行了 |
| 查看STP端口角色 | display stp brief | ROOT/ALTERNATE/DISCARDING |
| 查看STP根桥 | display stp | CIST Root和Bridge是否一致 |
| 查看VRRP状态 | display vrrp | State、PriorityRun |
| 查看完整配置 | display current-configuration | 确认命令没敲错设备 |
这一套下来,95%的实验问题都能定位。如果还查不出来,就抓包看ARP、VRRP和STP三种报文是否正常,基本没有死角。
我在实际练习里还养成了一个习惯:每次做完一个阶段就执行一次save,把配置保存到模拟器里。eNSP偶尔会崩,尤其是开了抓包之后,不保存配置重来一遍非常浪费时间。另外,所有配置修改都按设备、按功能模块分步骤做,不要一口气贴一大段,否则出问题根本不知道是哪个命令引起了连锁反应。
最后再分享一个我觉得最值得养成的操作习惯:协议配置完,一定要亲手制造故障,看它怎么恢复。我第一次做这个实验时,只看状态没实际断过线,自我感觉全通。后来真拿去排障才发现,自己连主备切换的预期和实际丢包数都对不上。只有真正拔过一次线、看过一次状态翻转、盯着屏幕等过一次收敛,你对VRRP和STP的理解才算落地。顺着这个实验做完,你还可以把RSTP换成MSTP,给不同VLAN划分多实例,再配合VRRP的负载分担,整个园区网的冗余骨架就算是彻底打通了。