生成树协议(Spanning Tree Protocol,STP)是交换式以太网中的重要概念和技术,该协议的目的是在实现交换机之间的冗余连接的同时,避免网络环路的出现,实现网络的高可靠性。它通过在交换机之间传递桥接协议数据单元(Bridge Protocol Data Unit,BPDU)来互相告知诸如交换机的桥ID、链路性质、根桥(Root Bridge)ID等信息,以确定根桥,决定哪些端口处于转发状态,哪些端口处于阻断状态,以免引起网络环路.
当交换机之间有多个VLAN时Trunk线路负载会过重,这时需要设置多个Trunk端口,但这样会形成网络环路。STP协议便可以解决这一问题.
可以通过配置STP端口权值STP路径值来实现负载均衡. 如果使用STP端口权值来配置那么二条负载均衡的trunk必须联同一交换机上。使用路径值则即可以联相同的交换机与可以联不同的交换机。
使用STP端口权值的负载均衡
当同一台交换机的二个口形成环路时, STP端口权值用来决定那个口是enable的,那个口是阻断的.可以通过配置端口权值来决定二对trunk各走那些VLAN, 有较高权值的端口(数字较小的)vlan, 将处于转发状态,同一个VLAN在另一个trunk有较低的权值(数字较大)则将处在阻断状 态。 即同一VLAN只在一个trunk上发送接受。
使用STP端口权值的负载均衡
当同一台交换机的二个口形成环路时, STP端口权值用来决定那个口是enable的,那个口是阻断的.可以通过配置端口权值来决定二对trunk各走那些VLAN, 有较高权值的端口(数字较小的)vlan, 将处于转发状态,同一个VLAN在另一个trunk有较低的权值(数字较大)则将处在阻断状 态。 即同一VLAN只在一个trunk上发送接受。
配置STP权值(默认权值128)
Switch#config terminal
Switch(config)#interface f0/1 //进入端口1配置模式
Switch(config-if)#spanning-tree vlan port-priority 10 //将VLAN端口权值设为10
Switch(config-if)#exit
Switch(config)#interface f0/1 //进入端口1配置模式
Switch(config-if)#spanning-tree vlan port-priority 10 //将VLAN端口权值设为10
Switch(config-if)#exit
配置STP路径值(默认路径值19)
Switch#config terminal
Switch(config)#interface f0/1 //进入端口1配置模式
Switch(config-if)#spanning-tree vlan cost 30 //将VLAN生成树路径值设为30
Switch(config-if)#exit
Switch(config)#interface f0/1 //进入端口1配置模式
Switch(config-if)#spanning-tree vlan cost 30 //将VLAN生成树路径值设为30
Switch(config-if)#exit
冗余带来网络环路
STP信息是通过BPDU来传输的
两种类型:
BPDU完成的任务:
选举根桥
确定冗余路径的位置
阻塞特定端口防止环路
通告网络的拓扑变更
监控生成树的状态
协议ID(0) 表示协议 802.1d
版本号(0) STP的版本,802.1D的版本是0
BPDU类型 配置BPDU=0, TCN BPDU=80
信息寿命 从根桥发出BPDU之后的秒数,每经过一个网桥都递减1,本质上是到达网桥的跳计数
标记域 包括 拓扑变化(TC)位,置位了就指明该BPDU是一个拓扑变化通告 或 拓扑变化确认(TCA)位
产生的3大问题:
1:Multiple Frame Copies/多帧复制
2:MAC Database Instability /MAC地址数据库的不稳定 /端口漂移
3:Broadcast Storms/广播风暴
解决方案:STP
STP是链路管理协议, 将特定的端口置于阻塞状态,来实现既没有环路,也可以冗余的网络.
STP核心:
Provides a loop-free redundant network topoloty,by placing certain ports in the blocking state.
Provides a loop-free redundant network topoloty,by placing certain ports in the blocking state.
STP信息是通过BPDU来传输的
桥接协议数据单元BPDU(Bridge Protocol Data Unit).
作用: 在交换网络中由根桥RB(Root Bridge)发送,用于STP的计算和收敛;发送周期为2秒;
两种类型:
配置BPDU 是所有端口上的根网桥以周期性间隔而发出的;
TCN(Topology Change Notification) BPDU 当交换机检测到拓扑变更时所产生的(TC发送时间持续35秒,即delay time+BPDU老化时间).
BPDU完成的任务:
选举根桥
确定冗余路径的位置
阻塞特定端口防止环路
通告网络的拓扑变更
监控生成树的状态
协议ID(0) 表示协议 802.1d
版本号(0) STP的版本,802.1D的版本是0
BPDU类型 配置BPDU=0, TCN BPDU=80
信息寿命 从根桥发出BPDU之后的秒数,每经过一个网桥都递减1,本质上是到达网桥的跳计数
标记域 包括 拓扑变化(TC)位,置位了就指明该BPDU是一个拓扑变化通告 或 拓扑变化确认(TCA)位
交换机对BPDU的处理:
如果交换机从一个接口接收到优先级高的BPDU,会把该BPDU保存下来并且该接口不再往外发送BPDU;
在收敛时只有根桥产生BPDU,其余交换机只能从RP接收BPDU后才从DP发送出去;这样非根桥可能从DP或者NDP接受到BPDU;
如果交换机从DP接收到优先级低的BDPU会丢弃,并给源MAC发送自己较新的BPDU;如果从NDP收到优先级低的BPDU会只丢弃了事。
在收敛时只有根桥产生BPDU,其余交换机只能从RP接收BPDU后才从DP发送出去;这样非根桥可能从DP或者NDP接受到BPDU;
如果交换机从DP接收到优先级低的BDPU会丢弃,并给源MAC发送自己较新的BPDU;如果从NDP收到优先级低的BPDU会只丢弃了事。
端口的不同状态:
堵塞(Block,默认20s):只监听流入的BPDU
监听(Listen,默认15s):监听和发送BPDU(根桥、根端口、指定端口等的选举在该阶段完成,如果接口没有成为DP则重新回到Block):
学习(Learning,默认15s):监听和发送BPDU,并且会在该接口上学习流入帧的MAC地址
转发: 监听和发送BPDU,会在该接口上学习流入帧的MAC地址,接收和转发数据帧
禁用: 不参与STP,并且不能转发任何数据.
监听(Listen,默认15s):监听和发送BPDU(根桥、根端口、指定端口等的选举在该阶段完成,如果接口没有成为DP则重新回到Block):
学习(Learning,默认15s):监听和发送BPDU,并且会在该接口上学习流入帧的MAC地址
转发: 监听和发送BPDU,会在该接口上学习流入帧的MAC地址,接收和转发数据帧
禁用: 不参与STP,并且不能转发任何数据.
STP定时器:
Hello time(2s) 用于确定根交换机多长时间向其他的交换机广播一次配置BPDU.
Forward delay(15s) 监控每个端口在学习和监听状态上停留的时间
Max Age(20s) 控制端口保存配置BPDU信息的最大时间
作用: 让网络有足够的时间来获得有关拓扑的正确信息,并确定是否存在冗余链路.
STP的默认最大寿命计时器为7,表示最大的网络直径可达7台设备.所以BPDU的Forward delay为20秒.
bpdu广播2s一次,允许有3个包丢失即6s,当假设最大为7跳的时候,则一共要用20s,所以BPDU的有效时间为20s
bpdu广播2s一次,允许有3个包丢失即6s,当假设最大为7跳的时候,则一共要用20s,所以BPDU的有效时间为20s
命令:
(config)#spanning-tree vlan 2 hello-time 2 //范围1-10s
spanning-tree vlan 2 forwad-time 4 //范围4-30s
spanning-tree vlan 2 max-age 6
(config)#spanning-tree vlan 2 hello-time 2 //范围1-10s
spanning-tree vlan 2 forwad-time 4 //范围4-30s
spanning-tree vlan 2 max-age 6
STP执行的4步判决顺序
确定根交换机 lowest root BID
计算到根交换机的最小路径开销 lowest path cost to root bridge
确定最小的发送者BID lowest sender BID
确定最小的端口ID lowest port ID
确定根交换机 lowest root BID
计算到根交换机的最小路径开销 lowest path cost to root bridge
确定最小的发送者BID lowest sender BID
确定最小的端口ID lowest port ID
STP的的特性:(CISCO私有)
2.uplink-fast:
4.portfast bpduguard (在已经是portfast端口上配置)
5:portfast bpdufilter (在portfast端口配置)
1:PortFast 加快终端主机连接入stp网络的收敛.
只适用于,在交换机与主机(电脑)相连的端口, 不应该在交换机与交换机,路由器,hub互连的网络设备的端口使用.
interface FastEthernet0/1 (交换机上,在连接主机的端口)
switchport mode access (接入链路)
spanning-tree portfast
switchport mode access (接入链路)
spanning-tree portfast
spanning-tree portfast default //全局模式下使用,全局启用portfast.
2.uplink-fast:
在所有接入层/分布层(非核心层)交换机上,配置uplink-fast,用于加速因为直链故障/直链检测错误,所引起的STP网络变化的收敛速度.
block - forward
1~5s
sw1(config)#spanning-tree uplink-fast //启用uplink-fast
show spanning-tree uplinkfast //查看uplinkfast信息
将网桥优先级增加49152,并且将交换机上所有接口的生成树端口开销增加3000
3.BackBone-Fast:
当遇到非直链检测错误时,加速其收敛速度:
大约为30s
indirect Link Failure
所有的交换机上,配置BackBone-Fast
sw1/2/3(config)#spanning-tree backbonefast //启用backbonefast
show spanning-tree backbonefast //查看backbonefast信息
4.portfast bpduguard (在已经是portfast端口上配置)
交换机端口的"portfast bpduguard"是指:
在交换机的端口一旦收到BPDU包时,立刻关闭端口(进入err-disable状态),避免了更大范围的广播风暴.
如果要打开必须先shutdown,再NO SH
设置自动重新启用老化时间:
(config)#errdisable recovery cause bpduguard //默认300秒
errdisable recovery interval ? //修改等待间隔
在交换机的端口一旦收到BPDU包时,立刻关闭端口(进入err-disable状态),避免了更大范围的广播风暴.
如果要打开必须先shutdown,再NO SH
设置自动重新启用老化时间:
(config)#errdisable recovery cause bpduguard //默认300秒
errdisable recovery interval ? //修改等待间隔
在连接主机的端口上:
Sw1(config-if)#spanning-tree bpduguard enable
Sw1(config-if)#spanning-tree bpduguard enable
bpduguard Don't accept BPDUs on this interface
5:portfast bpdufilter (在portfast端口配置)
防止交换机在启用"portfast"的接口上发送BPDU,并且将接收到的所有BPDU都丢弃.
在特定的portfast端口上配置:
sw1(config-if)#spanning-tree bpdufilter enable
sw1(config-if)#spanning-tree bpdufilter enable
(bpdufilter: Don't send or receive BPDUs on this interface)
sw3(config)#spanning-tree portfast bpdufilter default //全局的portfast端口上,都生效
注意:BPDU过滤可能导致环路,不推荐配置.配置过滤之后防护将不起作用.
6:root guard (推荐在所有的接入端口上配置)
将接口强制成为指定端口,从而防止周围的交换机成为根交换机.
(config-if)#spanning-tree guard root
show spanning-tree inconsistentports //显示"不一致根"
debug spanning-tree events
logging buffered
------------------------------------------
实践采用主备方式连接设备时要确认:
1、处于主的核心上的端口全为desg
2 在核心上 show spanning tree,可以看见所有VLAN 的root都在主核心上
3、在核心上采用
spanning-tree vlan 1-1000 root primary
spanning-tree vlan 1-1000 root secondary
确保spanning tree 中的ROOT全在主核心上。
4、接入交换机接入PC端口改为spanning tree portfast
上连端口设为spanning tree uplinkfast
2 在核心上 show spanning tree,可以看见所有VLAN 的root都在主核心上
3、在核心上采用
spanning-tree vlan 1-1000 root primary
spanning-tree vlan 1-1000 root secondary
确保spanning tree 中的ROOT全在主核心上。
4、接入交换机接入PC端口改为spanning tree portfast
上连端口设为spanning tree uplinkfast