A. STP、RSTP
为了提高网络可靠性,避免单点故障而导致网络中断,常常需要在网络中部署冗余链路或冗余设备,但是部署了冗余链路或冗余设备的网络,也会从无环的树型网络结构变为环形网络结构,环形网络结构会带来新的问题:
1、广播风暴导致网络不可用
因为交换机收到广播帧,会将广播帧从接收端口外的所有接口转发出去;
广播帧就会在环形网络中无限循环转发,随着广播帧的增加,最终导致整个网络的资源被耗尽,网络瘫痪不可用;
2、MAC地址表震荡导致MAC地址表被破坏
即使是单播报文,也有可能导致交换机的MAC地址表项混乱,破坏交换机的MAC地址表;
因为交换机接收到未知单播帧后,也会向除接收端口外的所有接口转发;
未知单播帧就会在环形网络中无限循环转发,同一交换机不断的从不同的接口学到未知单播帧,交换机就会不停的修改MAC地址表,导致MAC地址表震荡,破坏MAC地址;
STP根据IEEE 802.1D标准建立,用于在局域网中消除二层环路的问题;
运行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)没有细致区分端口状态和端口角色;
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,这样就实现了互操作;