RSTP的端口角色:
RSTP在STP基础上新增加了2种端口角色:Backup端口和边缘端口。通过端口角色的增补,简化了生成树协议的理解及部署。
- Backup端口:由于学习到自己发送的配置BPDU报文而阻塞的端口,指定端口的备份,提供了另外一条从根节点到叶节点的备份通路。
- 边缘端口:如果端口位于整个交换区域边缘,不与任何交换设备连接,这种端口叫做边缘端口。边缘端口一般与用户终端设备直接连接。
边缘端口的特点:
- 边缘端口会节省30S的延时,端口UP后会立即进入转发状态。
- 边缘端口的UP/DOWN不会触发拓扑改变。
- 边缘端口收的TC置为的配置BPDU报文不会将MAC地址的老化时间设置为15s。
- 边缘端口如果收到配置的BPDU报文会马上变为一个普通端口,进行STP的收敛
- 边缘端口也会发送配置BPDU报文。
- PA协商不会阻塞边缘端口。
同时还增加了两种接口状态:Alternate端口与Backup端口
| 角色 | 描述 | | —- | —- | | Backup | Backup端口作为指定端口的备份,提供了另外一种从根桥到非根桥的备份链路。 | | Alternate | Alternate端口作为根端口的备份端口,提供了从指定桥到根桥的另一条备份路径。 |
RSTP的端口状态:
RSTP的端口状态在STP的基础上进行了改进。由原来的五种缩减为三种。
端口状态 | 说明 |
---|---|
Forwarding(转发) | 在这种状态下,端口既转发用户流量又处理BPDU报文。 |
Learning(学习) | 这是一种过渡状态。在Learning下,交换设备会根据收到的用户流量,构建MAC地址表,但不转发用户流量,所以叫做学习状态。Learning状态的端口处理BPDU报文,不转发用户流量。 |
Discarding(丢弃) | Discarding状态的端口只接收BPDU报文。 |
注: MSTP端口状态与RSTP端口状态相同。 华为公司数据通信设备缺省情况处于MSTP模式,当从MSTP模式切换到STP模式,运行STP协议的设备上端口支持的端口状态仍然保持和MSTP支持的端口状态一样,支持的状态仅包括Forwarding、Learning和Discarding
RSTP报文
RSTP报文格式
在BPDU的格式上,除了保证和STP格式基本一致之外,RSTP作了一些小的变化。一个是在Type字段,配置BPDU类型不再是0而是2,版本号也变成了2。所以运行STP的交换机收到该类BPDU时会丢弃。
另一个变化是在Flag字段,把原来保留的中间6位使用起来。这样改变了的配置BPDU叫做RST BPDU。
RSTP Flag字段格式:
- Bit7:TCA
- Bit6:Agreement
- Bit5:Forwarding
- Bit4:Learning
- Bit3和Bit2:端口角色
- 00:(Unknown) 未知
- 01:Alternate / Backup Port
- 10:(Root Port)根端口
- 11:(Designated Port)指定端口
- Bit1:Proposal
- Bit0:TC
TC报文
TC报文是什么
小伙伴们在日常维护中是否发现,交换机上可能经常产生STP TC报文的日志告警,比如:
TC报文对现网业务的影响可大可小,有时仅仅体现为偶尔出现告警打印,有时却能引起报文泛洪、拥塞丢包。因此为了网络的正常稳定运行,应该尽可能消除异常TC报文的产生。那TC报文到底是什么呢?
我们常说的TC报文其实就是TCN BPDU,它的作用是网络中的其他网桥通知根桥网络拓扑发生了变化。上面的告警中出现了两种TC报文,一种是STP_DETECTED_TC,这是接口所在生成树实例或VLAN拓扑发生变化,本端设备检测到拓扑变化后产生的TC报文。另一种是STP_NOTIFIED_TC,这是远端相连设备通知本设备某接口所在生成树实例或VLAN的拓扑发生变化后产生的TC报文。什么情况下会产生TC报文
按照IEEE协议规定,TCN BPDU的产生条件有两个:
1. 网桥上有端口转变为Forwarding状态,且该网桥至少包含一个指定端口。
2.网桥上有端口从Forwarding状态或Learning状态转变为Blocking状态。
若上述两个条件之一满足,就说明网络拓扑发生了变化,网桥就需要使用TCN BPDU通知根桥这一变化。在日常维护中,TC报文的产生通常有以下几种情况:
1. 设备或链路出现故障,引发STP重新计算,产生TC报文。
2. STP配置参数更改,引发STP重新计算,产生TC报文。
3. 连接终端的端口使能了STP,但没有配置为边缘端口,当终端发生重启等情况导致该端口链路状态变化时,该端口产生TC报文。
4. 来自用户设备的攻击TC报文也可能传入其所接入的二层网络。收到TC报文会怎样
H3C系列交换机上实现的是标准MSTP的STP兼容模式,接口收到TC报文后,将把所有VLAN或Instance实例中所有VLAN的MAC表项删除,由流量触发重新学习,ARP表项会由设备会主动发送ARP请求报文来进行更新。
下面我们通过一个小实验来说明该过程。一、实验拓扑
在Spine和Leaf上共起四个网关地址,使用一台交换机来模拟PC,配置四个VLAN虚接口模拟四个终端设备。
除PC外的其他设备均开启MSTP,Access-2与PC互联接口配置边缘端口和BPDU保护功能。
通过手动打开和关闭Access-1的上行接口来模拟网络中的链路故障和新接入交换机,构造拓扑改变触发条件。网络初始状态
Spine为根设备,初始TC收发为0,正常学习到55.1.1.2和66.1.1.2的ARP表项。
Leaf设备上初始TC收发为0,正常学习到77.1.1.2和88.1.1.2的ARP表项。
接下来通过手工关闭一次再打开一次Access-1的上行口,来模拟网络中互联接口UP/DOWN和新接入交换机的场景,在整个过程中观察以下三方面情况:
1. 观察各设备的TC报文收发情况。
2. PC和网关之间不进行互ping操作,观察Spine和Leaf的ARP表项老化时间的更新情况。
3. 在Access-2上行口抓包,观察网络中ARP报文的传递过程。TC报文收发情况
1. Spine设备上
手工关闭一次再打开一次Access-1的上行口后,可以看到Spine打印了两条TC告警。这是因为Access-1的上行接口DOWN再UP一次时,Access-1和Leaf上都有非边缘端口转为Forwarding状态,满足TC报文产生的条件,所以Access-1和Leaf各会产生一个TC报文然后泛洪到Spine上。
通过display stp tc命令查看TC报文的收发计数,也可以看到Spine收到2个TC报文。
2. Leaf设备上
可以看到Leaf上打印两条TC告警,其中一个TC报文是Leaf自身端口震荡产生的,另一个TC报文是Access-1端口震荡后产生并泛洪发给Leaf的。
这里需要注意是,如果是设备自身端口震荡产生的TC报文,日志中的关键字是DETECTED,如果是收到其他设备泛洪过来的TC报文,日志中关键字是NOTIFIED。
四、ARP表项更新情况
1. Spine设备上
初始ARP表项在1091S后将老化,Access-1接口UP后,Spine收到泛洪过来的TC报文,触发ARP表项更新,ARP表项的默认老化时间为1200S,变为1181S说明刚刚学习更新。
2. Leaf设备上
初始ARP表项在750S后将老化,Access-1接口UP后,Leaf收到泛洪过来的TC报文,触发ARP表项更新,ARP表项的默认老化时间为1200S,变为1176S说明刚刚学习更新。
五、抓包观察ARP报文收发情况
在Access-2上行口抓包,可以看到在接口UP后,Spine和Leaf均发出了ARP请求报文去更新自己设备上的ARP表项。
六、小节
1. 非边缘端口出现UP/DOWN时设备会产生STP TC报文,并会通过根端口和非边缘端口往其他设备发送TC报文,从而导致TC报文的整网泛洪。
2. 收到TC报文的设备会触发MAC和ARP表项的刷新,MAC表项被删除后由流量触发重新学习,ARP表项由设备主动发起ARP请求报文更新。
TC报文的排查和优化
交换机偶尔出现少量STP TC日志告警可以不必过分关注,但在规模较大的二层网络域中,若交换机频繁收到TC报文,则会频繁刷新MAC地址表,可能造成短暂的未知单播流量泛洪,拥塞丢包;频繁刷新ARP表可能造成网络中瞬时出现大量ARP协议报文,导致核心设备CPU利用率升高,影响其他协议报文的处理。
因此我们应该尽可能消除频繁产生的TC报文,主要可以按照以下几点进行排查和优化:
1. 首先尽量从源头消除TC报文,找到是哪台设备的接口在频繁震荡。执行命令diplay stp tc查看频繁收到TC报文的端口,如果某端口收到的TC报文一直递增,查看该端口的对端设备的TC接收端口,一级一级往下直到找到TC源。
2. 根据上一步的排查结果,再继续定位接口震荡的原因。如果是设备间的互联接口,建议做一些硬件替换测试消除接口震荡。如果是互联终端的接口则建议配置STP边缘端口和BPDU保护功能。
3. 对于某些不便排查源头的网络,可以在端口上配置stp tc-restriction命令来开启TC-BPDU传播限制功能,此后当该端口收到TC-BPDU时,不会再向其他端口传播。
4. 在我司设备网络和其他厂商设备网络的交界处,如果只有单条路径连接,可以在该链路所连端口上配置stp disable或者bpdu drop。如果存在多条路径,则对其异常收TC情况进行监控和检查。
5. 尽可能合理规划和控制二层网络域的规模,当二层网络域规模较大,汇聚、接入和终端设备数量较多时,建议在核心和汇聚设备之间关闭STP功能,使每台汇聚设备与其下联网络构成一棵单独的STP树,每颗树之间互不影响,从而减小TC报文的泛洪和影响范围。RSTP快速收敛机制:
P/A协商
针对运行STP设备从初始化到完全收敛至少需要30s的问题,RSTP采用P/A(Proposal/agreement)协商机制。特点
由于有来回确认机制和同步变量机制,就无需依靠计时器来保障无环。可以让交换机的互联接口快速进入转发模式。P/A协商的硬件条件
只能应用在点到点的链路上(全双工的端口),如果是半双工端口会识别为共享(share)链路,在共享链路上不能使用P/A协商。P/A协商的过程
- SW1向SW2发送p置位的BPDU包。
- 同步变量(阻塞除边缘端口以外的其他端口,防止出现环路)。
- SW2向SW1发送A置位的BPDU包。
SW1收到A置位的BPDU包后,端口立即进入Forwarding状态。(一般都是秒级)
P/A协商的详细过程
proposing.指定端口处于discarding或learning 状态的时候,会设置该变量。向下游交换机传递Proposal flag被置位的RSTBPDU。
- proposed.当收到指定端口发来的proposal BPDU的时候,该变量设置。该变量指示本网段上的指定端口希望尽快的进入forwarding状态。
- sync.当proposed被设置以后,收到proposal的根端口会依次为自己的其他端口设置sync变量。将所有不是Edge port的指定端口转为discarding状态。
- synced.当端口完成转到discarding后,会设置自己的synced。Alternate、Backup和边缘端口会马上设置该变量。根端口监视其他端口的synced,当所有其他端口的synced全被设置,根端口会设置自己的synced,然后传回RST BPDU,其中Agreement flag 被设置。
agreed.当指定端口接收到一个RST BPDU的时候,如果该BPDU中的agreement flag 被置位且端口角色字段是“根端口”,该变量被设置。当agreed被设置的时候,指定端口马上转入forwarding状态。
什么情况下RSTP报文中需要将Proposal位置位?
一个指定端口进入discarding或者learning状态,需要将proposal位置位。
RSTP中收敛时间的优化
P/A协商:可以让交换机的RP和DP的互联接口快速进入转发状态。
- 直连故障:AP口变为RP并快速进入转发状态,不需要30s延时。
- 次优场景:AP口收到次优的RST BPDU包后会马上变为DP口,并向该端口发送最优的RST BPDU包。
- 非直连链路故障:连续丢失3个RST BPDU包,端口角色就需切换,最长时间为6s。
- RSTP中TC置位的RST BPDU包所有桥设备都可以发送,连续发送4s(TC while时间)。
在RSTP中什么情况下才会发送TC BPDU包?
指定端口进入到转发状态。
MAC地址表的清除:
- TC发送者:清除除了边缘端口以为的其它端口的MAC地址绑定条目。
- TC接受者:清除除了TC报文接口端口和边缘端口以外的其它端口的MAC地址绑定条目。
在RSTP中非根桥也会每隔hello timer 主动发送RsTBPDU报文,不是由根桥来发。 在RSTP中DP口shutdown后BP口的角色会马上变为DP口,并经过30s的转发延时进入到转发状态。
RSTP保护功能
保护功能 | 场景 | 配置影响 |
---|---|---|
BPDU(Bridge Protocol Data Unit)保护 | 边缘端口在收到BPDU以后端口状态将变为非边缘端口,此时就会造成生成树的重新计算,如果攻击者伪造配置消息恶意攻击交换设备,就会引起网络震荡。 | 交换设备上启动了BPDU保护功能后,如果边缘端口收到RST BPDU,边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统。被error-down的边缘端口只能由网络管理员手动恢复。如果用户需要被error-down的边缘端口可自动恢复,可通过配置使能端口自动恢复功能,并可设置延迟时间。 |
防TC-BPDU报文攻击保护 | 交换设备在接收到拓扑变化报文后,会执行MAC地址表项和ARP表项的删除操作,如果频繁操作则会对CPU的冲击很大。 | 启用防TC-BPDU报文攻击功能后,在单位时间内,交换设备处理拓扑变化报文的次数可配置。如果在单位时间内,交换设备在收到拓扑变化报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。对于其他超出阈值的拓扑变化报文,定时器到期后设备只对其统一处理一次。这样可以避免频繁的删除MAC地址表项和ARP表项,从而达到保护设备的目的。 |
Root保护 | 由于维护人员的错误配置或网络中的恶意攻击,根桥收到优先级更高的BPDU,会失去根桥的地位,重新进行生成树的计算,并且由于拓扑结构的变化,可能造成高速流量迁移到低速链路上,引起网络拥塞。 | 对于启用Root保护功能的指定端口,其端口角色只能保持为指定端口。一旦启用Root保护功能的指定端口收到优先级更高的RST BPDU时,端口状态将进入Discarding状态,不再转发报文。在经过一段时间(通常为两倍的Forward Delay),如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态。 |
环路保护 | 当出现链路拥塞或者单向链路故障,根端口和Alternate端口会老化。根端口老化,会导致系统重新选择根端口(而这有可能是错误的),Alternate端口老化,将迁移到Forwarding状态,这样会产生环路。 | 在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU报文时,则向网管发出通知信息(此时根端口会进入Discarding状态,角色切换为指定端口),而Alternate端口则会一直保持在阻塞状态(角色也会切换为指定端口),不转发报文,从而不会在网络中形成环路。直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。 |
stp root-protection
//需要在所有的指定端口开启根保护,如果开启后的端口收到比根桥更优的BPDU报文,端口状态会变为Discarding状态。 如果连续MAX age的时间内从该端口都没有收到更优的BPDU报文,端口会自动恢复为Forwarding状态。。 防止根被抢占。
stp loop-protection
//用于RP和AP端口。接收BPDU报文的端口。防止单向链路故障造成的环路。
TC-protection
//设置TC报文的响应次数。如果接收TC的数量大于阀值范围内得TC次数,超出部分只执行1次。
BPDU-protection
//配置BPDU保护
RSTP配置命令
基础配置同STP配置命令行。
[接口视图] stp point-to-point { auto | force-false | force-true}
//配置指定端口的链路类型。 缺省情况下,指定端口自动识别是否与点对点链路相连,点对点链路支持快速收敛。
//如果当前以太网端口工作在全双工模式,则当前端口相连的链路是点到点链路,选择参数force-true实现快速收敛。
//如果当前以太网端口工作在半双工模式,可通过执行命令stp point-to-point force-true强制链路类型为点对点链路,实现快速收敛。
[接口视图] stp transmit-limit packet-number
//配置端口在单位时间内BPDU的最大发送数目。缺省情况下,端口每秒BPDU的最大发送数目为6。
//如果设备的所有端口都需要配置每秒发送BPDU的最大数目。可以在系统视图下通过执行该命令实现。
stp mckeck //执行MCheck操作。用来对端口执行从STP模式自动迁移回原来的RSTP/MSTP模式的操作。
stp edged-port default
//配置当前设备上的所有端口为边缘端口。
stp bpdu-filter enable
//配置当前端口为BPDU filter端口。
stp bpdu-protection
//配置交换设备边缘端口的BPDU保护功能
stp tc-Protection
//使能交换设备对TC类型BPDU报文的保护功能。
stp tc-Protection threshold 1
//配置设备处理阈值指定数量的拓扑变化报文所需的时间。
stp tc-Protection threshold 1
//配置交换设备在收到TC类型BPDU报文后,单位时间内,处理TC类型BPDU报文并立即刷新转发表项的阈值。
//缺省情况下,设备在指定时间内处理拓扑变化报文的最大数量是1。
stp root-protection
//配置交换设备的Root保护功能。
//当端口的角色是指定端口时,配置的Root保护功能才生效。
//配置了根保护的端口,不可以配置环路保护。
stp loop-protection
//配置交换设备根端口或Alternate端口的环路保护功能。
注意
- 在全局模式下配置边缘端口和BPDU报文过滤功能后,设备上所有的端口不会主动发送BPDU报文,且均不会主动与对端设备直连端口协商,所有端口均处于转发状态。这将可能导致网络成环,引起广播风暴,请用户慎用。
- 在端口模式下配置边缘端口和BPDU报文过滤功能后,端口将不处理、不发送BPDU报文。该端口将无法成功与对端设备直连端口协商STP协议状态,请慎用。
- 如果用户希望被error-down的边缘端口可自动恢复,可通过配置使能端口自动恢复功能,并设置延迟时间,即在系统视图下执行命令error-down auto-recovery cause bpdu-protection interval interval-value,使能端口自动恢复为Up的功能,并设置端口自动恢复为Up的延时时间。使被关闭的端口经过延时时间后能够自动恢复。
当端口的角色是指定端口时,配置的Root保护功能才生效。配置了根保护的端口,不可以配置环路保护。
配置设备支持和其他厂商设备互通的参数:
为了实现华为公司的数据通信设备与其他厂商设备互通,需要根据其他厂商设备的P/A机制选择端口的快速迁移方式。
Proposal/Agreement机制,目前交换设备的端口支持以下两种方式:增强方式:当前端口在计算同步标志位时计算根端口。
- 上游设备发送Proposal报文,请求进行快速迁移,下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。
- 上游设备继续发送Agreement报文,下游设备接收到后,根端口转为Forwarding状态。
- 下游设备回应Agreement报文,上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。
- 普通方式:当前端口在计算同步标志位时忽略根端口。
- 上游设备发送Proposal报文,请求进行快速迁移,下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口,根端口转为Forwarding状态。
- 下游设备回应Agreement报文,上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。
在运行生成树的通信网络中,如果华为公司的数据通信设备与其他厂商设备混合组网,可能会因为与其他厂商设备的Proposal/Agreement机制不同可能导致互通失败。需要根据其他厂商设备的Proposal/Agreement机制,选择端口使用增强的快速迁移机制还是普通的快速迁移机制。
配置命令:
[接口视图] stp no-agreement-check
//配置端口使用普通的快速迁移方式。
//缺省情况下,端口使用增强的快速迁移机制。