STP–生成树协议
交换网络中的问题:
- 1. 单点故障:交换机之间如果只有单条链路,如果链路故障,主机之间无法访问。
- 2. 解决单点故障:交换机之间相互呈环状连接,由冗余链路。当有一条链路发送故障,冗余链路可以保障网络通信。
- 3. 新的问题:增加冗余链路后,交换机之间形成环路,当交换机之间相互广播未知MAC地址的数据帧时,会产生广播风暴,链路中全是广播主机帧导致线路拥堵,交换机宕机。
- 4. 如何让交换机之间既有冗余链路,又不会产生广播风暴?
- 5. 最终解决方案:交换机之间呈环状连接,所以交换机都运行生成树协议,通过生成树协议自动堵塞某些端口,从而形成一个逻辑无环的网络拓扑,以避免广播风暴产生。当现有链路出现链路时,之前被阻塞的端口可以被从新启用,从而形成一个新的逻辑拓扑————–逻辑无环,物理有环。
生成树协议
STP– Spanning Tree Protocol
让交换网络形成一个树状的拓扑结构
生成树选举
生成树选举的过程(选举端口角色)
选举根网桥
- 网桥就是交换机,以前人们把交换机叫做网桥。
- 一个广播域中,有且只有一个根网桥。
- 对比BID–网桥Bridge id,BID最小的交换机成为根网桥。
- BID=网桥优先级+网桥Mac地址。
- 网桥优先级取值范围:0-65535;默认值是:32768;步长:4096 (0,4096,8192…61440),每次取值的最小单位,是4096的整数倍,不超过65535,因此倍数是0-15倍,值是0-61440。16倍是65536。
- 查看交换机网桥地址:display bridge mac-address
- display stp
选举根端口(Root port)
- 每个非根网桥上,选择根端口,只且只有一个根端口
- 判断依据:此端口到达根网桥的路径成本之和最低。
- 路径成本是带宽所对应的数值,默认情况下,千兆路径成本为20000,百兆的路径成本为20W。
- 如果路径成本一样,则选择网桥id(即mac地址)小的。
- 路径成本之和一样时,对比端口标识(Port Identifier)。
- 端口ID越小优先,由端口优先级和端口号两部分组成,端口优先级可配置,默认值是128
- 端口优先级范围:0-128 默认步长16。
选举指定端口(Designed Port):每根网线上选,有且只有一个指定端口。
- 根网桥上的所有端口都是指定端口(这是规定,没有为什么)
- 此端口所在交换机到根网桥的路径成本低的
- 路径成本一样时,对比此端口到根网桥的网桥id小的为指定端口。
- 既不是根端口也不是指定端口的,都是非指定端口,将成为阻塞端口。
display stp brief 查看STP网桥信息
Role角色 | STP State |
DESI指定端口 | FORWARDING-转发 |
ROOT根端口 | FORWARDING- |
ALTE阻塞端口 | DISCARDING-丢弃 |
BPDU–Bridge Protocol Data Unit
1. BPDU–网桥协议数据单元,实现了STP的所有功能。
2. BPDU类型–1、配置BPDU;2、拓扑更变通告(TCN)BPDU。
3. BPDU包含关键字段
字段 | 字节 | 作用 |
协议ID | 2字节 | |
版本号 | 1字节 | |
报文类型 | 1字节 | 标识是配置BPDU还是TCN BPDU |
标记域 | 1字节 | |
根网桥ID | 8字节 | 用于通告根网桥的ID |
根路径成本 | 4字节 | 说明这个BPDU从根传输了多远,成本是多少 |
发送网桥ID | 8字节 | 发送这个BPDU网桥的ID |
端口ID | 2字节 | 发送报文端口的ID |
报文老化时间2字节;最大老化时间-2字节;Hello 时间-2字节;转发延迟-2字节 | 计时器值,用于说明生成树协议用多长时间完成它的每项功能 |
BPDU时如何选择根网桥的?
- 当交换机启动时,每个交换机都会假定自己就是根网桥,在向外发送的BPDU中根网桥字段ID填写自己的网桥ID。
- 当整个网络中所有的交换机接受到全部的BPDU并做比较后,就可以选择出唯一的一个根网桥。
STP的收敛
- STP端口的物理状态:
- 禁用–Disable–强制关闭
- 阻塞–Blocking–只接收BPDU
- 侦听–Listening–构建活动拓扑
- 学习– Learning–构建网桥表
- 转发–Forwarding–发送/接收数据
- 华为交换机的stp的端口状态不是标准的,而是经过华为优化的,华为交换机的端口状态只有三种,分别是Forwarding,Learning和Discarding。
- STP的三种计时器
- Hello时间
- 转发延迟
- 最大老化时间
- STP收敛过程
- 直连故障:被阻塞端口会从blocking状态依次切换到listening及learning状态,最终进入forwarding状态。直连链路故障,端口状态切换,延时30s后进-forwarding状态。
- 非直连故障:由于被阻塞端口上不再收到更优的BPDU,因此20s后端口开始从blocking状态依次切换到listening、learning及forwarding状态。非直连故障会导致50s左右的恢复时间,等于MAX Age加上2倍的Forward Delay时间。forward delay-转发延迟-15s;max age -20s;
- 收敛时间是disable到forwarding的时间。
- STP存在问题:
- STP常用计时器防止临时环路,收敛时间慢,长达30-50s。
- 设备利用率低
- 解决方案:RSTP和MSTP
- STP配置命令
- stp enable //启动stp默认情况下stp为启动状态
- stp disable
- stp mode {stp|rstp|mstp} //选择stp模式,默认情况下stp模式为mstp。
- stp priority [0-65535] //修改交换机的优先级,默认值为32768,最大值为61440。
- 更改端口stp cost,在端口上开启/关闭stp功能
- interface g0/0/1
- stp cost {value}
- stp {enable|disable}
RSTP
1. RSTP是对STP的改进,主要为了优化收敛时间。
改进点1:端口角色和端口状态优化
2. RSTP通过端口角色的增补,简化了生成树协议的理解与部署。增加了2种
- 替代端口-Alternative。替代端口就是由于学习到其他网桥发送的配置BPDU报文而阻塞的端口,它提供了从指定桥到根桥的另一条可切换路径,作为根端口的备份端口。
- 备份端口-Backup。就是由于学习到自己发送的配置BPDU而被阻塞的端口,它作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。
3. RSTP的端口状态缩减为3种,根据端口是否转发用户流量和学习mac地址来划分。
- Discarding不转发用户流量也不学习mac地址。
- Learning不转发用户流量但是学习mac地址。
- Forwarding既转发用户流量又学习mac地址。
改进点2:RSTP的配置BPDU优化
RSTP的配置BPDU利用了STP报文中的Flags字段,明确了端口角色。
格式变化
除了保证和STP格式一样外,RSTP做了如下变化:
- Type字段配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
- Flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU。
BPDU发送方式
RSTP对配置BPDU的发送方式做了改进
- STP拓扑稳定后,根桥按照Hello Time规定的时间间隔发送BPDU.其他非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出BPDU,此方式是的STP计算复杂且缓慢
- 改进: 在拓扑稳定后,无论非根网桥设备是否接收到根网桥传来的配置BPDU报文,非根桥设备任然按照Hello Time规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行.
- Hello Time每次发出的时间间隔为2s.
改进点3:更短的BPDU超时时间
- STP需要先等待一个Max Age.(Max Age为超时时间 = hello time * 3 = 6s)
- 改进: 如果一个端口在超时时间,(即三个周期,超时时间 = hello time * 3) 内没有收到上游设备发送过来的配置BPDU, 那么该设备认为与此邻居之间的协商失败.
改进点4:处理次优BPDU
- STP协议只有指定端口会立即处理次优BPDU
- 改进: 当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身缓存的RST BPDU与收到的RST BPDU进行比较. 如果该端口缓存的RST BPDU优于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身缓存的RST BPDU,从而加快收敛速度.
改进点5:快速收敛机制
根端口快速切换
如果网络中一个根端口失效,那么网络中最优的Alternate 端口将成为根端口,并立即进入Forwarding状态. 因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥.
而在STP中,需要等待30s.
指定端口快速切换
如果网络中一个指定端口失效,那么网络中最优的Backup端口将成为指定端口,进入Forwarding状态. 因为Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路.
边缘端口(Edge Port)
首先,边缘端口不属于端口角色,它是一个快速收敛机制
边缘端口是位于二层网络的边缘.一般可以把交换机连接终端或者服务器的端口配置为边缘端口.
在RSTP里, 如果某一个端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口可以设置为边缘端口.
边缘端口不参与RSTP计算,可以由Discarding直接进入Forwarding状态.但是一旦边缘端口收到了BPDU配置,就丧失了边缘端口属性,成为普通STP端口, 并重新进行生成树计算,从而引起网络震荡.
P/A机制((Proposal/Agreement机制)
RSTP通过P/A机制加快了上游端口进入Forwarding状态的速度.
在RSTP中,当一个端口被选举成为指定端口后,会先进入Discarding状态,再通过P/A机制快速进入Forwarding状态.
而在STP中,该端口至少要等待一个Forward Delay(Learning) 时间才会进入到Forwarding状态.
如果交换机收到更有的BPDU,那么这个时候交换机就知道这个端口不应该是指定端口,而应该是根端口.
A置位只能是根端口发送的.P置位只能是指定端口发送的.
拓扑变更机制
在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态.
一旦检测到拓扑发生变化,将进行如下处理:
- 为本交换机的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器是Hello Time的两倍(4s). 在这个时间内,清空状态发生变化的端口上学习到的MAC地址.
- 同时,由非边缘指定端口和根端口向外发送RST BPDU, 其中TC置位. 一旦TC While Timer超时, 则停止发送RST BPDU.
- 其他交换设备收到RST BPDU后,清空所有端口(除了收到 RST BPDU 的端口和边缘端口) 学习到MAC地址, 然后也为自己的所有的非边缘指定端口和根端口启动TC While Timer, 重复上述过程
- 如此,网络就会产生RST BPDU泛洪.
保护功能
BPDU保护
BPDU保护,是防止边缘端口收到BPDU的保护机制.
如果边缘端口开启了BPDU保护,如果收到了BPDU报文,会关闭这个端口.
命令:stp bpdu-protection 开启BPDU保护
命令:display interface brief 查看所有端口状态
根保护
根保护是为了保护根桥
如果一个网络中有一台交换机的BID比现有的根桥还要优先,那么这个时候拓扑会发生变化,那么为了防止这种现象发送,我们可以开启根保护.
根保护在指定端口下开启,在根端口开启是没有作用的.
命令:进入指定端口. root-protection
环路保护
环路保护是为了防止网络中发生的一些临时环路
环路保护在根端口下开启
进入根端口, 开启环路保护stp loop-protection
display stp brief 可以看到Protection类型为LOOP
防TC-BPDU攻击保护
如果频繁收到TC BPDU, 就会频繁删除MAC地址表, 这样子不行, 因此可以开启TC BPDU保护.
在全局模式下开启: stp tc-protection, 默认开启.
开启保护后,交换机会在一定时间内删除MAC地址表的上限.
RSTP配置过程
根端口连接的设备就是上游设备,指定端口连接的设备就是下游设备.
- 配置生成树工作模式
- stp mode {stp | rstp | mstp}
- 交换机支持STP,RSTP和MSTP三种生成树工作模式.默认情况下为MSTP
- (可选)配置当前设备为根桥
- stp mode primary
- 缺省情况下,交换机不作为任何生成树的根桥.配置后该设备优先级数值自动为0,并且不能更改设备优先级.
- display stp 查看交换机生成树信息.
- (可选)配置当前设备的备份根桥
- stp root secondary
- 缺省情况下,交换设备不作为任何生成树的备份根桥.配置后该设备优先级数值自动为4096,并且不能更改设备优先级.
MSTP
1. 多生成树协议–Multiple Spanning Tree Protocol
2. 如果一个交换网络中,只形成一个逻辑无环拓扑,虽然可以解决环路问题,但存在其他问题:所有vlan公用一个生成树,防止环路同时只能确保一半的设备得到利用,另一半仅用作备份,设备利用率低。
3. 相当于整个交换网络中只存在一条路,所有的数据帧只能使用这个路径来进行转发。
4. 负载均衡:需要让交换网络形成多个逻辑无环拓扑,让不同的vlan主机使用不同的拓扑来转发数据。
5. 实现:
- 1. 不同的vlan关联不同的实例
- 2. 不同的实例的选择不同的交换机作为根交换机
- 3. 不同的vlan通过不同的根交换机进行数据转发,从而确保设备的利用率,同时设备之间还能实现备份。
6. MSTP配置命令
- 1. stp mode mstp–设备缺省状态为mstp
- 2. stp region-configuration–进入MST域配置
- 3. region-name name–指定交换机MST域名,如ttt,HCIE等
- 4. instance 16 vlan 16–指定vlan16的生成树实例id是16。第一个16为实例id,第二个16为vlanid。实例id取值范围0-4094,0是CIST
- 5. stp [instance instance-id] root {primary | secondary}
- 1. instance-id是实例编号,如果不知道,则该设备在实例0上为根网桥/备份根网桥设备。
- 2. primary–配置为根网桥,配置后设备优先级为0,将不能更改设备优先级。
- 3. secondary–配置为备份根网桥,配置后设备优先级为4096,将不能更改设备优先级。
- 6. stp [instance instance-id] priority priority
- 1. priority:指定当前交换机的优先级,0-61440,步长4096,缺省值是32768。
- 7. stp pathcost-standard{dot1d-1998 | dot1t | leagcy}
- 1. dot1d-1998–指定路径开销值的计算方法是IEEE.802.1-1998标准方法,取值范围0-65535
- 2. dot1t–指定路径开销的计算方法是IEEE802.1t标准方法,取值范围1-20,000,000
- 3. legacy–指定路径开销计算方法是华为计算方法,取值范围是1-200,000
- 8. stp [instance instance-id] port priority priority
- 1. priority:指定端口在生成树计算时的优先级。整数形式,取值范围0-240,步长16,如0,16,32等
- 9. display stp region-configuration–查看MST域名和实例的映射关系
- 10. display stp brief–查看MSTP和vlan的映射关系
三种生成树协议的比较
- 1. STP:
- 形成一颗无环的树,解决广播风暴并实现冗余备份。
- 收敛速度慢。
- 2. RSTP:
- 形成一颗无环的树,解决广播风暴并实现冗余备份。
- 收敛速度快。
- 3. MSTP:
- 形成多棵无环的树,解决广播风暴并实现冗余备份。
- 收敛速度快
- 多棵生成树在vlan之间实现负载均衡,不同vlan的流量按照不同的路径转发。