ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RRPP快速环网保护协议原理与配置:从STP对比到实战排障

RRPP快速环网保护协议原理与配置:从STP对比到实战排障 1. RRPP到底是什么从备用轮胎到自动切换车道先说说我第一次接触RRPP时的场景。某单位的园区网络改造核心层是两台交换机做双机汇聚层是好几台设备串成了一个环。改造前跑的是STP生成树平时没事但只要环上某条光纤被施工挖断全网少则几十秒、多则一两分钟才能恢复通信每次断网用户都炸锅。后来我们把核心到汇聚的组网改成了RRPP环网故障恢复时间从泡杯茶都还断着缩到了鼠标点一下的工夫。RRPP全称Rapid Ring Protection Protocol快速环网保护协议是国内一家主流的网络设备厂商提出的以太网环网冗余协议。它解决的是一类非常典型的组网问题为了保证可靠性很多园区、机房、工厂的接入层和汇聚层设备喜欢组成环形拓扑——物理上是个环这样任何一根线断了数据还能从另一头绕过去。但物理上能绕和逻辑上敢绕是两码事。如果没有协议管理这个环数据帧会在环里无限转发广播风暴分分钟打满所有端口整张网络直接瘫痪。所以在逻辑上必须砍断这个环让流量走一条唯一路径同时又要能在物理链路故障时迅速找到替代路径。RRPP就是干这个活的。和传统STP/RSTP相比RRPP最大的特点是简单、快、可控。STP家族需要全网设备一起计算生成树选举根桥、指定端口、阻塞端口逻辑复杂收敛速度也受网络规模影响RRPP则是一个环一个主节点说了算主节点周期性地向环上发检测报文用自己的状态机判断环是通还是断通了就阻塞一个端口防止成环断了就放开端口让流量绕行。整个过程没有复杂的选举故障感知和切换动作非常直接收敛时间能做到亚秒级甚至几百毫秒以内。对于园区接入、工业控制网络这类对成本敏感、对收敛时间有要求但又不需要数据中心级别高可用性的场景RRPP是非常务实的选择。这篇内容适合谁看如果你正在维护一张环网天天被断网后半天才恢复的问题折磨或者你的网络里全是某厂商的交换机想找个比STP更快的冗余方案又或者你刚接触RRPP被主环子环控制VLAN数据VLAN主节点传输节点这些词绕得头晕——这篇内容就是按你需要的顺序写的。我会从协议的核心机制讲到具体配置命令再到我踩过的坑和排查思路尽量让你看完能直接上手。2. 核心机制拆解环网是怎么被管住的2.1 从广播风暴说起为什么环必须被逻辑砍断要理解RRPP得先理解环网最原始的问题——广播风暴。假设一个环上有四台交换机没有任何冗余协议。一台主机发出一个广播帧交换机A收到后从一个端口转发出去经过B、C、D走一圈又回到AA一看这不是我发出去的帧吗不认识按广播处理于是又从一个端口转发出去……这个帧在环上无限循环而且每一台交换机都在转发同一个帧的多个副本很快所有端口都被占满正常业务全部瘫痪。生活中的类比是这样的一条单行环形赛道如果所有车都只准沿一个方向开赛道上是不会堵的。但如果某处开了个口子允许车辆双向行驶那就会在某个路口绕成死结所有车都堵在里面。环网协议做的事情就是物理上明明有环逻辑上必须人为制造一个断点让帧沿一条确定路径走断了再去切换备用路径。STP的做法是选举出一棵无环树阻塞某些冗余端口RRPP的做法更简单粗暴——整个环指定一个主节点主节点把其中一个端口永久阻塞掉称为备用端口让环从逻辑上变成一条链。就这么一个阻塞点把环砍断了。2.2 RRPP的主角团主节点、传输节点、边缘节点RRPP环上有几个角色理解它们的分工配置就不会乱。主节点Master Node每个环必须且只能有一个主节点。它负责周期性地发出Hello报文检测环的完整性并根据检测结果决定是阻塞还是放开自己的备用端口。主节点是环网的大脑和决策者。传输节点Transit Node环上除了主节点之外的其他节点统称传输节点。它们不主动决策只是转发Hello报文、学习MAC地址并执行主节点下发的状态切换指令。边缘节点Edge Node和辅助边缘节点Assistant Edge Node这两个角色出现在多环组网主环子环中位于主环和子环的相交处。子环的边缘节点负责把子环的状态汇报给主环辅助边缘节点则配合完成状态确认。可以理解为子环的接线员和复核员。环网还分主环和子环直接参与核心冗余的环叫主环挂接在主环上的下级环叫子环。子环故障时不大会影响主环实现分层保护。多环组网的好处是把故障隔离在一个局部避免全网状态联动这在设备数量多、组网复杂的场景里非常实用。2.3 控制VLAN和数据VLAN协议报文和业务报文分道扬镳RRPP有一个很容易被忽略但非常关键的设计——把协议报文和业务报文分成两个通道。控制VLAN专门用来传输RRPP的Hello报文和故障通知报文。它不能跑任何业务流量是RRPP的专线。配置时所有RRPP环成员设备的控制VLAN必须一致否则协议报文根本不通。数据VLAN承载真正的业务流量。一个数据VLAN可以同时属于多个RRPP域后面会讲域的配置也可以被多个环共享。为什么非要分开想想看如果控制报文和业务报文混在同一个VLAN里大流量冲击可能导致协议报文被延迟、丢弃主节点误判环状态该切换的时候不切换不该切换的时候瞎切换那冗余保护就成了定时炸弹。分开之后控制VLAN里的流量非常小报文往返时间稳定主节点的健康检测才可靠。2.4 主节点的工作循环探测、判断、切换RRPP主节点的核心逻辑可以概括成一个循环主节点周期性地从主端口发出Hello报文报文绕着环走一圈。如果环是完整的Hello报文会从另一个方向回到主节点的备用端口。主节点收到自己的Hello报文判定环状态为Complete完整此时备用端口保持阻塞环的逻辑拓扑是一条无环链。如果环上某处链路断了Hello报文无法绕回来主节点在Fail Timer超时后仍收不到自己的Hello报文判定环状态为Fail故障立即放开备用端口让流量从另一个方向绕行网络恢复通信。链路修复后Hello报文重新能够绕回主节点主节点重新判定环为Complete再次阻塞备用端口并发送刷新报文通知全网设备清除MAC地址表和ARP表让流量切回最优路径。这个机制里两个时间参数决定了故障感知和切换的速度Hello Timer发送Hello报文的周期默认通常是1秒和Fail Timer主节点等待Hello报文返回的超时时间通常设置为Hello Timer的3倍。实际组网中故障感知时间约等于Fail Timer加上设备刷新MAC地址表的时间整体收敛基本在几百毫秒到一两秒之间。相比STP的几十秒这个速度已经有质的提升。2.5 与STP的对比为什么RRPP更快STP慢在哪里因为它要全网协商。某个端口DOWN了以后所有交换机都要重新计算生成树选举新的根桥、确定新的端口角色这个过程中还有Forwarding Delay转发延迟强制等待防止临时环路。设备越多、网络越复杂收敛越慢。而RRPP把决策权集中在主节点一个点上其他节点只是被动执行省掉了全网协商的时间自然快得多。另外RRPP在故障恢复时的处理也更干净。STP拓扑变更时要靠TCN报文逐台通知容易丢失或延迟RRPP则由主节点统一发送刷新报文一次性通知所有环上节点清MAC清ARP机制简单漏刷的概率低。不过RRPP也有它的局限性。最明显的一点是它主要服务于环型拓扑如果你的组网是复杂的网状结构RRPP就不太合适了。此外RRPP是某厂商的私有协议不同厂商设备之间无法直接互通除非对方也支持兼容模式这在多厂商混合组网的环境里是个需要注意的约束。所以选型时要先想清楚你的组网是不是环设备是不是同一厂商如果是RRPP是个性价比很高的选择。3. 实操配置从拓扑规划到命令行落地3.1 先画拓扑再动手敲命令很多人配置RRPP失败问题往往不在命令本身而在拓扑理解错了。以典型的单环接入子环举例核心交换机A --- 汇聚交换机B --- 接入交换机C | | | 核心交换机D --- 汇聚交换机E --- 接入交换机F这个拓扑里四台设备A、B、E、D构成一个主环两台接入设备C、F各自与B和E相连跨越主环构成一个子环。主环负责汇聚层冗余子环负责接入层冗余。设备角色分配主环主节点核心交换机AMaster主环传输节点B、E、D子环边缘节点B和E子环与主环相交的两台设备子环主节点接入交换机CMaster子环传输节点F画清楚这个拓扑图标注好每台设备的角色、端口、VLAN划分配置时才不会张冠李戴。我见过有人把主环的主节点配置到了传输节点上导致主环的Hello报文没人发整个环直接失效排查了半天才发现是角色分配错了。3.2 单环配置的完整步骤以三台设备组成一个单环为例控制VLAN用VLAN 10数据VLAN用VLAN 100-200主节点为设备A传输节点为B、C。第一步创建控制VLAN和数据VLANvlan batch 10 100 to 200这里需要注意在较早的软件版本里控制VLAN必须手工创建并放通到环端口协议报文才能转发。后来的一些版本里RRPP配置会自动处理但为了兼容性和排障方便我习惯还是手动建好。第二步在每台设备上配置RRPP域。RRPP的所有配置都在域下进行域是一个独立的管理范围不同域之间互不干扰。设备A主节点配置rrpp domain 1 control-vlan 10 protected-vlan 100 to 200 ring 1 node-mode master primary-port GigabitEthernet0/0/1 secondary-port GigabitEthernet0/0/2 ring 1 enable设备B、C传输节点配置rrpp domain 1 control-vlan 10 protected-vlan 100 to 200 ring 1 node-mode transit primary-port GigabitEthernet0/0/1 secondary-port GigabitEthernet0/0/2 ring 1 enable这几条命令的含义我先解释清楚domain 1进入RRPP域1。如果网络里有多个环可以分成多个域独立管理。control-vlan 10指定控制VLAN。protected-vlan 100 to 200指定受保护的VLAN也就是真正跑业务、需要被冗余保护的VLAN。ring 1 node-mode master/transit指定环1的角色。主环必须且只能有一个master其余都是transit。primary-port和secondary-port指定环上的两个端口即主端口和备用端口。对主节点而言备用端口就是正常情况下阻塞的那个端口。ring 1 enable激活环1。配置了角色但没激活RRPP不生效。第三步确认状态。配置完成后用查看命令确认主节点状态display rrpp brief display rrpp verbose ring 1正常时主节点的备用端口状态应该显示为Blocking阻塞环状态为Complete。如果主节点显示Fail说明Hello报文绕不回主节点需要检查链路和端口配置。提示主节点的备用端口是RRPP协议自动控制和切换的不要在接口下手动配置STP或端口阻塞否则会和RRPP冲突导致状态混乱。RRPP和STP在某些场景下可以配合但需要非常小心地规划新手建议直接关掉相关端口的STP再启用RRPP。3.3 主环子环的配置差异多环配置时关键点是边缘节点和辅助边缘节点的配置。回到前面那个拓扑接入交换机C和F组成的子环跨越了主环设备B和EB和E就成了子环的边缘节点。子环主节点C的配置和单环类似只是环编号不同rrpp domain 1 control-vlan 10 protected-vlan 100 to 200 ring 2 node-mode master primary-port GigabitEthernet0/0/1 secondary-port GigabitEthernet0/0/2 ring 2 enable主环设备B上要增加子环相关的配置rrpp domain 1 ring 2 node-mode edge common-port GigabitEthernet0/0/3 ring 2 enable主环设备E上配置为辅助边缘节点rrpp domain 1 ring 2 node-mode assistant-edge common-port GigabitEthernet0/0/3 ring 2 enableedge和assistant-edge的区别在于边缘节点负责转发子环的Hello报文到主环上辅助边缘节点配合确认子环状态。这两个角色必须配对存在如果只配了一端子环状态就无法正确上报主环也无法感知子环故障。多环配置我踩过的最大的坑是common-port指定错误。这个端口是边缘节点上既属于主环又连接子环的端口如果选错主环的Hello报文会误入子环或者子环的状态报文穿不过主环整个域的协议状态全乱。配置前一定要确认好哪个端口是两个环共用的在拓扑图上标出来再动手。3.4 Timer参数怎么调别乱动但要知道怎么动RRPP有两个timerHello Timer和Fail Timer。不同厂商设备上的默认值略有不同常见的是Hello 1秒Fail 3秒。大多数场景下默认值就够用了。什么时候需要调如果环上设备特别多比如超过20台或者设备转发性能较弱Hello报文绕一圈的时间可能接近1秒这时候主节点可能在正常运行时就误判Fail导致频繁切换。可以把Hello Timer适当调大到2秒Fail Timer相应调整到6秒保持3倍关系。反过来如果业务对切换时间极其敏感可以把Hello调到500毫秒Fail调到1.5秒但前提是设备性能和链路质量能撑住否则频繁误判更糟糕。注意Fail Timer的设置原则是大于等于Hello Timer的3倍。如果设置得太接近网络偶发拥塞导致Hello报文延迟到达时主节点就会误判产生无意义的切换。切换本身会触发全网刷新MAC地址表等于一次小型的网络震荡尽量避免。3.5 验证配置有效性的三板斧配置完RRPP不能只看状态显示Complete就以为万事大吉。我每次做验收都要做三件事拔线测试在环上某两台设备之间把光纤拔掉观察主节点状态是否在Fail Timer超时后变为Fail备用端口是否放开业务是否在预期时间内恢复。这一步验证的是故障切换功能。插回测试把光纤插回去观察主节点是否重新收到Hello报文环状态是否恢复Complete备用端口是否重新阻塞全网MAC地址表是否刷新。这一步验证的是故障恢复功能。双点断纤测试同时拔掉环上两处光纤观察网络是否出现广播风暴。在只有单环且没有其他保护机制的情况下双点故障必然导致环被切成两段RRPP无法为两段同时提供冗余。这个测试的意义是让你对最坏情况有心理预期也提醒你评估是否需要部署其他链路备份。这三板斧做完RRPP才算真正验收通过。我遇到过不少配完了看起来没问题实际拔线就翻车的情况基本都是VLAN放通不全或者端口角色配错靠拔线测试能暴露出来。4. 踩坑实录那些年我在RRPP上翻过的车4.1 双点故障引发的广播风暴我第一次在现网部署RRPP时自认为配置无误验收也做了单点拔线测试。结果后来现场施工某段管道里两根光缆同时被挖断全网瞬间广播风暴所有业务中断。当时第一反应是RRPP失效了但排查下来发现不是配置问题而是任何单环冗余协议都有的天然局限双点故障会把环切成两个互不相连的片段每个片段都不构成环主节点无法感知远端哪个片段的状态也就无法为两个片段同时提供环的保护。排查过程比较曲折。当时用display命令查主节点状态发现已经变成Fail但广播风暴依然存在。后来才想明白RRPP主节点放开备用端口后两个断点之间的那一段链路是没有逻辑断点的帧在两个断点之间绕圈就形成了风暴。这不是RRPP能解决的任何环协议都解决不了。这类问题怎么规避两条路。第一在物理上尽量避免单管道承载多根关键光缆把主用和备用光缆分不同路由敷设哪怕不是完全物理隔离也能降低双点故障概率。第二如果业务重要性很高单环冗余不够需要在网络架构上增加额外的物理链路和协议比如把环升级为双归接入到两台核心再配合其他冗余机制。作为工程师至少要能在方案设计阶段就想清楚单环保护的最大盲区在哪里不要等出了问题才措手不及。4.2 控制VLAN不一致导致的假活状态有次做跨机房项目两台设备分别由不同工程师配置结果控制VLAN一个用了10一个用了20。配置完以后主节点显示环状态Complete备用端口阻塞正常看起来一切正常。但拔线测试时发现无论怎么拔主节点始终收不到Hello报文状态一直是Fail备用端口一直放开——两台设备的RRPP根本就没对上话。为什么状态会显示Complete因为主节点发出的Hello报文在自己的控制VLAN里绕了一圈从备用端口收了回来——但它只在自己的设备上绕了一圈根本没有经过对端设备。这个假Complete非常迷惑人不拔线根本发现不了。排查时我在主节点上抓包发现Hello报文确实回来了但检查对端设备的RRPP状态发现对端根本不知道有环这回事。逐个核对配置后发现控制VLAN不一致。从那以后我每次配置RRPP都强制要求同一域内所有设备的控制VLAN必须一模一样并且在交付文档里单独列出控制VLAN核对表逐台设备打勾确认。4.3 数据VLAN漏配导致业务在切换后中断RRPP保护的是数据VLAN。如果你新建了一个业务VLAN忘了把它加进protected-vlan列表里平时环是完整的业务正常一旦发生故障切换这个VLAN的流量不会跟着新的拓扑走业务就断了。而且这个断法很隐蔽——因为RRPP本身状态是正常的切换正常执行了但保护范围里根本没有这个VLAN。遇到过一次很典型的案例用户后来加了一套监控系统划分了新的VLAN 300结果忘了同步RRPP配置。过了一阵环上光缆被挖断其他业务都恢复了唯独监控全部离线。排查半天才想起来新VLAN没有加进保护列表。从那以后我给自己定了一条规矩任何新增业务VLAN时第一件事就是检查RRPP的protected-vlan配置是否需要同步更新。这个检查应该写进变更流程里而不只是靠个人记性。4.4 版本差异导致的兼容性问题RRPP在同一个厂商的不同软件版本上行为可能有细微差异。早期版本和后期版本对ring enable的触发条件、控制VLAN是否自动放通、某些状态字段的显示含义都不完全一致。有一次做设备替换新设备软件版本比旧设备高了好几个大版本替换后RRPP状态时好时坏抓包看了半天也没看出毛病。最后是翻版本发布说明才看到该版本对RRPP的控制VLAN处理逻辑做了调整需要在配置里额外指定一个参数才能和旧版本兼容。这类问题没有捷径只能靠两点第一尽量保持同一网络内设备软件版本一致至少保证RRPP相关特性在同一版本基线第二做设备替换或版本升级前先读升级说明和兼容性列表不要想当然觉得协议都一样版本肯定兼容。4.5 主节点宕机单点风险要靠共识机制兜底RRPP的设计是一个环一个主节点主节点挂了怎么办如果主节点物理宕机整个环就失去了决策者即使链路完好也不会自动恢复冗余状态。在单主节点方案里这是最大的单点风险。解决思路是部署RRPP的共识特性某些厂商称为RRPP共识或GR-like机制让环上的其他节点在主节点故障时能够协商选出新的主节点或者通过堆叠/集群技术把两台设备虚拟成一台从设备侧消除单点。但共识机制本身配置更复杂状态机更多不是每个场景都值得上。对一般园区接入环来说主节点放在核心层本身已经有堆叠双机保障RRPP主节点落在堆叠系统上就基本没有单点问题了。需要提醒的是别把RRPP和堆叠混为一谈。堆叠解决的是设备级冗余两台设备像一个逻辑设备RRPP解决的是链路级冗余环上单点链路故障自动切换。两者可以叠加使用但不能互相替代。5. 总结排查思路一张速查表排查RRPP问题时核心思路是先看协议状态再看配置一致性最后抓包定位。我按这个顺序整理了一个速查表大家直接照着查就行症状可能原因排查步骤解决方法主节点状态一直为Fail环上有链路断开/端口DOWN查看所有环端口物理状态逐段Ping测试连通性修复链路故障或更换光模块主节点状态为Fail但物理链路全通控制VLAN不一致/端口未放通逐台设备核对control-vlan和端口VLAN修正配置使所有设备一致主节点显示Complete但拔线不切换备用端口被手动阻塞/STP干扰查看备用端口配置检查是否有STP阻塞取消手动配置关闭相关端口STP切换后部分VLAN业务中断数据VLAN漏配protected-vlan检查业务VLAN是否在受保护列表内补充新增VLAN到RRPP保护范围环上设备频繁出现状态抖动Hello Timer设置过短/链路质量差查看端口错误计数和丢包统计调整Timer参数排查链路质量问题主环子环相互影响common-port配置错误/边缘节点配对错误核对边缘节点与辅助边缘节点是否成对按拓扑图重新规划端口角色设备替换后RRPP失效软件版本不兼容查看版本发布说明中的兼容性说明升级到同版本或按说明补充配置这张表是我自己排查RRPP问题时反复用到的检查单。实际工作中很多问题并不是单一原因可能是配置、物理链路、版本三者叠加。遇到疑难杂症我的习惯是先把物理层确认干净光功率、端口错误计数、收发光状态再逐一核对配置最后才动抓包工具。RRPP报文本身不复杂抓包看Hello报文能不能绕回主节点、刷新报文有没有发出基本就能定位绝大部分问题。6. 一些个人的体会RRPP这个协议从技术难度上讲不算高深但它非常考验工程师对组网的理解和对细节的把控。配置命令就那几条真正区分水平的在于你能不能提前想到双点故障的盲区会不会在新增VLAN时记得同步保护列表知不知道控制VLAN不一致会造成假活状态。这些经验都不是书上看来的全是项目现场一个个坑踩出来的。最后再分享一个小技巧。很多人在配RRPP时只盯着主节点觉得传输节点配置简单无所谓。实际上传输节点如果端口角色写反了primary和secondary互换环的状态检测一样会乱。每次配完我习惯把所有设备的配置导出后grep一遍端口角色和拓扑图逐一比对这样能避免绝大部分低级失误。别嫌麻烦现网事故往往就出在觉得这里肯定不会错的地方。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进