生成树协议:STP(交换机控制层面协议)
交换机之间通过多条链路互连时(冗余线路),虽然能够提升网络可靠性,但同时也会带来环路问题。而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题(如广播风暴、引起MAC地址表震荡、网络中的主机会收到重复数据帧等)。
解决方案1:不考虑部署冗余线路,可以解决环路问题;但是会牺牲网络的冗余性,容易产生单点故障。
解决方案2:使用生成树协议STP(在经典以太网环境中,网络设备性能较低)
解决方案3:优化交换机的控制层面,可以高质量的学习MAC地址(在二代以太网环境中-数据中心,交换机可以像路由器一样的学习、生成MAC地址表项)
二代以太网技术:Fabricpath(思科私有)、Trill(公有协议)
生成树协议STP的工作原理:在冗余的环境中,首先确定网络中的最优路径和次优路径,通过阻塞次优路径来消除链路中可能出现的环路,并实时监测链路状态;当最优路径出现故障时,通过激活次优路径来使网络恢复连通性。
BPDU报文:(使用组播地址0180.C200.0000发送)
封装格式:802.3/802.2/SNAP/BPDU/FCS
BPDU有两种:配置BPDU(网桥协议数据单元)和TCN -BPDU(拓扑变更通告)
TCN -BPDU是下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机以及确定每个交换机端口的角色和状态。在初始化过程中,每个交换机都会以自己为根交换机主动发送配置BPDU。在网络拓扑稳定以后,只有根交换机主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,通过缓存和转发配置BPDU。
配置BPDU中包含了足够的信息来保证设备完成生成树计算,内容如下:
PID(协议ID-0) PVI(协议版本-0) BPDU Type(配置BPDU/TCN -BPDU)
Flags(特殊标识,共8位,用以区分TCA -BPDU、TC -BPDU)
根桥ID(Root ID):由根桥的优先级和MAC地址组成,每个STP网络中有且仅有一个根桥。
根路径开销(RPC):到根交换机的最短路径开销(用接收接口带宽非链路带宽)
指定桥ID(Bridge ID):由指定桥的优先级和MAC地址组成(指定桥的优先级可以手工方式修改前4bit的值,修改后的数值必须为4096的倍数,以小为优)。
扩展系统ID:使用优先级字段中的后12bit,取值范围0-4095
指定端口ID(Port ID):由指定端口的优先级和端口号组成(指定端口的优先级可以手工方式进行修改,修改后的数值必须为16的倍数,以下为优)。
Message Age:配置BPDU在网络中传播的距离,最大20跳(功能类似TTL)。
Max Age:配置BPDU在设备中能够保存的最大生存期,默认值20秒。
Hello Time:配置BPDU发送的周期,默认时间2秒。
Forward Delay:端口状态迁移的延时,默认时间15秒。
生成树协议的选举过程:根桥(核心)、指定端口(发送)、根端口(接收)
第一步:根桥选举Root Bridge(最核心的交换机,首发配置BPDU消息)
根桥的选举依据的是根桥ID,每个交换机都会有一个桥ID(Bridge ID) 。桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(桥ID最小)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。
第二步:指定端口选举/DP(指定端口用于发送BPDU消息,在链路两端,指定端口有且只有一个,指定端口是链路两端去往根桥最优路径的接口;根桥的所有端口都是指定端口,除非根桥在物理上存在环路);选举步骤如下:
2、比较链路两端接口发送BPDU消息中的根路径开销RPC;思科设备的cost值以带宽来计算的,如100M/19;1000M/4;10000M/2)
3、比较链路两端接口发送BPDU消息中的Bridge ID(转发者的Bridge ID)
4、比较链路两端接口发送BPDU消息中的Port ID(交换机运行STP的Port ID)
2Byte:1Byte优先级+1Byte接口编号(默认128)(普通交换机)
16Byte:4/3Byte优先级+12/13Byte接口编号(数据中心交换机)
第三步:根端口选举/RP(根端口用于接收BPDU消息,在非根桥设备上,根端口有且只有一个,根端口是非根桥设备去往根桥最优路径的接口);选举步骤如下:
2Byte:1Byte优先级+1Byte接口编号(默认128)(普通交换机)
16Byte:4/3Byte优先级+12/13Byte接口编号(数据中心交换机)
运行STP的设备上端口状态有5种:
Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态---DP\RP
Learning:学习状态(过渡状态)。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路---DP\RP
Listening:侦听状态(过渡状态)。端口可以转发BPDU报文,但不能转发用户流量---DP\RP
Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量---NDP
Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量(一般情况下是被管理员禁用的端口)。
生成树协议的收敛:
在稳定的STP拓扑里,非根桥会定期收到来自根桥的BPDU报文。如果根桥发生了故障,停止发送BPDU报文,下游交换机就无法收到来自根桥的BPDU报文。如果下游交换机一直收不到BPDU报文,Max Age定时器就会超时(Max Age的默认值为20秒),从而导致已经收到的BPDU报文失效,此时,非根交换机会互相发送以自己为根桥的配置BPDU报文,重新选举新的根桥。根桥故障会导致50秒左右的恢复时间,恢复时间约等于Max Age加上两倍的Forward Delay收敛时间。
3、间接拓扑变更(链路崩溃后导致某台非根桥无法通过任何端口接收根桥BPDU消息;如上图,拓扑变更后,SWC的预备端口恢复到转发状态大约需要50秒)。
细微拓扑变更:如上图,当主机A开关机时,交换机会认为拓扑发生变更,进行进行重新收敛;如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变,此时MAC地址表中未及时老化掉的表项会导致数据转发错误(交换机依赖MAC地址表转发数据帧,缺省情况下,MAC地址表项的老化时间是300秒),因此在拓扑发生变化后需要及时更新MAC地址表项;在拓扑变化过程中,故障处的交换机通过发送TCN -BPDU报文(TCN拓扑变更通告)通知根交换机生成树拓扑里发生了故障,根交换机收到消息后会生成TC -BPDU(TC拓扑变更)用来通知其他交换机加速老化现有的MAC地址表项,将原300秒的老化时间变成15秒)。
交换机B发送TCN -BPDU消息给根交换机交换机时,当交换机A收到了该消息后,会发送一个TCA -BPDU给交换机B,确认已经收到了该消息。
注:这些收敛其实没有必要,会额外消耗链路带宽和CPU,建议把这个接口配置成快速端口portfast,快速端口可以直接从blocking直接到forwarding。
生成树协议的版本:
STP(IEEE 802.1D)特点:收敛速度慢、多厂商不兼容
RSTP(IEEE 802.1W)特点:收敛速度块、多厂商不兼容
MSTP(IEEE 802.1S)特点:收敛速度块、基于VLAN开启多个生成树进程
在STP/RSTP模式下;华为使用的是CST(通用生成树协议,无视VLAN);思科使用的是PVST+(基于VLAN的生成树),厂商间不兼容;在MSTP中,才可能兼容。
STP的特性:
▶快速端口portfast:在连接PC的交换机接入接口启用;默认情况下当PC正常开机、关机时,交换机都会认为网络拓扑发生变更,进行重新收殓,虽然经过30秒的重新收殓,PC还是能正常上网;但这些收敛其实没有必要,会额外消耗链路带宽和CPU,建议把这个接口配置成快速端口portfast,启用portfast的接口不会因为PC正常开机、关机进行收殓,该接口永远是DP接口,可以直接从blocking直接到forwarding。
▶BPDU filter特性:当两台交换机之间使用启用portfast的接口互联时,可能会出现环路,此时可以在全局启用BPDU filter特性,接口portfast命令不会消失,但是该接口的portfast功能会失效,该接口就可以工作在正常模式下。
▶BPDU guard(防护)特性:可以在全局或者接口开启,开启BPDU guard以后,接口的portfast功能不会失效,但是该接口会被置为错误禁用状态error disable,并且会提示错误日志,更方便管理员进行故障检测。
注:边缘端口也会发送BDPU消息,主要用于防环功能。
▶快速上行链路uplinkfast:在接入层交换机上启用uplinkfast,此时交换机会记录所有连接根桥的最优路径和备份路径,且该交换机的优先级和接口cost值会被增大3000;当最优路径down了,就可以立即将最优的备份路径切换为RP,接口状态从blocking直接到forwarding;同时接入层交换机会代理PC向上游交换机发送伪帧(载荷为空),实现MAC地址表的快速刷新。
▶快速骨干backbonefast:在直接拓扑变更的环境中,在三台交换机上都启用backbonefast特性,交换机间会建立backbonefast邻居;当收到次级BPDU消息时,会利用根路径查询协议RLQ向根桥发送查询消息确认根桥连通性,当收到根桥的确认消息后,会丢弃下游发送的次级BPDU并立即切换NDP为DP(30秒)
▶根防护root gard:在根桥的所有接口启用,当接口收到一个更优的BPDU时,会直接丢弃该BPDU并将接口置为root Inconsistent状态,还会进行日志提醒。
▶环路防护loop gard:在非根桥的NDP接口启用,在网络拥塞的环境中,当NDP接口在20秒内都没有收到根桥BPDU时,就会将接口置为环路不一致状态loop inconsistent(shutdown状态),这个时间会持续30秒,等待重新收到BPDU。
▶单项链路检测UDLD:用于检测交换机之间光纤的双向连通性;必须在链路两端启用,交换机之间会周期性(15秒)发送hello建立UDLD邻居,如果3倍hello时间没有收到hello消息:
*普通模式normal:UDLD可以检测单向链路,并标记端口为undetermined状态伴随着产生系统日志提醒。
*激进模式aggressive:UDLD可以检测到单向链路,并且会尝试重新连接链路,连续发送8秒的UDLD message,如果此间没有任何的UDLD echo应答,此端口会被放置于error disable状态,伴随着产生系统日志提醒。
▶交换机初始化的全局参数:
▶交换机初始化的端口参数:
▶交换机收到更优配置BPDU并记录在端口参数中: