STP/生成树(Spanning Tree Protocol)
冗余带来网络环路
产生的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秒;
在交换网络中由根桥RB(Root Bridge)发送,用于STP的计算和收敛;发送周期为2秒;
两种类型:
配置DPDU 是所有端口上的根网桥以周期性间隔而发出的
TCN(Topology Change Notification) BPDU 当交换机检测到拓扑变更时所产生的
(TC发送时间持续35秒,即delay time+BPDU老化时间).
(TC发送时间持续35秒,即delay time+BPDU老化时间).
BPDU完成的任务:
选举根桥
确定冗余路径的位置
阻塞特定端口防止环路
通告网络的拓扑变更
监控生成树的状态
协议ID(0) 表示协议 802.1d
版本号(0) STP的版本,802.1D的版本是0
BPDU类型 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的Forward delay为20秒
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
LAB1:根桥的选举
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引用原则1:
Lowest BID那个交换机,就是root Bridge.
BID:(Bridge ID)
由本交换机的网管MAC地址,和交换机的优先级组成,一共8个字节的16进制.
由本交换机的网管MAC地址,和交换机的优先级组成,一共8个字节的16进制.
Step1:察看交换机的网管IP 所对应那个MAC地址
SW1#show version
Base ethernet MAC address: 00:07:EC:A8:4B:80
SW1#show version
Base ethernet MAC address: 00:07:EC:A8:4B:80
Step2:
察看STP的相关信息:(察看本机BID)
SW3#show spanning-tree
察看STP的相关信息:(察看本机BID)
SW3#show spanning-tree
交换机的STP的优先级,默认都是0x8000(32768)
Boot ID /Bridge ID
如果Root ID=本交换机的Bridge ID,说明本交换机就是根桥.
Step3:人为控制,根桥的选举(控制根桥/后备根桥的选举)
SW3(config)#spanning-tree vlan 1 priority 0 (0x0000)
SW1(config)#spanning-tree vlan 1 priority 4096 (0x1000)
SW1(config)#spanning-tree vlan 1 priority 4096 (0x1000)
SW-A(config)#spanning-tree vlan 1 root priority
(24576=0x6000)
SW-B(config)#spanning-tree vlan 1 root secondary
(28672=0x7000)
LAB2:非根桥交换机的根端口选择:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引用原则2:
Lowest path cost to root bridge
Spanning-Tree Path Cost
根端口:
在非根桥交换机上,到达根桥所需的路径开销,最小的那个端口.
在非根桥交换机上,到达根桥所需的路径开销,最小的那个端口.
链路带宽与cost
cost是如何叠加的?
cost是如何叠加的?
每个非根桥,都只有一个根端口.
SW1#show interface status
SW1(config)#int fa 0/12
speed 10
SW1#show spanning-tree interface fastethernet 0/12 detail
port path cost 100
speed 10
SW1#show spanning-tree interface fastethernet 0/12 detail
port path cost 100
根桥上,没有根端口,"所有与交换机相连的端口"都是"指定端口"
(config-if)#spanning-tree vlan 1 cost ? //修改端口开销
designated port
LAB3:每条segment上的,的选择:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引用原则3:
Lowest sender BID
LAB3:每条segment上的,的选择:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引用原则3:
Lowest sender BID
Step1:判断SW1的SW3之间的segment上,哪个是D-PORT? (8)
Step2:
SW1(config)#spanning-tree vlan 1 priority 36864
(0x9000)
SW1(config)#spanning-tree vlan 1 priority 36864
(0x9000)
LANB4:sender BID相同的情况下,designated port的选择:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果sender BID相同,则引用原则4:
Lowest (对方的) port ID
Step1:
SW2(根桥)# 察看端口的Port-ID
show spanning-tree interface fastEthernet 0/12 detail
port identifier 128.12
SW2(根桥)# 察看端口的Port-ID
show spanning-tree interface fastEthernet 0/12 detail
port identifier 128.12
SW2(config-if)#spanning-tree port-priority 32 (16进)
LAB5:观察 blocked端口
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
查看所有segment:
观察除了指定端口,和根端口以外的端口,都是被堵塞的.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
查看所有segment:
观察除了指定端口,和根端口以外的端口,都是被堵塞的.
show spanning-tree vlan 1 detail //显示各个端口上所接收的BPDU数目
STP的的特性:(CISCO私有)
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
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
评论
发表评论