STP、RSTP

2020-06-27  本文已影响0人  虽然逆风依然不羁

一、背景


为了提高网络可靠性,避免单点故障而导致网络中断,常常需要在网络中部署冗余链路或冗余设备,但是部署了冗余链路或冗余设备的网络,也会从无环的树型网络结构变为环形网络结构,环形网络结构会带来新的问题:

1、广播风暴导致网络不可用

因为交换机收到广播帧,会将广播帧从接收端口外的所有接口转发出去;

广播帧就会在环形网络中无限循环转发,随着广播帧的增加,最终导致整个网络的资源被耗尽,网络瘫痪不可用;

2、MAC地址表震荡导致MAC地址表被破坏

即使是单播报文,也有可能导致交换机的MAC地址表项混乱,破坏交换机的MAC地址表;

因为交换机接收到未知单播帧后,也会向除接收端口外的所有接口转发;

未知单播帧就会在环形网络中无限循环转发,同一交换机不断的从不同的接口学到未知单播帧,交换机就会不停的修改MAC地址表,导致MAC地址表震荡,破坏MAC地址;

二、STP Spanning Tree生成树协议


STP根据IEEE 802.1D标准建立,用于在局域网中消除二层环路的问题;

运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择地对某些端口进行阻塞,最终实现将环路网络结构修剪成无环路的树型网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。

STP仅在网络中存在冗余链路或者存在环形网络拓扑结构时才需要使用;

使用STP技术,其实更多是抱着以防万一的心态,怕网络中存在这样的物理封闭环路;

因为STP技术在保证正常使用冗余链路备份的同时,又能确保不会出现二层通信环路;

STP基本概念

一个根桥、两个度量、三个要素、四个原则、五个端口状态

一个根桥:

树型的网络拓扑结构必须有一个树根,就像一棵树只有一个树根一样,对于一个运行STP协议的网络,根桥在全网中只有一个,就是网络中具有最小桥ID的交换机;

网络中除根桥外的其它交换机成为非根桥;

网络收敛后,根桥会按照一定的时间间隔向外发送配置BPDU,非根桥仅对该报文进行转发,传达拓扑变化记录,保证拓扑的稳定;

两个度量:

在STP计算中要确定两个方面,一是哪台交换机作为根桥,二是非根桥的哪些端口收发数据,哪些端口该被阻塞,以便最终形成无环路的树型网络拓扑结构;

STP计算依据的就是ID和路径开销这两个度量;

1、ID

ID包括BID桥ID和PID端口ID两种;

BID Bridge ID一共64位,高16位为Bridge Priority桥优先级,低48位为桥背板MAC地址;

BID决定了哪台交换机成为网络中的根桥,BID最小的交换机被选举为根桥;

从桥优先级字段和桥MAC地址字段所处位置可以看出,桥优先级越小,桥ID越小,桥优先级相同,取桥MAC地址小的作为根桥;

桥优先级数值范围0 - 61440,数值越小越优先;

PID Port ID一共16位,高4位是端口优先级,低12位是端口号;

在确定根端口、指定端口的过程中,如果根路径开销、发送者桥ID均相同,发送者PID小的端口成为根端口或指定端口;

端口优先级数值范围0 - 255,数值越小越优先;

2、路径开销

路径开销是一个端口参数,由具体端口的链路速率决定,是STP协议用于选择链路的参考值;

对于聚合链路,链路速率是聚合组中所有状态位UP的成员口的速率之和;

STP协议通过计算各端口的路径开销,选择较为强壮的链路,阻塞多余的链路,将网络修剪成无环路的树型网络结构;

根路径开销是某端口到根桥累计的路径开销,就是所经过的各个桥上的各端口的路径开销累加值;

根桥上所有端口的根路径开销,以及同交换机上不同端口间的路径开销值均为零;

某接口的根路径开销 = 根端口接收配置BPDU携带的根路径开销 + 根端口的路径开销

三个选举要素

由环形网络拓扑结构修剪为树型结构,需要使用STP中的三个选举要素,即根桥、根端口和指定端口;

根桥  就是STP网络中BID桥ID最小的桥,通过交互配置BPDU报文选出最小的BID作为根桥;

根端口    非根桥上接收最优配置BPDU的端口,即离根桥最近的端口;

最优配置BPDU根据BPDU优先级确定;

在一个运行STP协议的设备上,根端口有且只有一个,根桥上没有根端口;

指定端口    就是向一个网段上发送最优配置BPDU的端口;

一旦根桥、根端口、指定端口选举成功,整个树型网络拓扑结构就建立完成了;

拓扑稳定后,只有根端口、指定端口转发流量,其余端口处于阻塞状态;

四个比较原则

STP计算依据的是各个端口发送配置BPDU报文携带的4个字段:

1、根桥ID    每个STP网络只生成一棵树,一棵树只有一个树根;

2、根路径开销    发送该配置BPDU的端口到根桥的累计路径开销;

3、发送者桥ID    发送该配置BPDU的桥ID;

4、发送者端口ID    发送该配置BPDU的端口ID;

BPDU优先级按照上述顺序依次比较这四个字段确定,四个字段都是数值越小越优先;

需要注意的是,当非根桥从多个端口收到多个不同的配置BPDU时,根路径开销的比较是接收配置BPDU携带的根路径开销值加上接收端口路径开销值进行比较;

五个端口状态

运行STP协议的设备,有以下5个端口状态:

1、disabled    禁用状态

2、blocking    可以收发BPDU

该状态下正在确定根桥、根端口、指定端口;

3、listening    可以收发BPDU

在端口被选举为根端口或指定端口后,进入到该状态,是一种过渡状态;

4、learning    可以收发BPDU、学习MAC地址表项

经过一个转发延时后进入该状态,需要再经过一个转发延时后才能进入forwarding状态,也是一种过渡状态;

5、forwarding    可以收发BPDU、学习MAC地址表项、转发用户流量

只有根端口、指定端口才能进入转发状态;

新选出的根端口、指定端口要经过两倍的转发延时后,才能进入转发状态,确保新的配置BPDU传遍整个网络,可以防止临时环路的产生;

STP的3个定时器

1、hello time    hello time定时器    缺省2s

设备会每隔hello time时间向周围的设备发送配置BPDU,以确认链路是否存在故障;

网络拓扑稳定之后,只有根桥每隔hello time时间从指定端口发送配置BPDU;

非根桥从根端口接收到配置BPDU之后,才会从指定端口发送配置BPDU;

根桥上的hello time时间被修改后,会在下一次发出的配置BPDU报文中更新hello time这个字段,来向非根桥传递hello time定时器信息;

当网络拓扑发生变化之后,TCN BPDU的发送不受这个定时器的管理;

2、forward delay    转发延时    缺省15s

链路故障会引发网络重新进行生成树的计算,生成树的结构将发生改变,但是重新计算得到的新配置消息不可能立即传遍整个网络,如果此时新选出的根端口和指定端口就立即开始数据转发的话,很可能会造成临时的二层环路;

因此,STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过两倍的forward delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止产生临时的二层环路;

转发延时是状态迁移的延迟时间,缺省值15s,即listening状态持续15s,随后进入learning状态再持续15s;

3、max age    最大生成时间    缺省20s

运行STP协议的网络中,非根桥设备收到配置BPDU报文后,会对报文中的Message Age消息生存时间和Max Age最大生存时间进行比较,如果Message Age小于等于Max Age,非根桥设备就继续转发配置BPDU报文;

如果Message Age大于Max Age,则该配置BPDU报文将被老化,该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败;

当配置BPDU从根桥发出时,报文中的Message Age值为0,配置BPDU报文每经过一个交换机,Message Age增加1;

STP BPDU报文

STP协议采用的是BPDU Bridge Protocol Data Unit 桥协议数据单元类型报文,也称为配置消息,STP就是通过在设备直接传递BPDU来确定最终修剪完成的树型网络拓扑结构;

STP BPDU报文被封装在以太网数据帧中,此时目的MAC地址是组播MAC地址:01-80-C2-00-00-00,在LLC头部中IEEE为STP保留的DSAP和SSAP值均为0x42,Control为0x03;

STP BPDU分为两类,配置BPDU和TCN BPDU

1、Configuration BPDU 配置BPDU    用于生成树计算与维护

配置BPDU是一种心跳报文,只要端口使能STP协议,设备就会按照hello time定时器的时间间隔从指定端口发送配置BPDU;

在初始化过程中,每个交换机都会主动发送配置BPDU,但在网络拓扑稳定以后,只有根桥主动从指定端口发送配置BPDU;

非根桥从根端口收到配置BPDU后才触发从指定端口发送自己的配置BPDU;

配置BPDU在以下3中情况下会产生:

1)根桥每隔hello time时间周期性从指定端口发送配置BPDU;

2)非根桥从根端口收到配置BPDU后,触发从指定端口发送自己的配置BPDU;

3)当指定端口收到次优配置BPDU时,会立刻从该指定端口发送自己的配置BPDU;

配置BPDU中的字段:

protocol identifier协议ID:2字节,总是为0;

protocol version协议版本:1字节,总是为0;

message type消息类型:1字节,0x00为配置BPDU,0x80为TCN BPDU

flags标志:1字节,最低位TC Topology Change标志位,最高位TCA Topology Change Acknowledgment标志位;

Root Identifier根桥ID:8字节,2字节桥优先级,6字节桥MAC;

Root Path Cost根路径开销:4字节,发送该BPDU的端口到根桥的累计路径开销;

Bridge Identifier桥ID:8字节,发送该BPDU的桥ID,2字节桥优先级,6字节桥ID;

Port Identifier端口ID:2字节,发送该BPDU的端口ID,高4位端口优先级,低12位端口号;

Message Age消息生存时间:2字节,根桥发送的配置BPDU中该字段为0,每经过一个交换机加1,小于等于Max Age的配置BPDU才会被转发,否则被丢弃;

Max Age最大生存时间:2字节,配置BPDU的生存时间超过Max Age就会失效,缺省20s;

Hello Time:2字节,根桥每隔hello time周期性发送配置BPDU,缺省2s;

Forward Delay转发延时:2字节,listening和learning各自持续的时间,防止临时的二层环路,缺省15s;

2、Topology Change Notificaition BPDU    TCP BPDU    用于下游设备通知上游设备网络拓扑变化,直到根桥

TCN BPDU是在设备检测到网络拓扑发生变化时才发出的;

TCN BPDU在如下两种情况下会产生:

1)存在指定端口的设备上,端口状态变为forwarding;

2)从指定端口收到TCN BPDU后向根桥复制TCN BPDU;

TCN BPDU中的字段:

protocol identifier协议ID:2字节,总是为0;

protocol version协议版本:1字节,总是为0;

message type消息类型:1字节,0x00为配置BPDU,0x80为TCN BPDU;

STP的不足

STP协议虽然解决了二层环路问题,但是由于网络拓扑收敛速度慢,会影响用户通信质量;

Blocking到Forwarding需要经过两个转发延时间隔,另外配置BPDU超时需要20s;

如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断;

1)STP协议采用的是被动算法,依赖定时器等待的方式确定拓扑,如转发延时,所以收敛速度慢;

2)STP网络拓扑稳定后,只有根桥主动发送配置BPDU,非根桥只能被动转发,也导致收敛速度慢;

3)没有细致区分端口状态和端口角色;

三、RSTP Rapid Spanning Tree Protocol 快速生成树协议


STP是最原始的生成树协议,它的主要不足是网络拓扑收敛速度慢;

RSTP是在STP基础上改进的生成树协议版本,提高了网络拓扑收敛速度;

IEEE802.1w定义的RSTP保留了STP的大部分算法和计时器,只在一些细节上做了改进,但这些改进相当关键,极大的提升了STP性能,能满足低延时、高可靠性的网络要求;

RSTP对STP的改进主要体现在端口角色、端口状态、BPDU的变化和P/A收敛机制四个方面:

1、新增三种端口角色

RSTP在STP中根端口、指定端口的基础上,对其它端口进行了细分;

1)Alternate替代端口    

作为根端口的备份端口,根端口故障后,替代端口就会无延时地进入转发状态;

2)Backup备份端口       

 作为指定端口的备份端口,指定端口故障后,备份端口就会无延时地进入转发状态;

3)Edge边缘端口    

用于连接主机,不参与生成树计算,不收发BPDU,能够直接进入forwarding状态;

如果收到BPDU报文就会失去边缘端口属性,开始收发报文进行STP生成树计算;

2、重新划分端口状态

RSTP把STP中的Disabled、Blocking、Listening三种端口状态用Discarding状态替代,即:

1)Discarding    收发BPDU

2)Learning        收发BPDU、学习MAC地址

3)Forwarding    收发BPDU、学习MAC地址,转发用户流量

3、BPDU的变化

RSTP协议与STP协议一样在交换机间使用BPDU交互信息,但是RSTP只有配置BPDU,即RST BPDU,没有TCN BPDU;

RSTP在BPDU方面的改变主要体现在BPDU格式、拓扑变化BPDU的使用和配置BPDU处理方式的改变三个方面:

1)BPDU格式上的改变

Protocol Version字段:RST BPDU是2,不再为0,运行STP的设备收到RST BPDU会丢弃;

BPDU Flag字段:最高位TCA和最低位TC保持不变,RST BPDU使用了STP配置BPDU中Flag字段保留的中间6位,增加了端口状态、端口角色和PA机制三个功能的标志;

PA机制:Agreement位和Proposal位用于RSTP的点到点链路的PA机制;

端口状态:Forwarding位和Learning位用于表示发送RST BPDU的端口的RSTP端口状态;

端口角色:占两个比特,00表示发送RST BPDU的端口的端口角色未知;

01表示发送RST BPDU的端口的RSTP端口角色为Alternate替代端口或Backup备份端口;

10表示发送RST BPDU的端口的RSTP端口角色为根端口;

11表示发送RST BPDU的端口的RSTP端口角色为指定端口;

2)拓扑变化BPDU的使用

在RSTP中不再需要从根端口依次向上发送TCN BPDU,直至根桥;

RSTP直接发送TC置1的RST BPDU,接收的交换机直接清空MAC地址表;

交换机清空MAC地址表不再需要等待根桥发送的TC置1的配置BPDU,提高了收敛速度;

3)配置BPDU处理方式的改变

配置BPDU处理方式的改变主要体现在配置BPDU的发送方式、超时时间和处理次优BPDU三个方面:

配置BPDU的发送方式:

拓扑稳定后,STP中只有根桥按照hello time时间间隔发送配置BPDU,非根交换机需要等待从根端口收到配置BPDU,才会从指定端口发送自己的配置BPDU,这样导致STP计算复杂和缓慢;

RSTP中所有交换机都按照hello time时间间隔周期性发送配置BPDU,无需等待根桥发出的配置BPDU;

配置BPDU的超时时间:

STP中需要等待Max Age 20s最大生存时间后,配置BPDU失效才会认为上游邻居故障;

RSTP中如果连续三个hello time时间间隔没有收到RST BPDU,就认为上游邻居故障;

处理次优BPDU:

STP中只对指定端口收到的次优配置BPDU,立即发送自己更优的配置BPDU;

对于根端口收到的次优配置BPDU,不会做同样处理,而是等待Max Age最大生存时间超时,才会进行BPDU协商;

RSTP端口收到次优BPDU都会立即发送自身更优的RST BPDU,无需等待20sMax Age最大生存时间超时时间;

RSTP处理次优BPDU不再像STP那样依赖于定时器通过超时完成拓扑收敛,从而加快了拓扑收敛;

4、P/A收敛机制

STP中确定一个端口为指定端口后,端口从Listening到Learning,Learning到Forwarding,要经过两倍的转发延时时间才能进入Forwarding状态,这种保守的设计可以防止临时的二层环路,但是收敛速度慢;

RSTP的提议确认机制,是为了让指定端口尽快进入Forwarding状态,而不必等待转发延迟;

P/A机制只能在点到点链路上使用,即端口所在的以太网对端只有一台设备,否则要从Learning到Forwarding要等待一个转发延时时间;

1)当一个指定端口处于Discarding或learning状态时,会向下游设备发送Proposal位置1的RST BPDU,请求快速切换到Forwarding状态;

2)下游设备根端口收到后,会让除根端口除外的所有非边缘端口进入Discarding状态,然后从根端口向上游设备发送Agreement位置1的RST BPDU,同意上游设备指定端口进入Forwarding状态;

3)上游设备收到后,指定端口直接进入Forwarding状态;

4)下游设备通过同样的方式恢复指定端口的转发;

5、RSTP保护功能

1)BPDU保护

边缘端口在收到BPDU以后端口状态将变为非边缘端口,此时就会造成生成树的重新计算,如果攻击者伪造RST BPDU恶意攻击交换设备,就会引起网络震荡;

启动了BPDU保护功能后,如果边缘端口收到RST BPDU,边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统被错误down掉的边缘端口只能由网络管理员手动恢复;

也可以配置端口自动恢复功能,并设置延迟时间,使被错误down掉的边缘端口可自动恢复;

2)Root保护

由于维护人员的错误配置或网络中的恶意攻击,根桥收到优先级更高的RST BPDU会失去根桥的地位,重新计算生成树,并且由于拓扑结构变化,可能造成高速流量迁移到低速链路,引起网络拥塞;

对于启动Root保护功能的指定端口,端口角色只能保持为指定端口,一旦启用Root保护功能的指定端口收到优先级更高的RST BPDU,端口将进入Discarding状态,不再转发报文;

在经过一段时间(通常为两倍的Forward Delay),如果端口一直没有收到高优先级的RST BPDU,端口自动恢复到正常的Forwarding状态;

3)环路保护

当出现链路拥塞或者单向链路故障时,根端口和Alternate替代端口会被老化,根端口老化会导致交换机重新选择根端口,Alternate替代端口老化将迁移到forwarding状态,这样会产生环路;

在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游的RST BPDU,则向网管发出通知信息,根端口进入Discarding状态,直到根端口收到RST BPDU,端口状态才恢复正常到forwarding状态,而阻塞端口则会一直保持在阻塞状态不转发报文,从而不会在网络中形成环路;

4)防TC - BPDU报文攻击保护

交换设备在接收到TC - BPDU报文后,会执行MAC地址表和ARP表的删除操作,如果频繁操作则会对CPU的冲击很大;

启用防TC -BPDU报文攻击功能后,可配置单位时间内交换机可以处理TC-BPDU报文的次数;

如果单位时间内交换设备在收到TC-BPDU报文数量大于配置的阀值,那么设备只会处理阀值指定的次数;对于其它超出阀值的TC-BPDU,定时器到期后交换机只对其统一处理一次;这样可以避免频繁地删除MAC地址表和ARP表,达到保护设备的作用;

RSTP与STP的互操作:

RSTP可以和STP互操作,但是此时会丧失RSTP快速收敛特性;

当一个网段既有运行STP的交换网络,又有运行RSTP的交换设备时,STP设备会忽略RST BPDU,而运行RSTP设备的端口接收到STP的配置BPDU时,会在两个Hello time时间之后将自己的端口转换到STP工作模式,发送STP 配置BPDU,这样就实现了互操作;

上一篇下一篇

猜你喜欢

热点阅读