三、工作原理
STP的基本原理是在一个有二层环路的网络中,交换机通过运行STP,自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做STP树(STP Tree),树节点为某些交换机,树枝为某些链路。当网络拓扑发生变化时,STP树也会自动地发生相应的改变。
1、选举简介
**STP树的生成过程是:**首先选举根桥,然后确定根端口和指定端口,最后阻塞备用端口。(上右图)
(1)首先在交换网络中选举一个根桥(Root Bridge)
选举根桥,就是选根交换机。STP在交换网络中开始工作后,每个交换机都会向网络中发送配置BPDU。配置BPDU中包含交换机自己的桥ID(BID)。
在一个连续的STP交换网络中只会存在一个根桥,比较全网最小的BID的交换机成为根桥,根桥具备抢占性,具备唯一性。除根桥外,其余交换机成为非根桥。
首先比较桥的优先级,默认都是32768,越小越优先。优先级一样,对比桥MAC,也是越小越优先,根桥上所有端口都是指定(DP)端口。(根桥上的指定(DP)端口不会被阻塞)
为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0。
(2)在每台非根交换机(根桥)选举一个根端口(RP)
在每个非根桥交换机都会在自己的接口中选举一个根端口(RP:接受来自根桥最好BPDU的接口)
非根桥交换机上有且只会有一个根接口。当非根桥交换机有多个接口接入网络中时,根接口是其收到最优配置BPDU的接口。
(3)在每条链路选举出一个指定端口(DP)
根接口选举出来后,每段链路上有且只有一个指定端口,在每条链路上(冲突域)都会选举一个指定端口。(DP:负责在链路上转发根桥最好BPDU的接口,一般情况下,根桥所有的接口都是DP口)
对比该段链路两端的桥的优先级及桥MAC,小的获胜,该桥侧的端口成为指定端口DP(不会阻塞),链路另一端的端口处于阻塞状态只有根桥能发送BPDU报文,其它桥都是转发该报文。
非根桥使用在该接口上收到的最优BPDU进行计算,然后将计算得到的配置BPDU,与除了根接口之外的,其他所有接口所收到的配置BPDU进行比较:
如果前者更优,则该接口为指定接口;
如果后者更优,则该接口为非指定接口。
一般情况下,根桥的所有接口都是指定接口。
(4)剩余端口为阻塞端口(AP)
一台交换机上,既不是非根桥的根端口(RP),也不是非根桥的指定端口(DP),则此时该接口为阻塞端口(block port)
STP操作的最后一步是阻塞网络中的非指定接口。这一步完成后,网络中的二层环路就此消除。
3、选举详细步骤(生成树算法步骤)
(1)选举根桥/交换机(Root Bridge,RB)
为什么根桥交换机的所有端口都是指定端口呢?
因为根桥交换机端口的根路径开销都是 0 ,根据选择选举原则,成为这条链路的指定端口。
1)选举依据:
STP中根桥的选举依据:桥ID(BID)
1、先比较BID(桥)优先级,越小越优(优先级默认为32768),如果优先级一致,下一步 。
2、再比较MAC地址(MAC越小越优)。
(上图)交换机S1、S2、S3都使用了默认的桥优先级32768,则需要比较MAC地址,S1中MAC地址小显然S1的BID最小,所以最终S1被选举为根桥。
BID最小的交换机称为根桥(根桥可以被抢夺)
2)选举过程:
①每一台交换机启动STP后,都认为自己是根桥,根桥上的所有端口都是指定端口;
②BPDU报文通过交换机的所有端口进行转发,当某一端口收到自己的BPDU报文时会将其阻塞掉;
③对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID,如果桥ID相同,再比较MAC地址大小。
④ 最后,在整个网络中里面会有一个桥ID最小的交换机,这个交换机就是整个网络的根桥。
根桥选出后,其他交换机都可以叫指定桥。指定桥不再主动发出BPDU,只会转发根桥的BPDU。根桥每间隔Hello Time(默认2秒)时间周期性发出BPDU。
详细过程:
STP交换机初始启动之后,每台交换机都会认为自己是根桥,从所有启动的端口发送BPDU,并在发送给其他交换机的宣告自己是根桥,当交换机从网络中收到其他设备发送过来的BPUD时,会比较BPUD中指定的根桥BID和自己的BID,交换机不断交互BPUD同时进行比较,直至选举出一台BID值最小的交换机作为根桥。
根桥会在固定的时间间隔发送BPDU ,其它设备对BPDU进行转发,从而保证网络拓扑的稳定。
根桥是可以抢占的,在STP完成网络收敛后,如果网络中接入一台新的交换机,且新增交换机的优先级比根桥交换机更优,那么新增交换机会成为网络中新的根桥。同时,STP将会重新收敛、重新计算网络拓扑,这个过程会引发网络震荡,对流量的正常转发造成影响。
3)优先级修改命令:
stp priority 4096 //修改桥优先级,取值范围为0到65535,为4096倍数。
stp root primary //交换机会自动降低优先级使自己成为根桥。
**注意:**通常在企业里面,将核心交换机优先级设为最低。
(2)选举根端口(Root Port,RP)
根桥上的端口是指定端口,不是根端口。每个交换机有且仅有一个根端口。
根桥(RB)选举出来后,其它没有成为根桥的交换机都为非根桥。STP 会为每个非根桥选举一个根接口,也就是在交换机的所有端口中,选择距离根桥最近的一个端口,这就是根端口。
每台非根桥设备可能会有多个端口与网络相连,为了保证从某台非根桥设备到根桥的工作路径是最优且唯一,必须从该非根桥设备的端口中确定出一个被成为"根端口"的端口,由根端口来做为非根桥设备与根桥设备之间进行报文交互的端口,一台非根桥设备上最多只能有一个根端口。
如果有两个或两个以上的端口计算得到的累计路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。
**根端口选举依据:**非根交换机在选举根端口时分别依据该端口的
- 根路径开销、②对端桥ID(BID,Bridge ID)、③对端PID(PID,Port ID)、④本端PID
那是如何选择根端口的呢?
根桥周期性的发送BPDU ,非根桥的所有端口都能收到BPDU,对比端口收到的BPDU中的参数值。
根端口选举规则:
1、在非根桥设备上选择,比较端口收到的BPDU报文中Root ID最小的,为根端口(同一根桥,Root ID是一致的)
2、非根设备上 所有的端口中选择一个离根最近的。
1)RPC根路径开销(跟链路带宽有直接关系)。(越小越优)
2)比较对端的桥ID(BID,由优先级与桥MAC组成)。(越小越优)
3)比较对端的端口ID(PID,由优先级与端口号组成)。(越小越优)
4)比较本端的端口ID(PID,由优先级与端口号组成)。(越小越优)
如何衡量离根最近呢?
1、根据RPC选举根端口。
比较入方向的开销值RPC(越小越好) -->标准 = 802.1t标准 [802.1d/legacy 不使用的]
G=1000m==20000 取值 2W E=100M ==200000 取值 20W
**如图,**假定S1已被选为根桥,现在S3需要从1 端口和2端口中确定除根端口。显然,S3的2端口的RPC为20000;S3的1端口的RPC为200000+20 000=220000,交换机会将RPC最小的那个端口确定为自己的根端口,因此,S3将2端口确定为自己的根端口,同理,S2将自己的1端口确定为根端口。
2、根据对端BID选举根端口。
比较端口接收BPDU的BID。
在实际应用中一台非根桥设备上的RPC可能是相同的,如图所示,假定S1已被选为根桥。对于S4而言,1端口和2端口到根桥的RPC都是相同的,这种情况下就需要根据对端BID来选举根端口。对于S4而言,它的对端BID也就是S2的BID和S3的BID。相比较之后假设S2的BID小,则1端口为S4根端口;反之,2端口就为S4的根端口。
3、根据对端PID选举根端口。
比较端口接收BPDU的PID。
如图,二台设备在这种连接方式下非根桥的RPC、对端BID均是相同的,这种情况下需要根据对端PID来选举根端口。对于S2而言,它的对端PID就是Root的GE0/0/1口和GE0/0/2口,假设Root的端口优先级都是128,那么Root的端口编号就是1和2。显然Root的GE 0/0/1的PID更小,所以与之相连接的S2设备的GE 0/0/1端口就被选为根端口。
4、根据本端PID选举根端口。
比较自身设备的PID参数
如图,二台设备中间通过一台HUB相连接。在这种方式下的非根桥的RPC、对端BID、对端PID均是相同的,这种情况就需要根据本端PID来选举根端口。假设S2的端口优先级都是128,那么显然1端口的PID更小。因此,S2的1端口就被选为了根端口。
选举顺序:
第一步:根据RPC选举根端口。
比较入方向的开销值RPC(越小越好) -->标准 = 802.1t标准
由于交换机上接入网络的端口数量可能较多,谁是根端口?
根端口 是距离根桥最近的端口,这个最近的衡量标准是靠路径开销来判定的,即根路径开销(RPC)最小的端口就是根端口。
STP中每条物理链路都有开销,开销值和链路带宽、聚合有关,值越小越优。
如上面左图中,SWA为根桥,那么SWA上没有根端口 (RP),只有指定端口。非根桥(指定桥)SWB端口E0/1的根路径开销(RPC)为10,端口E0/2的RPC为30+20=50(经过SWC),所以E0/1为根端口(RP)。同理,SWC上的根端口RP为端口E0/1。
第二步:如果根路径开销一样,选择对端桥ID(BID)最小的。
(如上面右图中)SWB可以选出根端口(RP)为E0/1。可是SWC两个端口的根路径开销(RPC)都是10。
这种情况,当根路径开销(RPC)比不出来时,就比较对端的桥ID(BID),也就是给你发BPDU的桥ID(BID)谁更优(越小越优)。
给SWC端口E0/1发送BPDU的是SWA,桥ID(BID)为0.MAC_A;
给SWC端口E0/2转发BPDU的是SWB,桥ID(BID)为4096.MAC_B;
显然SWA的桥ID(BID)更优,所以SWC的E0/1为根端口。
第三步:如果对端桥ID(BID)也相同,选择对端端口ID(PID)最小的(这步一般在聚合链路中使用)
如上面左图中,两台交换机通过两条链路相连接,链路开销相同。
SWA为根桥,SWB的端口E0/1和E0/2谁是根端口呢?
根路径开销(RPC)相同,指定桥ID都是SWA,也相同!
这时,比较**对端端口ID(PID):**是指给我发BPDU的交换机是用哪个端口发的!
很显然,SWA用E0/1端口给SWB的E0/2端口发BPDU,SWA用E0/2端口给SWB的E0/1端口发BPDU。SWA上的两个端口中,E0/1的端口ID(PID)较优(优先级相同,编号小的优)。SWB E0/2是根端口!
第四步:如果指定端口ID也相同,比较PID
如上面右图中,两台交换机间接了一台Hub,或是一台没有运行STP的交换机,并透传BPDU。
假设各链路开销均相同,那么,SWB的两个端口比根路径开销(RPC)、指定桥ID以及指定端口ID,都无法比出高下,胜负难分。
这时,还有一个绝招,比Bridge Port ID,简单点说,就是比两个端口的端口ID(PID)谁更优。
先比PID中的优先级,越小越优,如果一样,端口编号越小越优。E0/1是根端口
注意,这里说的指定端口是一种端口的角色,跟刚才说的用来选根端口的指定端口不是一个意思。
如果两个或两个以上的端口连接到同一台交换机上,则选择发送者PID最小的那个端口作为根端口。
如果两个或两个以上的端口通过Hub连接到同一台交换机的同一个接口上,则选择本交换机的这些端口中的PID最小的作为根端口。
(3)选举指定端口(Designated Ports,DP)
根端口保证了交换机与根桥之间工作路径的唯一性和最优性。
每两台非根交换机之间每一条链路选举出一个指定端口。
为了防止工作环路的存在,网络中每个网段与根桥之间的工作路径也必须是唯一且最优的。
当一条链路中有两条或两条以上的路径到达根桥,就必须确定出一个唯一的指定端口 ,防止出现二层环路。指定端口不但是这条链路内所有端口中到达根桥的最优接口,还会向链路内发送 BPDU。
指定端口也是通过比较RPC来确定的,RPC较小的端口将成为指定端口。如果RPC相同,则需要比较BID、PID等。
1)选举依据:
- 根交换机的所有端口都是指定端口DP。
- 根端口的对端端口一定是指定端口DP。
- BPDU转发端口到根交换机的路径成本最小
- 本端的网桥ID(BID)最小
剩余端口成为备用端口AP(Alternate Port),将他们阻塞
2)选举规则:
1.RPC根路径开销(跟链路带宽有直接关系)。(越小越优)
2.彼此桥ID(BID,由优先级与桥MAC组成)。(越小越优)
3.自身的端口ID(PID,由优先级与端口号组成)。(越小越优)
3)指定端口的选举
指定端口的选举和根端口不同:
(1)根端口是每台交换机上的所有端口共同参与选举,自己家里搞内斗,选出唯一仅有的一个;
(2)指定端口是在每条物理链路上选出一个,是相连接的不同交换机之间的端口进行选举,是跟外人斗。
首先,根端口对面的端口一定是指定端口 。每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路)。
如图中,SWB与SWA相连接的链路上SWB的E0/1端口为根端口(RP),则它对面SWA上的端口E0/1就是指定端口(DP)。
同样的,SWC与SWA相连接链路上的指定端口(DP)为SWA的E0/2端口。
在没有根端口的链路上怎么选举指定端口呢?(如上面左图中)
SWB与SWC相连接的链路上,指定端口(DP)是SWB的E0/2端口,还是SWC的E0/2端口呢?
首先,比较两个端口的根路径开销(Root Path Cost,RPC)谁更小。
先看SWB的E0/2端口,它的根路径开销(RPC)是多少呢?是15,还是5?正确答案是5!
可以这样来理解:
SWB当初在选举根端口时,E0/2败给了E0/1,是因为从E0/1出去到达根桥更近,RPC=5,而从E0/2出去到达根桥的RPC=15。
现在,选举指定端口是SWB上的端口与其他交换机的端口之间进行比较,是跟外人比较,SWB当然认为自己身上所有端口的RPC都是5,同样,SWC也认为自己身上所有端口的RPC都是10。
很显然,SWB的E0/2端口的RPC更小,所以被选举为这条链路上的指定端口。
如果RPC相同呢?
如上面右图中,SWB的E0/2端口与SWC的E0/2端口,RPC都为5。
这时,就"拼爹"了,比较端口所在交换机的BID谁更优:
SWB的BID为4096.MAC_B,SWC的BID为32768.MAC_C,显然,SWB的BID更优,所以SWB的端口E0/2为这条链路的指定端口。
如果BID也相同?
不会的,如果BID也相同,这条链路就不存在了,还选什么指定端口呢。
AP端口被阻塞后,不会再向外发送任何数据,包括BPDU。但是为了STP保持正常,别人给它发的BPDU依然接收,其他数据则不再接收,全部丢弃。
至此,STP计算完成,环路消除,生成树收敛。
dis stp brief //查看接口状态 接口角色
(4)选举替代/备用/预备端口(Alternate Port,AP)
每条链路上的指定端口选好后,交换机上所有剩下来的所有端口,非根端口和非指定端口都叫做备用端口(AP,Alternate Port)。备用端口是打破环路的关键,STP都会把这些端口进行逻辑阻塞。
**逻辑阻塞:**是指这些备用端口不会接收或发送任何数据,但是会监听BPDU。当网络的一些端口出现故障时,STP 会让备用端口开始转发数据,用来恢复网络的正常通信
最后是选择AP端口,AP端口是RP端口备份。
端口被选举为AP后,端口将会被阻塞,从而达到破环的目的,在这个过程中,端口只会监听BPDU,不会中继BPDU,更不会转发业务流量。
1)选举规则:
如果一个端口在一条链路上收到另外一个网桥的更好的 BPDU,但不是最好的,那么这个端口成为替换端口。
如图,一旦备用端口被逻辑阻塞后,STP树(无环工作拓扑)的生成过程便告完成。
整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun 暗号:CSDN】