10.1 STP
·对于商用网络,冗余性是必须考虑的,但是在二层链路的冗余链路和冗余设备又会产生环路。STP(Spanning Tree Protocol)生成树协议主要用来防止网桥网络中因为冗余链路的存在而产生的环路。当网络部署生成树之后,交换机之间便会开始相互交互相关协议报文,并在网络中进行一系列的计算,经计算产生一个无环的网络拓扑。当环路产生时,生成树会将网络中的一个或多个接口进行阻塞(Block),从而打破二层环路。
10.1.1 STP基本概念
1、桥ID(Bridge Identification)
桥ID由 桥优先级 和 桥MAC地址 共同构成,是根桥选举的依据。桥ID一共8byte,其中桥优先级16bit,桥MAC地址48bit。
例如-桥ID: 56342,0025-9ef8-fedd
2、根桥(Root Bridge)
STP的主要作用之一就是在整个交换网络中计算出一个一颗无环的STP树,整个STP树都是在根桥的基础上形成的。当STP开始工作后,第一件事就是选举根桥,选举根桥的规则如下:
-
优先级最小者为根,MAC地址最小者为根
-
首先比较优先级,如果优先级相等则比较MAC地址。
-
优先级默认为32768,可通过命令 stp priority 进行修改,取值范围(0-61440),并且必须为4096的倍数(0,4096,8192)
3、开销(cost)与根路径开销(Root Path Cost, RPC)
每一个激活了STP的接口都会维护一个cost值,用于计算RPC,也就是交换机到达根桥的“成本”。
4、接口ID(Port Identification)
接口ID用于在STP协议中标识每个交换机的接口,主要用于特定情况下选举指定接口。接口ID长度16bit,由两部分组成,其中高4bit为接口优先级,低12bit为接口编号。接口优先级缺省为128,可在接口视图下通过stp port priority 命令修改。
10.1.2 STP的基本操作过程
STP通过4个步骤来保证网络中不存在漏洞。
1、在交换网络中选举一个根桥
根网桥具有可抢占性,如果网络中新增了一个交换机且优先级高于根网桥。STP将会重新收敛、重新计算网络拓扑,这可能会引发网络震荡。
STP协议所使用的协议报文是BPDU(Bridge Protocol Data Unit,网桥协议数据单元),依靠BPDU,STP可以进行无环拓扑的计算。
2、在每个非根网桥上选一个根接口(Root Port,RP)
收到最优BPDU的那个接口会成为最优接口,最优接口就是非根网桥的所有接口中收到最优BPDU的接口,也可以理解为朝向根网桥的接口。非根网桥的根接口用来接收根网桥发出的BPDU,并沿着STP树向下游转发。
3、选举指定接口(Designated Port,DP)
STP会在每个网段中选举一个指定接口,这个指定接口是这个网段中到达根桥的最优接口。
交换机接口中收到最优BPDU的将会成为根接口,交换机会根据最优BPDU给每个非根接口计算一个BPDU,随后接口会使用计算好的BPDU与接口上维护的BPDU(接口收到的来自其他接口的BPDU)进行比较,如果前者更优,那么该接口会成为指定接口。
4、阻塞非指定接口,打破二层环路
非指定接口指的是既不是根接口也不是指定接口的接口。
非指定接口最终都会被阻塞,但是会持续侦听BPDU,以便感知网络拓扑的变化。
10.1.3 STP报文
10.1.4 STP的时间参数
STP定义了三个重要的时间参数。
1、Hello Time(Hello时间)
Hello时间是根网桥向非根网桥发送配置信息的间隔时间,缺省为2s。Hello时间的必须在根网桥上面修改,修改完成后非根网桥会与根网桥对齐该时间值。
2、Forward Delay(转发延时)
STP的5种接口状态:
1)阻塞(blocking):该端口是非指定端口,不参与帧转发。此类端口接收 BPDU 帧来确定根桥交换机的位置和根 ID,以及最终的活动 STP 拓扑中每个交换机端口扮演的端口角色。
2)侦听(listening) :STP 根据交换机迄今收到的 BPDU 帧,确定该端口可参与帧转发。此时,该交换机端口不仅会接收 BPDU 帧,它还会发送自己的 BPDU 帧,通知邻接交换机此交换机端口正准备参与活动拓扑。
3)学习(learning):端口准备参与帧转发,并开始填充 MAC 地址表。
4)转发(forwarding) :该端口是活动拓扑的一部分,它会转发帧,也会发送和接收 BPDU 帧。
5)禁用(disabled) :不参与生成树,不转发数据帧。当管理性关闭交换机端口时,端口也会进入禁用状态。
为了避免生成树收敛过程中产生临时的环路或短暂的数据帧洪泛现象,在接口从阻塞状态转为转发状态时,必须经历侦听和学习状态,这两个状态各持续15s。也就是说接口从阻塞状态到转发状态至少要经历30s的时间
3、Max Age(最大生存时间)
也被称为BPDU的老化时间,缺省为20s。以非根网桥的根接口为例,该接口上保存着来自上游的最优BPDU,这个BPDU关联着一个最大生存时间,如果在最大生存时间之内没有收到BPDU,那么该BPDU将会被老化,该设备也会重新选举根接口。
受限于几个时间参数的设计,一个STP接口从阻塞状态进入转发状态可能需要花费30s-50s左右的时间,这时网络中的业务可能就会收到影响。
10.1.5 BPDU的比较原则
STP按照如下顺序选择最优BPDU
-
最小的根网桥ID
-
最小的RPC
-
最小的网桥ID
-
最小的接口ID
10.1.6 BPDU的交互与拓扑计算
初始情况下,所有的交换机都认为自己是根桥,并开始在激活了STP协议的接口发送BPDU。此时的BPDU中根桥ID是自己的ID,RPC(到达根桥的开销)为0,网桥ID为自己的ID,接口ID为本地接口的ID。
当接口收到其他交换机的BPDU时,会进行BPDU优先级比较,如果本地的BPDU更优则继续认为自己是根桥并继续周期性地向外发送BPDU,反之则认为最优BPDU的发送方为根桥,不再周期性的发送BPDU。
根网桥的所有接口都是指定接口,所以当认定自己不是根网桥后,非根网桥就要开始选举自己的根接口了。根接口是通过比较收到的BPDU而产生的,交换机会依次比较每个接口收到的BPDU中携带的根桥ID、RPC、网桥ID、接口ID。最优者成为根接口。
根接口选举完成后开始选举指定接口。这时交换机会根据根接口上面保存的BPDU为每个接口计算BPDU,用为每个接口计算的BPDU与接口上面保存的BPDU相比较。如果计算的BPDU胜出,则这个接口为指定接口,否则为非指定接口。
10.2 RSTP
IEEE 802.1D中定义的STP是比较老旧的协议,现在因为收敛慢、端口状态定义繁冗、对拓扑的感知依赖于定时器等诸多短板已经很少被使用。
IEEE 802.1w中定义的RSTP(快速生成树协议)可以视为STP的改进版本,它的收敛速度更快,而且能兼容STP。
10.2.1 RSTP接口角色
RSTP在STP的基础上增加了两种接口角色,所以RSTP共有四种接口角色:替代接口(Alternate)、备份接口(Backup)、根接口、指定接口。
1、替代接口
替代接口是根接口的备份,可以没有,也可以有一个或多个。在根接口正常工作时,替代接口被阻塞,当根接口发生故障时,最优的替代接口将成为新的根接口,这样就加快了网络的收敛过程。
2、备份接口
备份接口就是交换机上由于收到了自己发送的BPDU而被阻塞的接口。如果一台交换机有多个接口接入了同一个网段,那么这几个接口中会有一个接口被选举为指定接口,其他的接口都会成为备份接口,进入丢弃状态。
10.2.2 RSTP接口状态
STP的接口状态 | RSTP的接口状态 |
禁用(Disabled) | 丢弃(Discarding) |
阻塞(Blocking) | |
侦听(Listening) | |
学习(Learning) | 学习(Learning) |
转发(Forwarding) | 转发(Forwarding) |
10.2.3 BPDU
10.2.4 边缘接口
边缘接口常用于交换机连接终端的接口,在接口被配置为边缘接口后,不参与生成树计算,会立即切换到转发状态并开始收发业务流量。
-
将接口配置为边缘接口不会触发RSTP拓扑变更。
-
如果边缘接口收到了BPDU,此接口会立即变为一个生成树接口,触发RSTP拓扑变更。
-
边缘接口依然会周期性的发送BPDU,可通过stp bpdu-filter enable命令过滤,配置完成后此接口也不会对收到的BPDU做出反应。
10.2.5 P/A机制
假设此时在SW2与PC1之间新增一个SW1,且SW1的优先级最高,连接成功后SW1的G0/0/1接口被选举为指定接口,SW2的G0/0/1接口被选举为指定接口,但此时接口状态从丢弃变为转发要经过学习和侦听,在这个时间段内PC1和PC2之间是无法通信的。而RSTP通过P/A机制就可以在数秒之内完成接口状态从丢弃到转发状态的转化。
P/A机制的实现过程:
1、SW1接入后,SW1和SW2都认为自己是根桥,并在各自的接口上面发送BPDU,随后SW1被选举为根桥,SW2也开是接口选举,最终G0/0/1被选举为根接口。
2、此时P/A机制开始运转,由于SW1的G0/0/1为指定接口,所以向SW2发送Proposal置位的BPDU。
3、SW2收到后,立即启动一个同步过程,为保证本地不存在环路,SW2将自己的非边缘接口全部阻塞,并将G0/0/1接口切换到转发状态,随后向SW1发送Agreement置位的BPDU。
4、SW1收到后,立即将自己的G0/0/1接口切换到转发状态,此时PC1和PC2之间就可以通信了。
5、此时SW2的G0/0/2接口处于丢弃状态,此时SW2会向下游交换机SW3发起P/A过程,以此类推。
10.2.6 保护功能
1、BPDU保护(BPDU Protection)
边缘接口在收到BPDU后,会立即变成一个RSTP接口。一般情况下,边缘接口连接的都是终端,不会收到BPDU,但是如果误将边缘接口接入其他交换机,会增加产生二层环路的风险,另外如果攻击者向边缘接口发送BPDU,就会给网络带来不良影响。
激活BPDU保护后,当边缘接口收到BPDU后,会立即关闭这个接口(置为 Error-Down),并发出告警。
配置命令,在系统视图下,“stp bpdu-protection”,命令生效后所有的边缘接口均会激活BPDU保护功能。边缘接口因为收到了BPDU而被关闭后,可通过“shutdown”和“undo shutdown”或“restart”命令重置接口,或通过命令设置自动恢复时间,倒计时结束后,接口会自动恢复,命令:“error-down auto-recovery cause bpdu-protection interval 30”,时间范围30-86400s。
2、根保护(Root protection)
在RSTP中,根桥一般是位置最优、性能最优的,根桥的优先级往往也会被手动设置为0。但是根桥的角色是可抢占的,如果此时网络中接入了一个交换机,其优先级也为0,且MAC地址比当前的根桥更小,这时根桥角色就会被抢占,RSTP会重新收敛。这时的数据业务就会受到影响。
在相关接口上激活根保护功能后,当接口收到更优BPDU时,会忽略这些BPDU,并将接口切换到丢弃状态,如果接口不再收到这些BPDU,一般在两倍的转发延迟时间后,接口会自动恢复到转发状态。
配置命令,在接口视图下,“stp root-protection”
3、环路保护(Loop Protection)
处于丢弃状态的替代接口仍然会持续侦听BPDU,如果这个接口所连接的链路出现故障,这个替代接口长时间没有接收到BPDU,就会导致交换机进行RSTP的重新计算,此时这个接口的角色和状态会发生变化,有可能产生环路。
激活环路保护功能后:
(1)在根接口激活环路保护后,如果长时间没有收到BPDU,交换机会重新选举根接口,并将这个接口变为指定端口并切换到丢弃状态。
(2)在替代接口激活环路保护后,如果长时间没有收到BPDU,交换机会将这个接口角色切换为指定接口,并将接口状态保持为丢弃状态。
环路保护配置,在接口视图下输入命令:“stp loop-protection”。
4、拓扑变更保护
在网络拓扑发生改变时,下游的交换机会通过TC BPDU告知其他交换机。TC BPDU会触发网络中交换机执行MAC地址表删除操作。若攻击者向网络中发送大量的TC BPDU也会使交换机的性能收到很大的损耗。
激活拓扑变更后,交换机只会在规定时间内处理规定次数的TC BPDU,如果收到的TC BPDU超出上限,则会按照最大次数处理,超出的将会等待一段时间后再处理。
配置命令,在系统视图下:“stp tc-protection”,单位时间缺省为2秒(Hello Time), 可通过“stp tc-protection interval”命令修改。单位时间内处理次数缺省为1次,可通过“stp tc-protection threshold”命令修改。