Home
avatar

Purword

浅识RSTP

粗略的消化一下官方文档

RSTP

端口角色

  • root port 根端口 根端口和指定端口的作用同STP协议中定义
  • alternate port根端口备份端口 stp说过 会那计算出来的指定端口的配置BPDU和接口收到的BPDU进行对比。如果收到的更优,就被阻塞。 ——“设备将计算出的配置消息与角色待定端口(就是还没有确定为指定端口或者备用端口的端口)自己的配置消息(就是自己所收到的自己对端发来的BPDU)进行比较“ 但是这里是说 - Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。 问题:怎么区分出DP和AP的? 解答:DP和AP的选举没有半毛钱关系!
  • designated port指定端口 根端口和指定端口的作用同STP协议中定义
  • backup port ”- Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。“ 从图中可以看出来,S2有DP,S3没有DP;S2有BP,S3有AP。 问题这又是为什么? 文档中说了,RP和DP和STP的过程一样,那么S2的A接口计算出来的BPDU更优,所以当了DP,至于B接口,则是由于端口号更大而被阻塞;AB接口确定第一轮角色的同时,S3也确定了角色,被阻塞; 然后第二轮,也是最后一轮,由于AP是根端口的备份,所以我认为S2的B和S3的A都应该是AP,至少S3的A肯定是AP,因为S3没有DP,只有根端口。

现在分析为什么S2的B接口不能是AP? B接口肯定可以收到S2的A接口和S3的A接口发来的BPDU,经过比较S2的更优,然后触发BP的条件,”- Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。“所以S2的是BP,S3由于没有收到自己的,所以是AP。

rstp演示拓扑1

端口状态

  • discarding 不收发数据,不记录mac,不收发配置BPDU
  • learning 记录mac,不收发数据,不收发配置BPDU
  • forwarding 记录mac,收发数据,收发配置BPDU

注意:端口状态和端口角色是没有必然联系的!

怎么理解这句话? 没有必然联系,那有先后顺序吗

报文变化

  • 改变了 type固定为2。生成树向下兼容,但是无法向上兼容,stp识别到type是2,就会丢弃。
  • 增加了 Flags字段,使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU。

rstp-flag字段

配置BPDU的处理发生变化

  • 拓扑稳定后,配置BPDU报文的发送方式

    拓扑稳定后 非根桥设备无论是否接收到 根桥 传来的配置BPDU报文,非根桥设备仍然按照Hello Timer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。

  • 更短的BPDU超时计时

    如果一个端口在超时时间(超时时间=Hello Time × 3 × Timer Factor)内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。而不像STP那样需要先等待一个Max Age。

  • 处理次等BPDU

    当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身存储的RST BPDU与收到的RST BPDU进行比较。

    如果该端口存储的RST BPDU的优先级高于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身存储的RST BPDU。当上游设备收到下游设备回应的RST BPDU后,上游设备会根据收到的RST BPDU报文中相应的字段立即更新自己存储的RST BPDU。

    由此,RSTP处理次等BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快了拓扑收敛。

问题来了,如果端口存储的RST BPDU是攻击者伪造的一个呢?

快速收敛

  • Proposal/Agreement机制 ! 这种机制必须在点到点全双工链路上使用 ! 目的是使一个指定端口尽快进入Forwarding状态。

  • 根端口快速切换机制

如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口,进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。——这句话怎么解释?

这种产生新的根端口的过程会引发拓扑变化,在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。 一旦检测到拓扑发生变化,将进行如下处理:

  • 为本交换设备的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器值是Hello Time的两倍。 在这个时间内,清空所有端口上学习到的MAC地址。 同时,由非边缘指定端口和根端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。
  • 其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。 如此,网络中就会产生RST BPDU的泛洪。

问题:为什么要设置一个两倍hello的计时器?

  • 边缘端口的引入 在RSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。

边缘端口不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。

保护功能

BPDU保护

交换设备上启动了BPDU保护功能后,如果边缘端口收到RST BPDU,边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统。

问题:除对边缘端口的保护之外,BPDU保护还有别的吗

根保护

由于维护人员的==错误配置==或网络中的==恶意攻击==,网络中合法根桥有可能会收到==优先级更高的RST BPDU==,使得合法==根桥==失去根地位,从而引起网络拓扑结构的错误变动。这种不合法的拓扑变化,会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。

对于启用Root保护功能的指定端口,其端口角色只能保持为指定端口。一旦启用Root保护功能的指定端口收到优先级更高的RST BPDU时,端口状态将进入Discarding状态,不再转发报文。在经过一段时间(通常为两倍的Forward Delay),如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态。

问题:如果收到了一个更优的,但却不是攻击产生的,那不就耽误事了吗? AI回答:根一般是放在核心汇聚,一般不会轻易改变拓扑,而且如果真这种情况,只能说明工程师马虎。

==Root保护功能只能在指定端口上配置生效==。

环路保护

在运行RSTP协议的网络中,根端口和其他阻塞端口状态是依靠不断接收来自上游交换设备的RST BPDU维持。 当由于==链路拥塞==或者==单向链路故障==导致这些端口收不到来自上游交换设备的RST BPDU时,此时交换设备会重新选择根端口。原先的根端口会转变为指定端口,而原先的阻塞端口会迁移到转发状态,从而造成交换网络中可能产生环路。 问题:阻塞能理解,因为仍可通信,会环路;但是都单向故障了,本身就代表着故障,那怎么会环路呢?除非是单向故障又好了的情况 解答:

图3所示,当BP2-CP1之间的链路发生拥塞时,DeviceC由于根端口CP1在超时时间内收不到来自上游设备的BPDU报文,Alternate端口CP2放开转变成了根端口,根端口CP1转变成指定端口,从而形成了环路。

图3 链路发生拥塞情况拓扑的变化

为了防止以上情况发生,可部署环路保护功能。在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU报文时,则向网管发出通知信息(此时根端口会进入Discarding状态,角色切换为指定端口,而Alternate端口则会一直保持在阻塞状态(角色也会切换为指定端口),不转发报文,从而不会在网络中形成环路。直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。

上文的意思:同一时间完成1、向网管发送消息;2、RP从forwarding变为discarding,AP仍然discarding,但会变为DP。直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。

问题:“直到链路不再拥塞或单向链路故障恢复”,这段期间,device C不久处于断网状态吗?

环路保护功能只能在根端口或Alternate端口上配置生效。

防TC-BPDU攻击

交换设备在接收到TC BPDU报文后,会执行MAC地址表项和ARP表项的删除操作。

如果有人伪造TC BPDU报文恶意攻击交换设备时,交换设备短时间内会收到很多TC BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。

启用防TC-BPDU报文攻击功能后,在单位时间内,交换设备处理TC BPDU报文的次数可配置。 如果在单位时间内,交换设备在收到TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。 对于其他超出阈值的TC BPDU报文,定时器到期后设备只对其统一处理一次。 问题:统一只处理1次还是定时器到期一次就处理一次?

这样可以避免频繁的删除MAC地址表项和ARP表项,从而达到保护设备的目的。

RSTP技术细节

P/A机制

Proposal/Agreement机制,其目的是使一个指定端口尽快进入Forwarding状态。 如图1所示,根桥S1和S2之间新添加了一条链路。在当前状态下,S2的另外几个端口p2是Alternate端口,p3是指定端口且处于Forwarding状态,p4是边缘端口。

图1 Proposal/Agreement过程示意图

新链路连接成功后,P/A机制协商过程如下:

  1. p0和p1两个端口马上都先成为指定端口,发送RST BPDU。 问题:为什么先成为指定端口? 首先知道什么是DP,指定端口DP:指定桥向 本机或本网段 转发配置消息的端口。并且端口角色和状态没有必然联系。 然后知道有几种桥,共两种;根桥唯一,如果是根桥,那S1的接口直接是RP,如果是指定桥,那么就符合DP的定义,所以S1的接口还是DP。 这里我认为,新开一个接口,相当于重新选举端口角色,如果是重新选举端口角色,设备就会认为自己是根桥,就会让接口以DP的角色发送自己的BPDU给对方。

  2. S2的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。

  3. S1的p0进入Discarding状态,于是发送的RST BPDU中把Proposal和Agreement置1。 问题:这里p0之前能发BPDU所以是learning?P是什么?A又是什么?

  4. S2收到根桥发送来的携带Proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。 问题:sync置位能代表什么?

  5. p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。

  6. 各端口的synced变量置位后,p2、p3进入Discarding状态,p1进入Forwarding状态并向S1返回Agreement位置位的回应RST BPDU。 问题:p2本身就是discarding吧?为什么还强调p2呢?

  7. 当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。

以上P/A过程可以向下游继续传递。

事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个Forward Delay所有端口才能进行转发。而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口转到Forwarding状态的速度。

==P/A机制要求==两台交换设备之间链路必须是==点对点的全双工模式==。一旦P/A协商==不成功==,指定端口的选择就需要==等待两个==Forward Delay,协商过程与STP一样。

RSTP拓扑变化处理

在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。

一旦检测到拓扑发生变化,将进行如下处理:

  • 为本交换设备的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器值是Hello Time的两倍。

    在这个时间内,清空所有端口上学习到的MAC地址。

    同时,由非边缘指定端口和根端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。

  • 其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。

如此,网络中就会产生RST BPDU的泛洪。

RSTP与STP的互操作

RSTP可以和STP互操作,但是此时会丧失快速收敛等RSTP优势。

当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RSTP BPDU。运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU,从而实现了互操作。

在华为技术有限公司的数据通信设备上可以配置运行STP的交换设备被撤离网络后,运行RSTP的交换设备可迁移回到RSTP工作模式。

影响RSTP拓扑收敛的参数

1.网络直径
2.超时时间Timer Factor
3.定时器
4.配置影响生成树计算的链路聚合带宽最大连接数
5.端口的链路类型

背景: 点对点链路可帮助实现快速收敛。与点对点链路相连的两个端口如果为根端口或者指定端口,则端口可以通过传送同步报文(Proposal报文和Agreement报文)快速迁移到转发状态,减少了不必要的转发延迟时间。 命令: 1. 执行命令system-view,进入系统视图。 2. 执行命令interface interface-type interface-number,进入参与生成树协议计算的接口视图。 3. 执行命令stp point-to-point { auto | force-false | force-true },配置指定端口的链路类型。 缺省情况下,指定端口自动识别是否与点对点链路相连,点对点链路支持快速收敛。 如果当前以太网端口工作在全双工模式,则当前端口相连的链路是点到点链路,选择参数force-true实现快速收敛。
如果当前以太网端口工作在半双工模式,可通过执行命令stp point-to-point force-true强制链路类型为点对点链路,实现快速收敛。

6.配置端口的最大发送速率

背景: 端口在每个Hello Time时间内BPDU的最大发送数目值越大,表示单位时间内发送的BPDU越多,则占用的系统资源也越多。适当的配置该值可以限制端口发送BPDU的速度,防止在网络拓扑动荡时,RSTP占用过多的带宽资源。

命令: 执行命令system-view,进入系统视图。 执行命令interface interface-type interface-number,进入参与生成树协议计算的接口视图。 执行命令stp transmit-limit packet-number,配置端口在单位时间内BPDU的最大发送数目。 缺省情况下,端口每秒BPDU的最大发送数目为6。

如果设备的所有端口都需要配置每秒发送BPDU的最大数目。可以在系统视图下通过执行命令stp transmit-limit(系统视图)实现。

7.配置设备执行MCheck操作

背景: 在运行RSTP的设备上,如果某个端口和另一台运行STP的设备连接,则该端口会自动迁移到STP兼容工作模式。 如果运行STP的设备被关机或移走,该端口无法自动迁移回RSTP模式,此时需要在该端口上执行MCheck操作,将端口手动迁移到RSTP模式。 以下情况端口无法自动迁回RSTP模式,需要在端口上执行MCheck操作,将端口手动迁移到RSTP模式:

  • 运行STP的交换设备被关机或移走
  • 运行STP的交换设备切换为RSTP模式 命令: 在端口模式下执行MCheck操作: 执行命令system-view,进入系统视图。 执行命令interface interface-type interface-number,进入参与生成树协议计算的接口视图。 执行命令stp mcheck,执行MCheck操作。 在全局模式下执行MCheck操作: 执行命令system-view,进入系统视图。 执行命令stp mcheck,执行MCheck操作。
8.配置边缘端口和BPDU报文过滤功能

背景: 边缘端口==不接收==处理配置BPDU报文,不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将RSTP禁用。 配置为边缘端口后,端口==仍然会发送==BPDU报文,这可能导致BPDU报文发送到其他网络,引起其他网络产生震荡。因此可以配置边缘端口的BPDU报文过滤功能,使边缘端口不处理、不发送BPDU报文。

在全局模式下配置边缘端口和BPDU报文过滤功能后,设备上所有的端口不会主动发送BPDU报文,且均不会主动与对端设备直连端口协商,所有端口均处于转发状态。这将可能导致网络成环,引起广播风暴,请用户慎用。

在端口模式下配置边缘端口和BPDU报文过滤功能后,端口将不处理、不发送BPDU报文。该端口将无法成功与对端设备直连端口协商STP协议状态,请慎用。

操作步骤 在全局模式下配置边缘端口和BPDU报文过滤功能: 执行命令system-view,进入系统视图。 执行命令stp edged-port default,配置当前设备上所有端口为边缘端口。 缺省情况下,设备的所有端口为非边缘端口。

执行命令stp bpdu-filter default,配置当前设备上所有端口为BPDU filter端口。 缺省情况下,设备的所有端口为非BPDU filter端口。

RSTP保护功能的配置

BPDU的保护

命令: 执行命令system-view,进入系统视图。 执行命令stp bpdu-protection,配置交换设备边缘端口的BPDU保护功能。 缺省情况下,交换设备的BPDU保护功能处于==禁用状==态。

自动恢复

如果用户希望被error-down的边缘端口可自动恢复,可通过配置使能端口自动恢复功能,并设置延迟时间,即在 系统视图下执行命令error-down auto-recovery cause bpdu-protection interval interval-value,使能端口自动恢复为Up的功能,并设置端口自动恢复为Up的延时时间。使被关闭的端口经过延时时间后能够自动恢复。配置时需要注意:

  • 缺省情况下,未使能,所以没有缺省延迟时间值。当用户配置该命令时,必须指定恢复延迟时间。
  • 取值越小表示端口的管理状态自动恢复为Up的延迟时间越短,端口Up/Down状态震荡频率越高。
  • 取值越大表示端口的管理状态自动恢复为Up的延迟时间越长,端口流量中断时间越长。
  • 自动恢复仅对配置error-down auto-recovery命令之后发生error-down的端口有效,对配置此命令之前==已经error-down的端口不生效==。

TC保护

  1. 执行命令system-view,进入系统视图。

  2. 执行命令stp tc-protection interval interval-value,配置设备处理阈值指定数量的拓扑变化报文所需的时间。

    缺省情况下,设备处理最大数量的拓扑变化报文所需的时间是Hello Time。

  3. 执行命令stp tc-protection threshold threshold,配置交换设备在收到TC类型BPDU报文后,单位时间内,处理TC类型BPDU报文并立即刷新转发表项的阈值。

    缺省情况下,设备在指定时间内处理拓扑变化报文的最大数量是1。

    配置后,在stp tc-protection interval指==定的时间内==,设备==只会处==理stp tc-protection threshold指定数量的拓扑变化报文,==对于其他的报文会延迟处理==,所以可能会影响生成树的收敛速度。 例如,时间设定为10秒,阈值设定为5,则设备收到拓扑变化报文后,在10秒内只会处理最开始收到的5个拓扑变化报文,对于后面收到的报文则会等10秒超时后再统一处理。

根保护

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入参与生成树协议计算的接口视图。

  3. 执行命令stp root-protection,配置交换设备的Root保护功能。

    缺省情况下,端口的Root保护功能 不开启。

    当端口的角色是指定端口时,配置的Root保护功能才生效。Root保护功能一般只在根桥的端口上配置。

    配置了Root保护的端口,不可以配置环路保护。

环路保护

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入参与生成树协议计算的接口视图。

  3. 执行命令stp loop-protection,配置交换设备根端口或Alternate端口的环路保护功能。

    缺省情况下,端口的环路保护功能处于关闭状态。

    由于Alternate端口是根端口的备份端口,如果交换设备上有Alternate端口,==需要在根端口和Alternate端口上同时配置环路保护==。

    配置了根保护的端口,不可以配置环路保护。

STP/RSTP的display

清除报错

  • 执行命令reset stp [ interface interface-type interface-number ] statistics,清除生成树的统计信息。
  • 执行命令reset stp error packet statistics ,清除生成树协议的错误报文计数。

拓扑变化

  • 执行命令display stp topology-change,查看STP/RSTP拓扑变化相关的统计信息。
  • 执行命令display stp [ interface interface-type interface-number | slot slot-id ] tc-bpdu statistics,查看端口TC/TCN报文收发计数。
  • 执行命令display stp [ interface interface-type interface-number | slot slot-id ][ brief ],查看生成树的状态信息与统计信息。

FAQ

  1. 为什么根保护和环路保护不能配置在一个接口上 难道是因为“如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态”,而环路保护是一直处于discarding状态,这里冲突了?

  2. 连接终端的STP边缘端口,如何规避慢收敛 √边缘端口不是discarding直接到forwarding吗 收敛是指到达稳定状态,那… √直接禁用stp ==并配置stp bpdu-filter enable指定BPDU报文过滤功能,使端口不再发送BPDU报文== 边缘端口仍然会发bpdu

  3. 运行RSTP和STP的交换机能对接吗 向下兼容,自动

|RSTP对接MSTP|CIST可以对接,也就是对接实例0,互联端口为跨域间端口。| ==模式下降的端口,重新连接其他设备时,需要通过stp mcheck命令恢复原有模式。== 4. 为什么STP网络半径推荐值不大于7 半径还是直径,直径默认是7 网络直径会影响什么?1、收敛速度;2、忘了 怎么影响的?1、直径和三个定时器有关联

最初的生成树协议标准,默认定时2s发送一次配置BPDU,每一个交换机接收和处理报文耗时1s(CPU处理很快,不需要1s),最大支持20跳。 快速生成树协议,默认3个周期老化报文消息,即6s,按照1跳/s最多6跳就超时,也就是半径为7。 二层STP网络半径推荐不大于7,还考虑到网络带宽的利用率、风暴范围以及网络可运维管理。

  1. 为什么交换机的STP无法正常收敛 stp不能正常收敛可能因为定时器时间不一致、保护模式设置错误、链路类型有关系吗

交换机STP功能是通过BPDU报文来计算收敛并且破环的,需要使能端口的BPDU报文处理能力,否则设备默认会丢弃BPDU报文,造成无法正常收敛。

S2700全局配置bpdu enable,其他形态的设备在端口下配置bpdu enable。

  1. 什么情况下需要配置STP边缘端口 终端频繁上下线

还有就是业务不允许收敛时间过长

  1. 使能STP的端口在配置收发报文格式时需要注意什么 怎么配置这个格式

STP报文格式分为:标准IEEE 802.1s报文格式和私有协议报文格式。 交换机支持这两种报文格式且缺省情况下能自适应,可通过端口下的stp compliance命令修改。即在自适应模式下,本端口收到对端的报文,本端能够解析且转发此报文。

与其他设备制造商设备互通时,建议执行命令stp config-digest-snoop使能摘要侦听功能。 本功能用于解决交换机与其他设备制造商设备互连时,在域名、修订级别、VLAN映射表全都一致的情况下,由于==BPDU报文密钥不一致==导致两台设备不能正常互通的问题。使能摘要侦听功能可以使交换机的BPDU报文密钥与其他设备制造商设备的BPDU报文密钥一致。

  1. 交换机使能STP协议后用户侧端口应如何配置 STP配置此接口禁用stp;rstp设置边缘端口,==并启动bpdu过滤==
  2. 如何处理STP开启时终端Ping网关不通或获取IP地址慢的问题? ping不通是因为? 慢是因为状态迁移时间太长?

此问题建立在空配置的stp或者rstp的情况下,终端频繁上下线,导致端口状态频繁改动,又由于收敛过长,导致ping不通网关或者慢

生成树