生成树协议(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权值(默认权值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 配置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 冗余带来网络环路 产生的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. STP信息是通过BPDU来传输的 桥接协议数据单元BPDU(Bridge Protocol Data Unit). 作用: 在交换网络中由根桥RB(Root Bridge)发送,用于STP的计算和收敛;发送周期为2秒; 两种类型: 配置DPDU 是所有端口上的根网桥以周期性间隔而发出的; 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会只丢弃了事。 端口的不同状态: 堵塞(Block,默认20s):只监听流入的BPDU 监听(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 命令: (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 LAB1:根桥的选举 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 引用原则1: Lowest BID那个交换机,就是root Bridge. BID:(Bridge ID) 由本交换机的网管MAC地址,和交换机的优先级组成,一共8个字节的16进制. Step1:察看交换机的网管IP 所对应那个MAC地址 SW1#show version Base ethernet MAC address: 00:07:EC:A8:4B:80 Step2: 察看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) 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是如何叠加的? 每个非根桥,都只有一个根端口. 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 根桥上,没有根端口,"所有与交换机相连的端口"都是"指定端口" (config-if)#spanning-tree vlan 1 cost ? //修改端口开销 designated port LAB3:每条segment上的,的选择: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 引用原则3: Lowest sender BID Step1:判断SW1的SW3之间的segment上,哪个是D-PORT? (8) Step2: 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(config-if)#spanning-tree port-priority 32 (16进) LAB5:观察 blocked端口 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 查看所有segment: 观察除了指定端口,和根端口以外的端口,都是被堵塞的. show spanning-tree vlan 1 detail //显示各个端口上所接收的BPDU数目 STP的的特性:(CISCO私有) 1:PortFast 加快终端主机连接入stp网络的收敛. 只适用于,在交换机与主机(电脑)相连的端口, 不应该在交换机与交换机,路由器,hub互连的网络设备的端口使用. interface FastEthernet0/1 (交换机上,在连接主机的端口) 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 ? //修改等待间隔 在连接主机的端口上: 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 (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 |