STP/RSTP协议(一)
STP/RSTP生成树及快速生成树协议
部分笔记摘自:
https://blog.csdn.net/qq_38265137/article/details/80404349?ops_request_misc=&request_id=&biz_id=102&utm_source=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0
https://blog.csdn.net/sitiao2009/article/details/47322239?ops_request_misc={“request_id”%3A"158279347019724835841555"%2C"scm"%3A"20140713.130056874…"}&request_id=158279347019724835841555&biz_id=0&utm_source=distribute.pc_search_result.none-task
生成树协议
- STP定义
- STP原理
- STP的各类选举
- STP报文
- STP的拓扑变化
- 端口迁移过程
一.STP定义
生成树协议STP(Spanning Tree Protocol)将环形网络修剪成为一个无环的树型网络,避免报文在环形网络中的增生和无限循环。
STP可以解决的问题
1.广播风暴——没有STP,则网络中会出现环路,一台交换机若从接口收到一个广播帧,那么交换机会将这个广播帧从除收到这个广播帧的接口外所有的接口发送,另一台交换机若收到这个广播帧,会以同样的方法进行泛洪,而这些数据帧就会一直在环路中传输,占用网络资源。
2.重复帧传输——目的站点可能会收到同一数据帧的多份拷贝,可能会造成一些无法挽回的影响。
3.MAC地址表不稳定——交换机从某一接口收到了数据帧A,因为有环路存在,又从另一接口收到了数据帧A的拷贝,这样同一MAC地址就对应了两个接口存放在MAC表中,这一现象叫做漂移MAC地址。
二.STP的基本原理
交换机运行该协议时,通过彼此交互STP帧来发现网络中的环路,并有选择的对某个端口进行阻塞,阻断冗余链路,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降,并在网络的物理拓扑发生变化时重新建立STP树。
三.STP的各类选举
名词引入
-
根桥
对于一个STP/RSTP网络,根桥有且只有一个,它是整个网络的逻辑中心,根据网络拓扑的变化,根桥可能改变。 -
网桥ID (BID)=桥优先级+Mac
默认优先级 32768 8*4096
桥的MAC地址0016-0016-3333
BID= 8000-0016-0016-3333 8字节(两字节优先级六字节MAC地址) 16个十六进制数
桥的MAC地址为交换机中网卡中MAC地址最小的 -
端口ID (PID)=端口优先级+端口编号
默认优先级 128
PID(16位) = 端口优先级(4位) + 端口号(12位)16个比特位组成 -
路径开销(RPC)
路径开销是STP/RSTP协议用于选择链路的参考值。STP/RSTP协议通过计算路径开销,阻塞多余的链路,将网络修剪成无环路的树形网络结构。
在一个STP/RSTP网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的开销。
根交换机的端口的路径开销都为0
STP将一个环形网络生成无环拓扑的步骤:
1.选择根桥——Root Bridge 每个广播域只有一个根桥
2.选择根端口——Root Ports
3.选择指定端口——Designated Ports
4.网络中冗余的接口将被阻止
根桥的选举
过程:生成树中只有一个交换机能够成为根桥,首先交换机根据自己的STP逻辑拓扑,向相邻交换机发送HELLO BPDU,声称自己是根交换机。交换机将收到的HELLO BPDU进行比较,选举出最优的BPDU。若收到的HELLO包的根ID比自身发出的HELLO包BID要优,则该交换机就会停止产生和发送HELLO包,即停止声明自己是最优的根,然后交换机开始转发收到的更优的BPDU。不断经过此过程,直到除根交换机之外,所有的交换机都将停止产生并发送自身的HELLO包。
选举:
1.BID是不会重复的,通过比较BID选举,优选BID小的。
BID由优先级+MAC地址组成。
2.首先比较优先级,优先级越小越优。
3.如果优先级一样,比较MAC地址,MAC地址越小越优。
根端口的选举——确定交换机和根桥之间工作的唯一性和最优性
根端口用来与根桥之间进行报文交换的端口,是到根桥工作路径最优的端口,一台非根桥设备上只能有一个根端口。
过程: 选举出根交换机之后,其他交换机需要确定他们各自唯一的根端口。
1.根交换机每隔HELLO计时器(默认是2s),就会创建并发送一个HELLO,HELLO中的RBID(根桥的BID)和SBID(发送方BID)都设置为根ID,RPC设置为0,SPID设置为出端口的标识符
2.每台非根交换机在每个端口上收到一个BPDU后,就会将端口的RPC加到这个BPDU中,形成(Result BPDU)结果BPDU,交换机会比较所有的结果BPDU,收到最优BPDU的端口将成为根端口
注意:
-
非根交换机在根端口上收到HELLO,在更新其完成的RPC,SBID,SPID和信息老化字段之后,会通过其他指定端口发送这个HELLO,非根交换机在其他端口上收到的HELLO只会被处理,不会被转发。
-
交换机的根端口和阻塞端口总是不发送HELLO包的,因为在该网段中,对端邻居的指定端口的HELLO包一定是本端优先级要高的。
选举:
根端口是非根桥交换机用来接收来自根桥交换机方向的BPDU,因此首先需要计算流量从根交换机到达非根交换机上的哪个端口开销(Cost)最小,通俗点说就是,如果根交换机要发送BPDU到某台非根交换机,发送到该非根桥交换机的哪个端口最省时省力。
- 非根桥交换机上,哪个端口到根桥的开销(确切来说,应该是从根桥到达非根交换机的每个端口的开销,这才是正确的方向)最小,开销最小的端口,即为该非根交换机的根端口。开销越小越优
- 如果到达根桥开销一样,此时再比较上一级(接收BPDU方向)发送者的桥ID。选出发送者桥ID最小的对应的端口。上行的BID越小越优
- 如果上一级发送者桥ID也一样,在比较发送端口的优先级。选出优先级最小的对应的端口。发送者PID越小越优
- 如果发送端口优先级也一样,在比较发送端口的端口号(比如f0/0、f0/1)。发送者端口号越小越优
PS:比较过程中选出的端口为非根交换机上的根端口,该根端口主要用来接收来自根桥方向的BPDU。拓扑发生变化时也发送TCN。
指定端口的选举——确定每个网段与根桥之间的的最优唯一路径
-
当一个网段有两条及两条以上的路径通往根桥时(该网段连接了不同的交换机或者该网段与同一交换机有多个接口),这时就必须确定出一个唯一的指定端口。
-
根桥的所有接口都是指定端口
-
网段中发送最优BPDU的端口将成为指定端口
- 通过选举的指定端口转发来自根交换机的BPDU到其他非根交换机效率最高(其实根端口对端的端口肯定是指定端口)
- 当指定端口所在链路发送故障时,通过此指定端口所属的交换机发送TCN到根交换机效率最高。cost小即效率高。
指定端口的重要作用还是为了考虑链路发生改变的情况。以此选指定端口可以只参考这条依据:当一条链路物理故障时,通过链路两端的哪个端口所属交换机发回TCN到根桥的开销最小,则那个端口就是这条链路的指定端口。(到根桥途中不要经过该链路上的另一个端口)
选举:
- 根桥上的所有端口都是指定端口。
- 每条链路上有两个端口,那个端口到根桥的开销最小,最小的是指定端口。开销最小
- 若开销相同,则比较上行(靠近根桥的一侧)设备的BID,上行设备BID较小的端口作为根端口。上行BID最小
- 若上行设备的BID相同,则比较上行设备的PID,较小的作为根端口。上行PID最小
- 如果发送端口优先级也一样,在比较发送端口的端口号(比如f0/0、f0/1)。发送者的端口号最小
阻塞备用端口
确定了根端口和指定端口后,交换机上剩余的非根端口和非指定端口统称为备用端口。
四.STP报文
Configuration BPDU
①Configuration BPDU
在初始形成STP树的过程中,各STP交换机都会周期性的(缺省为2s)主动产生并发送Configuration BPDU。在STP树形成后的稳定期,只有根桥才会周期性的(缺省2S)主动产生并发送BPDU,相应地非根交换机会从自己的根端口周期性地接收到Configuration BPDU ,并立即触发而产生自己的Configuration BPDU,且从自己的指定端口发送出去。这一过程看起来就像是根桥发出的Configuration BPDU 逐跳地经过了其他的交换机。
STP和RSTP的配置BPDU的区别
1.在802.1D里,配置BPDU在生成树初始化时由各Bridge自己生成,当接收到更优的BPDU时,改用更优的BPDU,当STP域收敛时,全网的配置BPDU都是由Root Bridge的配置BPDU。每台Bridge都有可能修改BPDU的内容,例如TCA标记,开销
2.在802.1W里该BPDU改为全部由Bridge自己生成,只是在Root ID里填上了已知Root Bridge 的Bridge ID 。配置BPDU由本机产生这点非常重要,这直接使得RSTP在拓扑变更时无需等待Root Bridge的配置BPDU,即可刷新MAC表。
②TCN BPDU
TCN BPDU报文:拓扑改变通知。TCN BPDU报文只能由非根桥发出,通告给根桥。
TCA BPDU报文:用于确认接收到的TCN PBDU报文。
TC BPDU报文:只能由根桥发起,连续发送35s(MAX age + Forwarding delay)。
非根桥收到TC BPDU报文后会将MAC地址的老化时间设置为15s,加速老化。
五.STP的拓扑变化
STP触发拓扑改变条件:
一个端口从forwarding状态过渡到disable或blocking状态。
一个非根桥如果从指定端口接收到TCN BPDU包,需要向根桥装发TCN BPDU包。
一个端口进入转发状态,并且本地已存在一个指端端口。
发生拓扑变更的三种情况
- 直接拓扑变更
端口可以直接检测到的变更。直接发送TCN BPDU给根桥,收敛时间大约是转发延迟的两倍。 - 间接拓扑变更
链路状态仍未UP,链路状态正常但是数据传输出现了问题,端口无法直接识别。这种间接性的变更,拓扑不会直接发送变化,等到一端在计时器范围内没有收到来自根桥的消息时,才会通告拓扑变化,因为计时器的关系,要比直接拓扑变更收敛要慢。 - 无意义拓扑变更
终端关机,连接到PC端的端口发送TCN BPDU,但不会影响其他交换机之间的通信,结果为所有交换机将关机主机的MAC地址从(CAM)表中抹去,所以可以在连接终端用户的交换机端口上启用PortFast特性。PortFast端口的up或down不会导致TCN消息的产生。
当STP树稳定后,如果某条链路发生了改变,导致拓扑发生了改变,感知到拓扑变化的交换机会以HELLO TIME为间隔向上游交换机发送TCN BPDU,直至收到来自上游的带有TC为1的Configuration BPDU。上游交换机接收到TCN BPDU会通过指定端口回复TCA为1的Configuration BPDU。一方面继续向上游发送TCN BPDU,直到根桥接收到TCN BPDU根桥向各个端口通告带有TC为1的 Configuration BPDU,通知所有交换机网路拓扑发生了变化。。交换机收到TC为1的Configuration BPDU后便意识到网络拓扑已经发生了变化,这说明自己的MAC表可能已经不是正确的了,这时交换机会将自己的MAC地址老化周期(缺省为30S)缩短为Forward Delay的时间长度,以加速老化掉原来的地址表项。
例如,本来网桥A和根桥之间是没有直连链路的,现在有了一条直连链路,该链路上两个接口首先经过20S的BPDU最大超时时长,随后进入Listening状态,可以发送和接收BPDU,此时比较之下A就会将与ROOT直连的端口变为根端口(开销较小),端口状态由Blocking变为了Forwarding状态,拓扑发生改变,通过这条链路发送一个TCN BPDU给根桥,根桥接收到之后发送带有 TC标记的BPDU通告网络内其余交换机活动拓扑发生改变,包括自己在内的交换机加速老化MAC地址表。
六.STP的端口状态
按状态划分端口共有五种,去能状态,阻塞状态,侦听状态,学习状态,转发状态。
- 去能状态(Disabled):端口无法接收和发送任何帧,端口处于down状态。
- 阻塞状态(Blocking):只能接收STP帧,不能发送STP帧,也不能转发用户数据帧。
- 侦听状态(Listening):可以接收并发送STP协议帧,但不能进行MAC地址学习,也不能转发用户数据帧。
- 学习状态(Learning):可以接收并发送STP协议帧,也可以进行MAC地址学习接收数据帧,不能转发用户数据帧
- 转发状态(Forward):可以接收并发送STP协议帧,可以进行MAC地址学习,可以转发用户数据帧。
七.STP的端口迁移
20s(Max age让交换机都开机运行STP的准备时间)+15s(稳定端口角色状态)+15s(学习MAC地址表)
过程:
- 交换机在同一时刻启动时,各个交换机的端口立即从去能状态变为阻塞状态,这个状态只可以接收STP数据包,无法发送STP数据包。所以任何端口都收不到BPDU。经过MAX AGE时间(默认为20S)后,每台交换机都会认为自己是根桥,各个端口变为为侦听模式,可以发送并接收数据包。
- 交换机的端口进入监听模式后,开始发送自己的Configuration BPDU ,同时也接收来自其他交换机的Configuration BPDU。若交换机A接收到的来自交换机B的BPDU中的BID,比自身的BID小,则认为交换机B为根桥,并将发送的Configuration BPDU中的根桥BID改为B交换机的BID。若交换机C接收到来自交换机B的BPDU中的BID,比自身要大,则还是认为自身为根桥,并向来源方交换机B发送Configuration BPDU,交换机B就会知道,交换机C为根桥,重复至所有都同步即可。
- 交换机会将接收到根桥BID信息的端口设为根端口。同时通过比较BID,和PID,可以确定指定端口。
- 端口在经过持续时间为Forward Delay(15S)的时间后,根端口和指定端口会进入学习状态,其余端口会进入Blocking状态。
- 端口进入Learning状态后,在Forward Delay(15S)的时间内,在此时间内交换机可以开始学习MAC地址与这些端口的映射关系,同时希望STP树在这段时间内能够完全收敛。
- 然后端口会相继进入Forward状态,开始用户数据帧的转发工作。
八.STP端口特性
-
Portfast
功能:这个特性的功能就是让一个阻塞的端口快速的进入到转发状态。而不用经过中间的监听和学习的状态,这样的话,就减少了很多端口角色的转换时间,也就减少了STP的收敛时间。
如果这个端口接收到BPDU的话,那么他就会进入到error—disable状态(相当于阻塞的状态),停止接收数据包。并且这种状态会一直持续到“error—disable”设定的超时或者是进行手动干预。
应用场景:一般是在Access接口上启用,因为在Trunk口上实现这个portfast特性,将存在产生桥接环路的危险。 -
UpLinkFast
说明:当链路或交换机故障时,快速切换备份链路,加速选举新的根端口,使备用的阻塞端口直接进入转发状态,而不经历监听与学习状态。
功能:基于定义的上行链路组,在交换机中上行链路组由根端口和所有去往根桥的代替端口组成。如果上行端口发生故障,则上行链路组中开销最小的端口将被开启作为根端口。使用伪组播(伪组播地址代表所有连接根交换机的交换机)的方式通过新的Forwarding端口向上游网络通告自己所有的MAC地址,从主用链路故障到收敛通常不会超过1S。 -
Backbone Fast
说明:可以说这个特性是对UplinkFast 特性的一种补充。Uplinkfast特性可以对连接到交换机本身的链路出故障的时候,可以准确的判断出来,并且进行快速的状态转换,但是他不能对间接的链路故障作出检测并进行修正。但是,Backbone Fast就可以。
在丢失根端口并且备份链路是采用不同的交换机情况中,这个特性就可以降低默认的收敛时间。但是这个特性的正常运作,需要网络中的所有的交换机都启用这个特性。
本质:快速接收次级BPDU,而减少20S的 MAX_AGE时间。