生成树
目标
- 生成树的工作原理与配置
- RSTP对于STP的改进
- 其他消除二层环路的方法
生成树概述
为什么存在二层环路
为了避免单点故障
人为(误操作)导致
二层环路带来的问题
广播风暴与MAC地址飘逸
局域网中网络不同、卡顿等绝大多数归咎于两个原因:ARP欺骗和二层环路。
广播风暴与地址漂移演示
拓扑
要先关闭生成树
stp disable
只要发1个广播包(IPOP构造),就会形成环路。
漂移,MAC地址对于SW1而言,一会儿从2口学习到,一会儿从1口学习到
此时模拟器的CPU已经炸了,5秒使用率76%
关闭后,环路消失,CPU过1分钟左右降下来
如果真机,以下现象
1.可能无法登录设备,登陆了也非常卡(模拟器不会)
2.接口带宽占用率高
3.cpu使用率高
Q:针对二层环路有什么解决方法?
- 关闭端口,阻止环路
- 月薪10万请人拔网线
使用TTL降低环路影响???- STP
初识生成树协议
通过STP算法,将环路的一个端口逻辑堵塞,打破环路
注意,不是用命令shutdown端口或者拔网线
因为二层交换机不处理三层报文的内容,因此TTL不会减少
查一次路由表,做一次三层处理,TTL-1
STP概念与原理
概念1:桥ID Bridge ID
在STP中,每一台交换机都有一个标示符,叫做Bridge ID或者桥ID,桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。
桥优先级是可以配置的,取值范围是0~65535,默认值为32768,可以修改但是修改值必须为1024的倍数。
概念2:根桥Root Bridge
树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)概念。
对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行处理和转发,传达拓扑变化记录,从而保证拓扑的稳定。
优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。
如图,需要在该网络中选举根桥,首先比较三台交换机的桥优先级,桥优先级都为4096,再比较三台交换机的MAC地址,谁小谁优先,最终选择SW1为根桥。
SW1被选举为根桥后,其他交换机均为非根桥。
概念3:Cost
交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在STP中的开销值。默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小。
华为交换机支持多种STP的路径开销计算标准,提供多厂商场景下最大程度的兼容性。缺省情况下,华为交换机使用IEEE 802.1t标准来计算路径开销。
概念4:RPC
非根桥去往根桥有多条路径,每条路径将沿途的设备的出接口开销相加,成为了此非根桥每条路径的PRC
概念5 : Port ID
端口ID可以用来确定端口角色。
运行STP交换机的每个端口都有一个端口ID,端口ID由端口优先级和端口号构成。
端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。
概念6:BPDU
为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU中。
STP的BPDU有两种类型:配置BPDU和TCN BPDU。
配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。
在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
BPDU报文
在STP中,由根桥发送BPDU,其他非根桥收到后,对BPDU进行修改,主要调整的是
PRC、桥ID和PortID
STP的选举过程
根桥选举
原则:无论在哪个阶段选举,无论选什么都是最小最优先。
选举过程:
STP交换机初始启动之后,都会认为自己是根桥,并在发送给其他交换机的BPDU中宣告自己为根桥。因此,此时BPDU中的根桥ID为各自设备的网桥ID。
当交换机收到网络中其他设备发送来的BPDU后,会比较BPDU中的根桥ID和自己的BID。交换机不断交互BPDU,同时对BID进行比较,最终选举一台BID最小的交换机作为根桥,其他的则为非根桥。
注意:根桥的角色可抢占。当有更优的BID的交换机加入网络时,网络会重新进行STP计算,选出新的根桥。
根端口RP选举
非根桥上去往根的PRC最小的端口,成为RP
一个非根桥设备上,最多只能有一个根端口。
选举过程:
交换机有多个端口接入网络,各个端口都会收到BPDU报文,报文中会携带“RootID、RPC、BID、PID”等关键字段,端口会针对这些字段进行比较。
首先比较根路径开销(RPC),STP协议把根路径开销作为确定根端口的重要依据。RPC值越小,越优选,因此交换机会选RPC最小的端口作为根端口。
当RPC相同时,比较上行交换机的BID,即比较交换机各个端口收到的BPDU中的BID,值越小,越优选,因此交换机会选上行设备BID最小的端口作为根端口。
当上行交换机BID相同时,比较上行交换机的PID,即比较交换机各个端口收到的BPDU中的PID,值越小,越优先,因此交换机会选上行设备PID最小的端口作为根端口。
当上行交换机的PID相同时,则比较本地交换机的PID,即比较本端交换机各个端口各自的PID,值越小,越优先,因此交换机会选端口PID最小的端口作为根端口。
指定端口DP选举
每个链路(Link)选举一个指定端口,用于向这个链路发送BPDU。
注意:一般情况下,根桥上不存在任何根端口,只存在指定端口。
选举过程:
指定端口也是通过比较RPC来确定的,选择RPC最小的作为指定端口,如果RPC相同,则比较BID和PID。
首先比较根路径开销(RPC),值越小,越优选,因此交换机会选RPC最小的端口作为指定端口。
若RPC相等,则比较链路两端交换机的BID,值越小,越优选,因此交换机会选BID最小的交换机的端口作为指定端口。
若BID相等,则比较链路两端端口的PID,值越小,越优选,因此交换机会选PID最小的交换机的端口作为指定端口。
堵塞非指定端口NDP
什么是非指定端口(预备端口)?
在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口统称为预备端口。
阻塞非指定端口
STP会对这些非指定端口进行逻辑阻塞,即这些端口不能转发由终端计算机产生并发送的帧(用户数据帧)。
一旦非指定端口被逻辑阻塞后,STP树(无环路工作拓扑)就生成了。
注意:
非指定端口可以接收并处理BPDU。
根端口和指定端口既可以接收和发送BPDU,也可以转发用户数据帧。
思考题
最终非根端口,非指定端口的SW3的GE0/0/2端口为预备端口。
最终非根端口,非指定端口的SW4的GE0/0/2端口为预备端口。
最终非根端口,非指定端口的SW2的GE0/0/2端口为预备端口。
STP接口状态
STP应对拓扑变化
stp协议认为什么情况算是拓扑改变?
- 连接终端的端口关闭不算!!
- 连接终端的端口开启并且将进入转发算拓扑改变
Q:堵塞端口关闭算拓扑改变吗?注定堵塞的端口开启,算拓扑改变吗?
A:不算,算!
根桥软故障
注意,不是关闭接口,或者拔掉网线。
Max Age超时后,大家都认为原来的根桥挂了,因此就会重新选举
整个过程可能要50s
这里演示一下50s!
直连链路硬故障
Q:为什么不要等Max age?
A:
非直连链路软故障
非直连故障
在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文。
若SW1与SW2之间的链路发生了某种故障(非物理故障),因此SW2一直收不到来自根桥SW1的BPDU报文,Max Age计时器(缺省: 20 s)就会超时,从而导致已经收到的BPDU报文失效。
此时,非根桥SW2会认为根桥失效,并且认为自己是根桥,从而发送自己的配置BPDU给SW3,通知SW3自己是新的根桥。
在此期间,SW3的预备端口一直收不到包含根桥ID的BPDU,Max Age计时器超时后,端口进入到Listening状态,开始向SW2“转发”从上游发来的包含根桥ID的BPDU。
因此,Max Age定时器超时后,SW2和SW3几乎同时收到对方发来的BPDU,再进行STP重新计算,SW2发现SW3发来的BPDU更优,就放弃宣称自己是根桥并重新确定端口角色。
端口状态:
SW3预备端口20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发。
收敛时间:
非直连故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forward Delay收敛时间。
拓扑改变导致的MAC地址表错误
这里存在一种攻击!!!
拓扑变化过程中,根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。根桥生成TCbit置位的BPDU报文用来通知其他交换机加速老化现有的MAC地址表项。
拓扑变更以及MAC地址表项更新的具体过程如下:
SW3感知到网络拓扑发生变化后,会不间断地向SWB发送TCN BPDU报文。
SW2收到SW3发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SW3,告知SW3停止发送TCN BPDU报文。
SW2向根桥转发TCN BPDU报文。
SW1把配置BPDU报文中的Flags的TC位设置为1后发送(发送约max-age+Forward delay=35s),通知下游设备把MAC地址表项的老化时间由默认的300 s修改为Forward Delay的时间(默认为15 s)。
最多等待15 s之后,SW2中的错误MAC地址表项会被自动清除。此后,SW2就能重新开始MAC表项的学习及转发操作。
注意:ENSP中貌似清不掉
STP的基础配置
修改模式和根桥指定
华为设备模式工作在MSTP模式
指定根桥
stp root primay
配置当前设备为根桥。缺省情况下,交换机不作为任何生成树的根桥。配置后该设备优先级数值自动为0,并且不能更改设备优先级。
如果已经使用stp root primary指定,又试图修改,就会有如下报错
指定备份根桥
stp root secondary
配置当前交换机为备份根桥。缺省情况下,交换机不作为任何生成树的备份根桥。配置后该设备优先级数值为4096,并且不能更改设备优先级。
手动修改STP优先级
[Huawei]stp priority priority
缺省情况下,交换机优先级为32768
需要是4096的倍数
修改开销
[Huawei-GigabitEthernet0/0/1] stp cost cost
修改接口优先级
[Huawei-intf]stp port priority priority
需要是16的倍数
打开关闭stp,默认是打开状态
[Huawei]stp enable/disable
查看接收和发送的TCN BPDU和TCbit置位的报文个数
display stp tc-bpdu statistics
配置案例
查看命令 display stp
RSTP对STP的改进
STP不足
- 收敛速度慢(30、50s)
- 太多因素导致拓扑改变--->MAC地址表频繁清空
- 拓扑改变通知机制太繁琐
- 老化时间太长20s
RSTP的改进
RSTP中什么情况算拓扑改变
在一个运行RSTP的网络中,检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。
为本交换设备的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器值是Hello Time的两倍(4s)。
在这个时间内,清空所有端口上学习到的MAC地址。同时,由DP和RP向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送TC置位的RST BPDU(可能发1个TC也可能发两个TC)。
其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。
PA机制
新链路连接成功后,P/A机制协商过程如下:
1.p0和p1两个端口马上都先成为指定端口(因为都认为自己是根),发送RST BPDU。
2.S2的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。
3.S1的p0进入Discarding状态,于是发送的RST BPDU中把Proposal和Agreement置1。
4.S2收到根桥发送来的携带Proposal的RST BPDU,开始将自己的所有端口进入sync变量置位(即同步变量:临时阻塞除边缘端口外的其他端口)。
5.p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。
6.各端口的sync变量置位后,p2、p3进入Discarding状态,p1进入Forwarding状态并向S1返回Agreement位置位的回应RST BPDU。
7.当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。
下游设备继续执行P/A协商过程。
P/A机制要求两台交换设备之间链路必须是点对点的全双工模式。一旦P/A协商不成功,指定端口的选择就需要等待两个Forward Delay,协商过程与STP一样(例如对面就是AP端口的DP端口)。
AP、BP
从配置BPDU报文发送角度来看:
预备(Alternate)接口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的接口。
备份(Backup)接口就是由于学习到自己发送的配置BPDU报文而阻塞的接口。自交!
从用户流量角度来看:
Alternate接口提供了从指定桥到根的另一条可切换路径,作为根接口的备份接口。
Backup接口作为指定接口的备份,提供了另一条从根桥到相应网段的备份通路。
解决状态改变后的30s中问题
edge-port
在STP中用户终端接入交换设备端口状态由Disabled状态转到Forwarding状态需要经过15s,那么用户在这段时间无法上网,如果网络频繁变化,用户上网状态非常不稳定,时断时续。
边缘端口一般与用户终端设备直接连接,不与任何交换设备连接。边缘端口正常情况下接收不到配置BPDU报文,不参与RSTP运算,可以由Disabled状态直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用了一样。
但是,一旦边缘端口收到配置BPDU报文,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
解决30s问题,减少拓扑改变的可能(edge-port的打开和关闭不算拓扑改变)
端口不同
RSTP把原来STP的5种端口状态简化成了3种。
Discarding状态,端口既不转发用户流量也不学习MAC地址。
Learning状态,端口不转发用户流量但是学习MAC地址。
Forwarding状态,端口既转发用户流量又学习MAC地址。
对速度没有改变
生成树技术进阶
VBST
优点
可消除网络中可能存在的通信环路。
可实现链路的复用和流量的负载分担,进而有效地提高链路带宽的利用率。
配置和维护简单,进而可降低配置和维护成本。
缺点
但是如果网络中VLAN的数量较多,为每个VLAN执行独立的生成树计算将耗费交换机大量的资源。
MSTP
iStack
堆叠iStack(Intelligent Stack),是指将多台支持堆叠特性的交换机设备组合在一起,从逻辑上组合成一台整体交换设备。
堆叠系统建立之前,每台交换机都是单独的实体,有自己独立的IP地址和MAC地址,对外体现为多台交换机,用户需要独立的管理所有的交换机;堆叠建立后堆叠成员对外体现为一个统一的逻辑实体,用户使用一个IP地址对堆叠中的所有交换机进行管理和维护,如图所示。通过交换机堆叠,可以实现网络大数据量转发和网络高可靠性,同时简化网络管理。
Smart Link
如图所示Switch3采用双上行方式分别连接到FW1和FW2,这样Switch3到达上行的链路就可以有两条。在Switch3上配置Smart Link,正常情况下,可实现Port2所在链路作为Port1所在链路的备份。若Port1所在的链路发生故障,Smart Link会自动将数据流量切换到Port2所在链路,保证业务不中断。