在实际的网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉的时候,另一条线路任可以传输数据,但是,在交换机网络中,当交换机接收到一个位置目的地址的数据帧时,交换机的操作是将这个数据帧广播出去,这样在存在物理环路的交换网络中,就会产生一个双向广播环,甚至产生广播风暴,导致交换机死机
这样就产了一个矛盾,需要物理环路来提高网络的可靠性,而环路又可能产生广播风暴,那么如何才能两全其美呢?STP就能解决这个问题,STP协议在逻辑上断开网络的环路,防止广播风暴的产生,而一旦正在使用的线路出现故障,逻辑被断开的线路又被连通,将继续传输数据。
1,STP简介
STP(Spanning Tree Protocol, 生成树协议)就是把一个环形结构改变成一个树状的结构,STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上的树型结构,
2,生成树算法及验证
STP运行生成树算法(Spanning Tree Algorithm, STA)。生成树算法的过程很复杂,但可将其归纳为以下三个步骤:
(1)选择根网桥(Root Bridge)
(2)选择根端口(Root Ports)
(3)选择指定端口(Designated Prots)
注意:网桥是交换机以前的名称,由于STP是在网桥基础上开发的,因此现在交换机的网络中任然沿用网桥这一术语,在Cisco教程里习惯称为“网桥”,这里指的就是“交换机”
1,选择根网桥
选择根网桥的依据就是网桥ID,网桥ID时一个8字节的字段,其组成的前2字节的十进制数称为网桥优先级,后6字节是网桥的MAC地址
网桥优先级时用于衡量网桥在生成树算法中优先级的十进制数,取值范围是0~65535,默认值时32768
网桥ID中的MAC地址时交换机自身的MAC地址,可以使用show version命令在交换机版本信息中查看交换机自身的MAC地址,
按照生成树算法的定义,当比较某个STP参数的两个取值时,值小的优先级高,因此,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID值最小,优先级小的选择为根网桥,在优先级相同的情况下,MAC地址小的为根网桥
2,选择根端口
选出了根网桥后,网络中的每台交换机必须和根网桥建立某种关联,因此,STP将开始选择根端口的过程,根端口存在于非根网桥上,需要在每个非根网桥上选择一个根端口
(除了根网桥,其他交换机都是非根网桥)
选择根端口时,依据的顺序如下:
(1)到根网桥最低的根路径成本。
(2)直连的网桥ID最小
(3)端口ID最小
根路径成本时两个网桥间的路径上所有线路的成本之和,也就是某个网桥到达根网桥的中间所有线路的路径成本之和,
路径成本用来代表一条线路带宽的大小,一条路的带宽越大,他传输数据的成本也就越低
链路带宽/(Mb/s) 路径成本
10 100
16 62
45 39
100 19
155 14
622 6
1000 4
10000 2
端口ID是一个2字节的STP参数,由1字节的端口优先级和1字节的端口号编号组成,
端口优先级时一个可配置的STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0~255,默认值是128
端口编号Catalyst用于列举各个端口的数字表示符,在基于IOS的交换机上,可以支持256个端口,端口编号不是端口号,但是端口号低的端口,端口编号也较小。
在STP选择根端口的时候,首先比较的是交换机端口的根路径成本,根路径成本低的为根端口
当根端口路径成本相同的时候,比较连接的交换机的网桥ID时,选择网桥ID值小的作为根端口,当网桥ID相同的时候,比较根端口ID值,选择较小的作为根端口
注意:比较根端口ID时,比较的是对端口的ID值
3,选择指定端口
选择完根网桥和每台交换机的根端口后,一个树型结构已初步形成,但是所有的线路仍连接在一起,并可能都处于活动状态,最后导致形成环路
为了消除环路形成的可能,STP进行最后的计算,在每一个网段上选择一个指定端口,选择指定端口的一句与根端口相同,按顺序有以下三个
(1)根路径成本较低
(2)所在交换机的网桥ID值最小
(3)端口ID值较小
(4)根网桥的端口都是指定端口
在STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口,当路径成本相同的时候,比较这个端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机上的端口最为指定端口,当网桥ID值相同的时候,也就是说,有几个位于同一交换机上的端口时,比较端口ID值,选择较小的作为指定端口
注意:比较端口ID时,比较的依然是对端口的ID值,而不是自己的
状态 | 用途 |
转发(Forwarding) | 发送/接收用户数据 |
学习(Learning) | 构建网桥表 |
侦听(Listening) | 构建“活动”拓扑 |
阻塞(Blocking) | 只接收BPDU |
禁用(Disabled) | 强制关闭 |
Disabled(禁用):由于网络管理员设定或因网络故障使用系统的端口处于Disabled状态
,这是比较特殊的状态,他并不是端口正常的STP状态的一部分
Blocking(阻塞):在端口初始化后,一个端口既不能接收或发送数据,也不能向它的地址表添加MAC地址,相反,这样的一个端口仅允许接收BPDU的报文,以便能侦听到其他邻接交换机的信息,此外,选出指定端口后, 非指定端口也处于阻塞状态
Listening(侦听):如果一个交换机认为一个端口可选为根端口或指定端口,那么,它就把该端口的Blocking状态变为Listening状态,在Listening状态,端口仍不能接收或者发送数据帧,不过,为了使该端口加入到生成树的拓扑过程,允许它接收或发送BPDU报文,由于该端口可以通过发送BPDU报文给其他交换机通告该端口信息,这个端口最终可能被允许一个根端口或指定端口,如果该端口失去根端口或指定端口的地位,那么它将返回到Blocking状态
Learning(学习):一个端口在Listening状态下经过一段时间(称为转发延迟)后,将转为Learning状态,该端口仍可像从前一样发送和接收BPDU报文,不过,该交换机可以学习新的MAC地址,并将地址添加到交换机的地址表中,正因为如此,才使得交换机以沉默一定的时间才处理有关地址表的信息
Forwarding(转发):在Learning状态下再经历一定的转发延迟时间,该端口转入到Forwarding状态,在Forwarding状态,该端口既可以发送和接收数据帧,也可以收集MAC地址加入到它的地址表,还可以发送和接收BPDU报文,在生成树拓扑中,该端口至此才成一个全功能的交换机端口
1,生成树计时器
STP在交换机互相发送BPDU报文时,尽力形成一个无环路的拓扑。BPDU从一台交换机传送到另一台交换机时,总要花费一定的时间,另外,当拓扑改变(如线路或根网桥故障)的消息从网络另一侧传送到另一侧时,也要经历一定的传播延迟,由于存在这些延迟,所以需要为交换机设置足够的的时间来完成BPDU的转发和生成树的运算,因此,在交换机内部设置了一些计时器来控制每个阶段的时间长度
STP利用三种计时方法来确保一个网络正确的收敛,现将STP计时器及它们的默认值描述如下:
Hello时间:网桥发送配置BPDU报文之间的时间间隔,在根网桥交换机中配置的访问时间将决定所有非根交换机的访问时间,这是因为这些交换机在收到发自根网桥的配置BPDU报文时,仅仅中继它们,不过,所有交换机都有一个在本地配置的访问时间,它用于确定重新发送TCN BPDU(拓扑变化提示)报文时间,IEEE 802.1d标准规定的默认访问时间为2s
转发延迟:一个交换机端口在Listening(侦听)和Learning(学习)状态所花费的时间间隔,它的默认值各为15s
最大老化时间:交换机在丢弃BPDU报文之前存储它最大时间,在执行STP时,每一个交换机端口都保存一份它所侦听到的“最好的”BPDU备份,如果源BPDU失去了交换机端口的联系,交换机则在最大老化时间之后通知网络已经发生了拓扑结构方面的变化最大老化时间的默认值是20s
侦听和学习都是生成树所实施的过度状态,用来强迫端口等待来自其他交换机上的所有BPDU,典型的端口过度如下:
(1)从阻塞到侦听 (20s)
(2)从侦听到学习 (15s)
(3)从学习到转发 (15s)
当启用STP时,VLAN上的每台交换机在加电后都经过从阻塞到侦听,学习的过度状态
注意:STP计时器可以用命令做配置和调整,但是,若不是经过认真考虑和规划,建议不要轻易改变计时器的默认值
STP和VLAN的关系
生成树与VLAN的关系主要有以下几种:
·IEEE的CST(Common Spanning Tree, 通用生成树)
·Cisco的PVST(Per VLAN Spanning Tree, 每个VLAN生成树)
·Cisco的PVST+ (Per VLAN Spanning Tree Plus, 增加的每个VLAN生成树)
·IEEE的MST (Multiple Spanning Tree, 多生成树)
1,其中,CST不考虑VLAN,以交换机为单位运行STP(整个交换网络生成一个STP实例)
2,PVST是Cisco私有的协议,PVST为每个VLAN运行单独的生成树实例,(每个VLAN生成一个生成树实例)
PVST为每个VLAN运行独立的一个生成树实例,能优化根网桥的位置,为所有的VLAN提供最优路径(因为VLAN的拓扑结构各不相同)
但是PVST也不是完美的,其主要缺点如下:
·为了维护针对每个VLAN生成的生成树,交换机的利用率(如CPU负载)会更高
·为了支各个VLAN的BPDU,需要占用更多的Trunk链路带宽
·PVST与IEEE的CST不兼容,使得运行PVST的Cisco交换机不能与其他厂家的交换机进行互操作
为了解决和其他厂商的交换机进行互操作的问题,Cisco开发了PVST+,PVST+允许CST的信息传给PVST,以便与其他厂商在VLAN上运行生成树的实现方法进行互操作,
PVST+为每一个VLAN生成一个生成树实例,而每个实例都要占用交换机的CPU和内存资源,随着VLAN的增加,实例也会增加,这导致维护生成树实例将占用较多的交换机资源,
IEEE 802.1s定义的多生成树MST用于解决生成树实例过多的文艺,关于MST的具体内容可参阅其他相关资料
PVST+的配置
1,配置PVST+的意义,
交换机加电启动后会自动运行STP,那么,为什么还要进行配置呢?
因为在交换网络中,如果一个根网桥不稳定,那么这个网络就需要经常进行STP运算,需要经常变换逻辑拓扑,因此,可以说,如果网络中有一个不稳定的根网桥,就会有一个不稳定的网络
而在交换机选择根网桥的时候,如果不修改网桥ID中优先级,那么选择的一句就是交换机的MAC地址,而MAC地址是随机的,很可能就会碰到这种情况:网络最边缘的交换机被选择成了根网桥,因此,虽然生成树在交换机中自动运行,但是,合理的配置能够对网络进行优化。
最后利用PVST+实现负载均衡
PVST+配置命令
(1)启用生成树命令
Switch(config)# spanning-tree vlan vlan-list
(2)指定根网桥
Switch(config)# spanning-tree vlan vlan-list priority Bridge-priority
(3)配置备份的根网桥
Switch(config)#spanning-tree vlan vlan-list root (primary | secondary)
(4)修改端口成本
Switch(config-if)# spanning-tree vlan vlan-list cost cost
(5)修改端口优先级
Switch(config-if)# spanning-tree vlan vlan-list port-priority priority
(6)配置速端口
Switch(config-if)# spanning-tree portfast
(7)查看生成树的配置
Switch# show spanning-tree
(8)查看某个VLAN】的生成树详细信息
Switch# show spanning-tree vlan vlan-id detail