一、概念
1.以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。
作用:防止环路。
2.生成树分类
二、STP
1.根桥(root bridge)
对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定。
作用:负责通知网络拓扑信息,如拓扑变更,则根桥进行通知每一个在此网络拓扑中的交换机重新进STP根桥的选举。选取规则
桥ID=优先级(默认32768)+背板MAC(第一个端口的MAC)/vlan号。越小越优,先比较优先
级,小的成为根桥;若优先级一样,则比较背板MAC地址,小的成为根桥。
注意:选举开始前,同vlan的所有交换机都发送BPDU,每个交换机收到BPDU后与自己的桥ID比较,直到选出根桥。
2.BPDU报文:网桥数据单元
BPDU在以下3种情况下会产生:
①只要端口使能STP,则BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
②当根端口收到BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份BPDU。
③当指定端口收到比自己差的BPDU时,会立刻向下游设备发送自己的BPDU。
3.端口角色:
①根端口(RP):在每个非根桥的交换机上选一个根端口,根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据。
选取规则(单条链路):a.开销--越小越优。(带宽--开销:10M--100,100M--19,1G--4,10G--2)
b.一条链路中,对方交换机桥ID越小越优,每个与根桥相连的端口就是根端口
c.端口ID--端口优先级(默认128)+端口号,发送方的端口ID越小越优。
②指定端口(DP):转发BPDU。
选取规则(单条链路):
a.开销--越小越优。(带宽--开销:10M--100,100M--19,1G--4,10G--2)
b.一条链路中,对方交换机桥ID越小越优,每个与根桥相连的端口就是根端口
c.端口ID--端口优先级(默认128)+端口号,发送方的端口ID越小越优。
③非指定端口(NDP):选完根端口和指定端口剩下的就是非指定端口。
注意:1.根桥上没有根端口和非指定端口,一般情况下是指定端口。
2.根桥上所有端口都发送和转发BPDU。
④一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根非指定端口都处于阻塞(Blocking)状态,它们只接收STP协议报文而不转发用户流量。
4.五个端口状态
①down--物理关闭状态
②listening--监听状态,宣告自己加入该生成树,监听BPDU,选根桥、根端口和指定端口。不能转发数据流,延时时间15s,15s内没收到BPDU进入下一状态。
③learning--学习状态,构建MAC地址表,监听BPDU,不能转发数据流,延时时间15s,15s内没收到BPDU进入下一状态。
④forwarding--能转发数据流,并不断学习新的MAC地址,监听和发送BPDU。
⑤blocking--只能监听BPDU,20s的阻塞时间(若20s内没有接收到最优的BPDU报文,则进入listening状态。)
5.改变根桥
①手动指定主次根----负载均衡
指定主根:默认优先级-8192(32768-8192=24576)
指定次根:默认优先级-4096(32768-8192=28672)
缺点:若网络中出现优先级更低的交换机,主根会变更。
②修改优先级
设置优先级<0-61440>必须是4096的倍数。
5.STP算法实现的基本过程
①初始状态
由于每个桥都认为自己是根桥,所以在每个端口所发出的BPDU中,根桥字段都是用各自的BID,Root Path Cost字段是累计的到根桥的开销,发送者BID是自己的BID,端口PID是发送该BPDU端口的端口ID。
②选择根桥
网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
③选择根端口和指定端口
参考上文根端口选举
三、RSTP(rapid-stp)
1.基本概念
快速生成树协议(Rapid Spanning Tree Protocol),该协议基于STP协议,对原有的STP协议进行了更加细致的修改和补充。
特点:收敛速度非常快,小于1s。
收敛机制:没有时间机制,取消时间和端口的状态关联 。
2.STP的不足
STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量。如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断,这是用户无法忍受的。
STP的不足之处如下:
? 首先,STP没有细致区分端口状态和端口角色,不利于初学者学习及部署。
网络协议的优劣往往取决于协议是否对各种情况加以细致区分。
○ 从用户角度来讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。
○ 从使用和配置角度来讲,端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。
根端口和指定端口可以都处于Listening状态,也可能都处于Forwarding状态。
? 其次,STP算法是被动的算法,依赖定时器等待的方式判断拓扑变化,收敛速度慢。
? 最后,STP的算法要求在稳定的拓扑中,根桥主动发出BPDU报文,而其他设备进行处理,传遍整个STP网络。这也是导致拓扑收敛慢的主要原因之一。
3.端口角色
①根端口(RP):在每个非根桥的交换机上选一个根端口,根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据。选取规则(单条链路):
a.开销--越小越优。(10M--100,100M--19,1G--4,10G--2)
b.一条链路中,对方交换机桥ID越小越优,每个与根桥相连的端口就是根端口
c.端口ID--端口优先级(默认128)+端口号,发送方的端口ID越小越优。
②指定端口(DP):转发BPDU。
选取规则(单条链路):
a.开销--越小越优。(10M--100,100M--19,1G--4,10G--2)
b.一条链路中,对方交换机桥ID越小越优,每个与根桥相连的端口就是根端口
c.端口ID--端口优先级(默认128)+端口号,发送方的端口ID越小越优。
③非指定端口(NDP):选完根端口和指定端口剩下的就是非指定端口。
④替代端口:主要给根端口做备份。
⑤备份端口:主要给指定端口做备份。
4.三种端口状态:
1.discarding--相当于blocking和listening合并,因为RSTP认为这两种状态没有学习MAC地址,只监听BPDU。
2.learning--学习状态,构建MAC地址表,监听BPDU,不能转发数据流。
3.forwarding--能转发数据流,并不断学习新的MAC地址,监听和发送BPDU。
四、MSTP
1.基本概念
多生成树生成树协议(Multiple Spanning Tree Protocol),该协议基于STP协议,对原有的STP协议进行了更加细致的修改和补充。
2.RSTP和STP不足
RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,造成带宽浪费,还有可能造成部分VLAN的报文无法转发。
MSTP功能:①形成多棵无环路的树,解决广播风暴并实现冗余备份。
②多棵生成树在vlan之间实现负载均衡,不同vlan的流量按照不同路径转发。
3.MSTP特点
①兼容STP和RSTP,既收敛快,对生成树提供了数据转发的多个冗余路径,vlan实现负载均衡。
②通过MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI(Multiple Spanning Tree Instance),每个域叫做一个MST域(MST Region:Multiple Spanning Tree Region)。
③可将多个相同拓扑的vlan映射到同一实例中,这些vlan在端口上的转发状态取决去端口的对应MST实例的状态。
4.MST域(MST Region)
①域--由域名、修订级别、vlan与实例映射关系组成,三者需一致才能在同一域中。
②域名--32字节的字符串标志MST名称。
③修正号--16bit修正值标志MST修正号。
④同一个MST域内交换机的域名、修正号、映射关系三者必须相同。
⑤交换网络中的多台交换设备以及它们之间的网段所构成一个MST域。
5.vlan与MST映射关系:
①每台交换机最多创建64个实例(1-64),实例0强制存在(没有配置映射关系的vlan默认属于实例 0)。
②在交换机中可以配置将vlan和不同的实例进行映射,没有被映射的vlan默认放在实例 0 中。
③没有配置映射关系前,所有vlan在实例 0 中。
6.CST
公共生成树CST(Common Spanning Tree)是连接交换网络内所有MST域的一棵生成树。
如果把每个MST域看作是一个节点,CST就是这些节点通过STP或RSTP协议计算生成的一棵生成树。
7.IST
内部生成树IST(Internal Spanning Tree)是各MST域内的一棵生成树。
IST是一个特殊的MSTI,MSTI的ID为0,通常称为MSTI0。
IST是CIST在MST域中的一个片段。
8.CIST
公共和内部生成树CIST是通过STP或RSTP协议计算生成的,连接一个交换网络内所有交换设备的单生成树。
9.域根
域根(Regional Root)分为IST(Internal Spanning Tree)域根和MSTI域根。
IST生成树中距离总根(CIST Root)最近的交换设备是IST域根。
一个MST域内可以生成多棵生成树,每棵生成树都称为一个MSTI。MSTI域根是每个多生成树实例的树根。
MSTP网络基本概念示意图
10.端口角色:
①根端口(RP):在每个非根桥的交换机上选一个根端口,用来接收BPDU,此端口到目的网络的路径最优。
选取规则(单条链路):
a.开销--越小越优。(10M--100,100M--19,1G--4,10G--2)
b.一条链路中,对方交换机桥ID越小越优,每个与根桥相连的端口就是根端口
c.端口ID--端口优先级(默认128)+端口号,发送方的端口ID越小越优。
②指定端口(DP):每2s发送和转发BPDU。
选取规则(单条链路):
a.开销--越小越优。(10M--100,100M--19,1G--4,10G--2)
b.一条链路中,对方交换机桥ID越小越优,每个与根桥相连的端口就是根端口
c.端口ID--端口优先级(默认128)+端口号,发送方的端口ID越小越优。
③A端口(alterna 端口):根端口的备份。
④B端口(backup 端口):指定端口的备份。
⑤master端口:
a.是MST域和总根相连的所有路径中最短路径上的端口,是交换设备上连接MST域到总根的端口。
b.master端口是域中报文去往总根的必经之路。
c.master端口是特殊域边缘端口,master端口在CIST的角色是root port,在其他各实例上的角色都是master端口。
⑥域边缘端口:指的是位于MST域边缘并连接其他MST域或者CIT的端口。
⑦边缘端口:a.如果指定端口位于整个域的边缘,不再与任何设备连接,这种端口就叫做边缘端口。
b.边缘端口一般与用户终端设备直接连接。
c.端口使用了MSTP功能后,会默认启动边缘自动探测功能,当端口经过(2*hello时间+1)秒后的时间收不到BPDU报文,自动将端口设置成边缘端口 ,否则就是非边缘端口。
11.端口状态
MSTP的端口状态与RSTP定义相同
1.discarding--相当于blocking和listening合并,因为RSTP认为这两种状态没有学习MAC地址,只监听BPDU。
2.learning--学习状态,构建MAC地址表,监听BPDU,不能转发数据流。
3.forwarding--能转发数据流,并不断学习新的MAC地址,监听和发送BPDU。
注意:1.根端口、master端口、指定端口、域边缘端口支持forwording、learning、discarding状态
A端口B端口仅支持discarding状态。
2.根端口、指定端口、A端口、B端口、边缘端口的作用与RSTP里的端口定义一样,除了边缘
端口意外,其他端口角色都参与MSTP的计算中(同一域内)。
五、STP特性
收敛:一个网络区域从初始化开始经过监听、学习到可以进行数据转发的过程。
收敛时间:收敛过程需要的总时长。
作用:提高收敛速度
1.portfast
对象:连接到主机/服务器的端口上,面向终端(接入层),配置在交换机端口。
原理:直接让配置portfast的交换机端口直接过渡到转发状态,可以提高传输速率,大约节省30s。
2.uplinkfast(思科私有)
提供了非根桥的交换机上快速切换根端口的能力,切换后端口状态变为根端口,跳过listening(15s)、
learning(15s)状态直接过渡到转发状态,将收敛时间减少到1s内。
交换机至少有一个端口处于被阻塞状态,链路失效必须发生在根端口时才有意义,常在双上行去往根桥
的交换机上配置uplinkfast。
一旦配置成uplinkfast,交换机会自动调整一些STP的参数,所有该特性
谨慎使用,参数改变会引起STP拓扑的变化。
a.优先级会增加32768+4096,保证该交换机不会被选为根桥。
b.开销,交换机上所有的端口cost值都增加3000,保证交换机上端口不会被选为指定端口。
uplinkfast通常在老式交换机上使用,新式交换机常用802.1s (MSTP)、802.w (RSTP)。
3.backbonefast--主要检测非直连链路的有效性。
非直连链路:数据不经过的链路,也不经过根端口,包括阻塞端口。
对象:全部设备都可启用
原理:一般情况下只有根桥才会发送配置BPDU,若有非根桥设备无法正常获取根桥发送的BPDU,则此根桥
认为自己是根桥,于是发送一种比根桥发送的BPDU优先级高一点的BPDU(次优BPDU),若其他非根
桥设备收到则会丢弃,20s后阻塞端口重新进入监听状态,并想根桥询问是否存活,若根桥回复存活,
那么就为该设备提供新链路,最终过渡到转发状态。(20s+30s=50s)
根本原因:接收者默认收到次优BPDU直接丢弃,用20s,这时候剔除backbonefast特性,该特性识别到次优BPDU,给
根桥发送RLQ(根链路询问)询问根桥是否存活,若收到根桥回复(存活),那么就为该设备提供新链路,过渡到
转发状态(30s),节省20s。
4.使用特性后的防护手段
a.BPDUguard--BPDU防护
对象:在开启了portfast端口上使用
原理:正常情况下,连接到主机/服务器的端口是不会收到BPDU,此时开启portfast可以收到,但若收到BPDU就
意味着对端可能连接到交换机了,可能产生环路。BPDU防护用来监听该端口是否收到BPDU,若收到则使该
端口down,并且把这个端口状态设置为err-disable(假死状态)。
b.BPDUfilter--BPDU过滤--谨慎使用
对象:在开启了portfast端口上使用。
原理:如果连接的主机/服务器的主机端口,没必要向对端发送BPDU报文,就有BPDU过滤,将该端口发出的
BPDU报文进行过滤。
注意:如果同时配置防护和过滤,过滤基本更高,只用过滤有效果。
c.rootguard--根防护
对象:在可能接收到更优的BPDU报文的根端口上。
作用:巩固根桥地位。
原理:启用根防护,监听BPDU(发送/接收/传输流量),是监听到比根桥更优先的BPDU,就会立即将该端口置
为不一致状态(只能监听BPDU)知道该端口不再监听到更优先的BPDU报文,恢复端口状态,保证根地位。
d.loopguard--环路防护
单向链路故障--一端能发,另一端不能收
对象:根端口/阻塞端口
原理:启用loopguard防护,监听BPDU,只有监听到,才不触发防护,若监听不到,会认为出现故障,触发防护
端口就会变成不一致状态,这个端口只能监听BPDU报文,不能传输数据,直到该端口重新监听到BPDU后才
会恢复。
注意:环路防护主要检测该交换机里是否能转发/接收BPDU。
e.UDLD--检测单项链路故障
原理:启用BPDU会定期给邻居发送UDLDhello包,若无回复,认为该链路出现故障,从而采取措施缓解故障。
模式:①普通模式--措施:将端口置为不一致状态。
②夸张模式:先发一次HELLO包,对方无回复,重新发8次,若还不回,则出现故障,直接down了端口,
置为err-disable状态。
原文:https://www.cnblogs.com/cp-cp/p/13768941.html