STP生成树协议,为此次学习当中概念较多,机制较为复杂的一个协议。后续也将附上案例将逐渐完善。此文由躺平bro同学提供思维导图支持。
本文所借鉴网站:
STP工作原理及配置
STP 基本概念
STP 选举
STP 计算过程
运行stp服务的设备彼此之间可以交互各自的设备相关信息(BPDU)从而发现网络中的环路,并通过一系列计算阻塞其中一个端口从而达到破除环路的目的,最开始未被阻塞端口假如损坏的话,被阻塞端口就会重新运行。
STP工作过程
1)选举根桥(比桥ID)
2)选举根端口:(比较RPC,对端桥ID,对端端口ID)每一台非根桥上都有且只有一个根端口。
3)选举指定端口:(比较RPC,链路对端桥ID,链路对端端口ID)每条链路上有且只有一个指定端口。
4)选举预备端口:(阻塞端口),不是根端口也不是指定端口的就是预备端口。
STP名词介绍
1.选出根桥:每个交换机运行STP后,会有个桥ID,桥ID最小的交换机为根桥。每一台运行STP的交换机都拥有一个唯一的BID在STP网络中。桥ID由桥优先级+MAC地址组成。如桥优先级相同,则比较MAC地址大小,MAC地址小的为根桥。桥优先级是可配置,范围是0~65535,默认为32768, 可修改但修改值必须为4096的倍数。
2.选出根端口:RP。每个非根桥上,选出1个接口为根端口。收到BPDU最优的端口就是根端口。
3.Cost开销:每个激活了STP的接口都维护着一个cost值,接口的cost主要用于计算根路径开销,也就是达到根的开销,接口的缺省cost除了与速率,工作模式有关,还与交换机使用的STP Cost计算有关。接口带宽越大,cost值越小。用户可以根据通过命令调整接口的cost值.Cost标准需要一致。用户也可以根据需要通过命令调整接口的Cost。
4.RPC:根路径开销。在STP的拓扑计算过程中,非常重要的环节即丈量交换机某个接口到根桥的成本,也就是RPC。一台设备从某个接口到达根桥的RPC等于根桥到该接口所有入方向的接口的cost的累加。请注意不是从交换机接口的到根桥的开销总和。而是从根桥到交换机接口的入方向的开销总和。非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC,并生成无环树状网络。根桥的根路径开销是0。(用于选举根端口RP及指定端口DR)
5.Port ID:接口ID。运行STP的交换机使用接口ID来标识每个接口,接口ID主要用与在特定场景下选举指定接口。接口ID由两部分构成的,高4bit是接口优先级,低12bit是接口编码。激活STP的接口会维护一个缺省的接口优先级,在华为交换机上,该值为128。用户可以根据实际需要,通过命令修改该优先级。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。
6.BPDU:BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。STP交换机之间会交互BPDU报文,这些BPDU报文携带一些重要信息。BPDU分为两种:BPDU即TCN BPDU。
1)配置BPDU:由根桥始发,发送给个非根交换机。
2)TCN BPDU:非根交换机假如发现网络拓扑发生变化的情况下才会被触发。
BPDU报文格式:
配置BPDU的比较原则
7.选出指定端口:DP。所有交换机,一个接口发送的BPDU比收到的BPDU更优,则是指定接口。(根桥所有接口的都是指定接口,而每条链有有且只有一个指定端口)
8.阻塞其他端口:非DP非RP的接口为阻塞接口。
STP运行过程
1.选举根桥
STP在交换网络中最开始工作后,每个交换机都认为自己是根桥,所以都对外发送配置BPDU,但是互相比较后选择出拥有最小桥ID的交换机作为根桥(也就是先比较优先级后比较mac地址 桥id=优先级+mac地址)。根桥的角色可抢占。当有更优的BID的交换机加入网络时,网络会重新进行STP计算,选出新的根桥.
2.选举根端口
在非根桥交换机上选择一个距离根桥最近的端口作为根端口(一个非根桥设备上最多只能有一个根端口),用来接收根桥不断发送的BPDU。
作用:保证了交换机与根桥之间只有唯一确定且是最优的一条工作路径。
根端口比较过程:首先比较路径上的Cost值,cost相同的话比较对端的桥ID,对端桥ID如果还相同的就比较对端的端口ID(PID),对端端口如果还相同的话(接在hub上 几乎绝迹,理论存在)就比较自己的PID(都是越小越优先)。
小窍门:一般和根桥相对的端口就是根端口,因为一般情况下它距离根端口最近。
3.选举指定端口
因为一般一台交换机上可能接入多个设备,所以必须选举出一个固定的接受BPDU的端口(根端口),以及一个固定的向其他交换机发送BPDU信息的端口(指定端口),每一条链路只有一个指定端口发送BPDU信息即可,一般根桥上都是指定端口。
指定端口比较过程:先比较RPC,相同的话比较链路两端的桥ID,还相同的比较链路两边的端口ID(都是越小越优先)。
4.确立阻塞端口
我们在stp网络中确立了根端口和指定端口后,交换机上剩余的所有非根端口和指定端口都为预备端口(阻塞端口),STP会对这些预备端口进行逻辑上的阻塞,使这些端口不能转发用户数据帧,当STP拓扑网络中产生了阻塞端口后,STP网络内也就没有了环路。
STP的接口状态
禁用(Disable):该接口不能收发BPDU,也不能收发业务数据帧。(接口down)
阻塞(Blocking):该接口被STP阻塞,处于阻塞状态的接口不能发送BPDU,但会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习。
侦听(Listening):当网络拓扑有变化时,则会进行侦听。当接口处于该状态时,STP初步认定该接口为根接口或指定接口,但接口依旧处于STP计算的过程中,此时接口可已收发BPDU,但不能收发业务数据帧,也不会进行MAC地址学习。(持续时间为15S)
学习(learning):当接口处于该状态时,会侦听业务数据帧(但不能转达业务数据帧),并且收到业务数据帧后进行MAC地址学习,(持续时间为15S)
转发(Forwarding):处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态。
配置命令
[Huawei] stp mode { stp | rstp | mstp } /*交换机支持STP、RSTP和MSTP(Multiple Spanning Tree Protocol)三种生成树工作模式,默认情况工作在MSTP模式。
[Huawei] stp root primary /*配置当前设备为根桥。缺省情况下,交换机不作为任何生成树的根桥。配置后该设备优先级数值自动为0,并且不能更改设备优先级。
[Huawei] stp root secondary /*配置当前交换机为备份根桥。缺省情况下,交换机不作为任何生成树的备份根桥。配置后该设备优先级数值为4096,并且不能更改设备优先级。
[Huawei] stp priority priority /*缺省情况下,交换机的优先级取值是32768,需要设置为4096的倍数,最小为0。
[Huawei] stp pathcost-standard { dot1d-1998 | dot1t | legacy } /*配置接口路径开销计算方法。缺省情况下,路径开销值的计算方法为IEEE 802.1t(dot1t)标准方法。同一网络内所有交换机的接口路径开销应使用相同的计算方法。
[Huawei-GigabitEthernet0/0/1] stp cost cost /*设置当前接口的路径开销值。
[Huawei-intf] stp priority priority /*配置接口的优先级。缺省情况下,交换机接口的优先级取值是128。需要设置为16的倍数,最小为0。
[Huawei] stp enable
根桥发生故障时,总共恢复时常要50S.
直连线路发生故障时,总共恢复时常要30S.
非直连线路发生故障时,总共恢复时常要50S.
RSTP
RSTP的接口角色有四种:根接口,指定接口,预备接口(Alternate port 根接口发生故障时,则会快速启动变成根端口)和备份端口(Backup port 指定端口故障时,则会快速启动变成预备端口)
边缘端口:边缘端口一般与用户终端直连,可以由Disabled状态直接转到Forwarding状态。
端口状态不同
RSTP的状态3种
不装发用户流量也不学习MAC地址,那么接口状态就是Discarding,不转发用户流量但学习MAC地址,那么接口状态就是Learning,即转发用户流量又学习MAC地址,那么接口状态就是Forwarding。
总结
一个开启STP协议的非根桥交换机,端口会有三种可能性:根端口,指定端口及阻塞端口。先通过桥ID确立根桥,因为根桥上的端口均为指定端口。一条链路中有一个指定接口,那么对端为根接口。因为根端口一般为与根桥直连的端口,因为根路径开销最短。当确立非根交换机的根端口后,则可以确定剩下的的端口为根接口或阻塞端口。因为非根交换机只有一个根端口且链路中也只有一个指定端口。当根路径开销及对端桥ID比较出最优的则是指定端口,另外一个将变成阻塞端口。如下面例子:
开启STP后,当出现环路,各交换机会发送BPDU,比较各交换机的桥ID,越小越优,由于各交换机的优先级相同,那么比较MAC地址,可看出LSW2的MAC地址最小,那么LSW2的为这个STP环境中的根桥。
确定好根桥,LSW1,LSW3,LSW4的上各接口到根桥的根路径花销中LSW1的G0/0/1和LSW2G的0/0/1是最小,由于对端为指定端口,一个非交换机只有一个根端口且一条链路中只有一个指定端口,所以LSW1的G0/0/1和LSW3的G0/0/1为根端口。当确定根端口后则确定指定端口,即LSW1的G0/0/2和LSW3的GG0/0/2。
因为非根交换机有一个根端口,所以LSW4要在两个接口中选举根端口,由于G0/0/1和G0/0/2的跟路径开销相同,那么则比较对端桥ID,由于LSW3的桥ID比LSW1的桥ID小,则LSW4的G0/0/1口为根端口。由于选出最后的根端口,则G0/0/2为阻塞端口。
此处实验的阻塞端口有多个。
各接口显示如下:
如将根桥中的两根线中做链路聚合。现在由于链路聚合是将多根网线聚合成一根逻辑链路。所以Eth-trunk1为一条链路,则不存在上述LSW2的G0/0/2及G0/0/3的端口状态。
各接口显示如下:
本文由 yorickbao 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。