STP(生成树)协议
1. 冗余备份的组网
1.1 冗余备份的思想
- 链路冗余:双上行链路,当一条链路出现问题,数据转发会走另外一条链路
- 设备冗余:当设备出现故障后,数据流量会走另外一台设备进行转发
- 不足点:当我们关闭STP协议以后,冗余备份组网存在环路问题
2. 二层环路和三层环路概述
2.1 二层环路
- 二层以太网中,并没有涉及防环字段,得靠STP技术防环。
- 单链路可以解决环路,但是会使网络更加脆弱,容易出现链路和设备的单点故障。
2.2 三层环路
- 在IP报文中有生存时间限制,TTL(time to live),范围为0-255。
- 默认TTL非0,每经过一个三层设备,TTL值减一,当路由器收到TTL值为0的数据包的时候,会丢弃。
3. 二层环路引发的问题
- MAC地址表的震荡
- 数据成环以后,mac地址表不停更新
- 二层网络出现广播风暴
- 不处理广播包,直接广播
- 主机容易受到重复的数据帧
- 导致计算机CPU100%
- 关闭STP以后,eNSP测试ping,PC直接CPU100%
- 关闭STP以后,eNSP测试ping,PC直接CPU100%
4. STP技术的诞生和作用
- 破除环路,拒绝单点故障,STP(生成树)协议
- 作用:
- 消除环路:通过阻断冗余链路来消除网络中可能存在的环路
- 链路备份:当活动路径发生故障时,激活备份链路,及时回复网络连通性
- 生成树协议
- stp
- rstp
- mstp
- 生成树中节点
- 根桥
- 根桥故障后,非根桥会在BPDU老化之后开始根桥的重新选举
- 当故障根桥恢复以后,重新选举的根桥被撤销,根桥恢复(抢占)
- 次根桥
- 非根桥
- 根桥
5. STP技术的命令
stp mode {stp | rstp | mstp} //三种模式选一种,默认是mstp
stp priority 4096 //设置优先级,越小优先级越高,默认是32768,<0-61440>,需要是4096的倍数
rtp root primary //将设备优先级设置为0,制定交换机为根桥
stp root secondary //设备优先级为4096,制定交换机为次根桥
display stp brief //展示当前的stp协议信息
stp enable //启动生成树,默认开启
- G0/0/3 :被堵塞
6. BPDU报文的概述
6.1 定义
- STP 的正常工作依赖于BPDU报文的泛洪(Bridge Protocol Data Unit,网桥协议数据单元)
- 网络刚启动,所有设备都会发送BPDU报文
- 当root选举产生,只有root才能发送BPDU报文
6.2 报表内容
- 报表内容
- 重点字段解析
- Root Identifier(根的BID):根交换机的BID
- Root Path Cost(RPC):设备到达root交换机的开销(入口开销之和)
- Bridge Identifier(BID):发送设备的BID
- Port Identifier(PID):发送设备的PID
6.3 字段解析
6.3.1 Bridge ID(BID)
桥ID(Bridge ID)是交换机的STP标识符,一共8个字节,由2个字节的优先级和6个字节的MAC地址构成
- 桥优先级缺省为32768,可以手工修改
- MAC地址为交换机背板MAC
- 网络中的Bridge ID最小的交换机将成为根桥(先比较优先级,再比较MAC地址)
- 优先级配置的时候,只能是4096的倍数(只能配置成:0,4096,8192)
- 如果现网优先级都是一样的话,会比较MAC地址,越小越优先(不建议)
6.3.2 路径开销(COST)
- 路径开销和端口的带宽成反比
- 华为设备支持的路由开销计算标准:802.1d-1998\802.1t及legacy,其中legacy是华为私有标准,华为交换机默认选择802.1t的标准。如千兆交换机的开销为2W,参考下图
- 开销计算:路径开销=入接口开销之和,默认数据从根桥出来的开销为0
6.3.3 端口ID(PVID)
- 端口ID(2字节)=端口优先级(1字节)+端口编号(1字节)
- 优先级缺省值为128,范围0-255,越小越优先,数值需是16的倍数
step port priority 0 //接口模式下,更改优先级
7. STP选举的过程
7.1 选举过程
- 每个交换网络(广播域)选举一个根桥(Root Bridge)
根据每台设备的优先级和mac地址进行比较,都是越小越好 - 每个非根桥上选举一个根端口(Root Port)
RP端口是非根交换机到达ROOT最优路径(最近)的一个端口,每个非根设备上面有且仅有一个RP。 - 每个链路上选举一个指定端口(Designated Port)
DP端口是用来发送BPDU报文的,root上面都是指定端口,用来发送BPDU报文给非根交换机 - 阻塞非指定端口(Non Designated Port)
在STP里面对应的就是AP端口,除了DP,其他均是AP。优先级比较低的,为AP,被阻塞。
7.2 选举过程详解
7.2.1 根桥选举
每个交换网络选举一个根交换机(Root Bridge)网络中Bridge ID最小的交换机作为根桥,设备的优先级越小,优先级越高。在每个交换网络中只有一个跟设备,其他均为非根设备。
只有root 交换机才能发送BPDU,非根交换机只会进行转发。
- 每台交换机启动STP后,都认为自己是根桥
- 所有端口都是DP(指定端口)
- 互相发送BPDU后,会比较优先级和MAC地址
- 优先级越小越好,MAC地址越小越好
7.2.2 根端口选举
- RP端口在我们的非根交换机上选举
- 非跟交换机上有且只有一个RP端口
- RP端口是到达root交换机的最优路径
选举规则:
- 该端口到达root交换机的开销(入口开销之和),推荐这种方式选举RP端口
计算该端口到root交换机的开销,选开销最小的。开销:考虑链路长度和接口带宽 - 发送设备的BID
端口进过转发,比较链路上面经过设备的优先级 - 对端设备的PID
对比对端端口的端口优先级,然后再比较端口号(G0/0/1优先级高于G0/0/2) - 自身的PID
对比自己端口的端口优先级,然后再比较端口号(G0/0/1优先级高于G0/0/2)
7.2.3 指定端口的选举(DP)
- 每个网段(链路)选举一个指定端口(DP)
- root交换机的端口几乎都是DP端口
- DP端口的作用是用来发送BPDU
选举规则:
- 该端口到达root交换机的开销(开销 = 入口开销之和),(一般不建议修改这一条)
- 发送设备的BID(一般建议修改这一条)
- 对端设备的PID
- 自身的PID
7.2.4 AP端口(阻塞端口)
网络收敛后
- 只有指定端口和根端口可以转发数据
- 其他端口为预备端口,被阻塞,不能转发数据(不能发送BPDU,但是可以接受BPDU),只能从锁链万分段的指定交换机接受BPDU报文,并以此来见识链路的状态。
注意:AP端口是一个逻辑的阻塞端口,这个端口可以接受BPDU报文,但是不能发送BPDU报文,更加不能转发用户流量。
7.2.5 总结
端口角色 | 描述 |
---|---|
Root Port 根端口 | 所在交换机上离根交换机最近的端口,处于转发状态 (Forwarding) |
Designated Port 指定端口 | 向非根交换机转发配置BPDU的端口,处于转发状态(Forwarding) |
Alternate Port 预备端口 | 预不向所连网段转发任何数据,处于阻塞状态(Blocking) |
7.3 STP状态迁移
disable状态—block状态—listening(侦听)状态—learning(学习)状态—forwarding(转发)状态
- Forwarding:转发状态。端口既可以转发用户流量也可以转发BPDU报文。
- learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不能转发用户流量。增加learning状态是为了防止临时环路。
- listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。
- blocking:阻塞状态。比如说AP端口
- disable:禁用状态。表示还没有启动STP的状态
记住:
- RP、DP端口的最终状态是Forwarding状态
- AP端口的最终状态是Blocking状态
- Listening到learning需要15s,learning到forwarding需要15s,一共需要30s才能变成forwarding状态。
- 所以一个DP或RP端口,想要到达forwarding状态,至少需要30s
8. STP的计时器
hello 计时器:默认值是2s,用来发送BPDU的时间间隔(设备每2s发送一次BPDU)
max age时间:默认值是20s,设备在20s之内没有收到BPDU的话,会重新选举(超时重新选举)
FwDly(转发延迟):默认值是15s,就是用来解决临时环路的
注意:
- 需要修改以上时间,需要在 Root 设备上面修改,因为只有root交换机才会发送BPDU数据
9. STP的拓扑变化
9.1 ROOT设备故障
- 非ROOT设备的重新收敛需要50s的时间(20s + 30s)
- 20s 超时自动选举
- 30s 端口起来
9.2 直连链路故障
- SWA和SWB有两根物理线连接,其中SWB端实线为RP,虚线为AP,当RP接口链路故障时
- SWB会将预备端口转换成根端口(AP---->RP)
- SWB的预备端口会在30秒后恢复到转发状态(AP: blocking—>forwarding)
注意:端口角色变化的秒变,时间几乎可以不计,但是端口状态变化需要延迟。
9.3 非直连故障
- 非直连链路故障后,SWC的预备端口恢复到转发状态大约需要50秒
- AP需要等待20s确认没有BPDU过来
- AP端口转换后,需要等待状态起来
9.4 拓扑改变导致MAC地址表错误
- 网络拓扑变化后,数据的发送会有问题。
- MAC地址表项的默认老化时间是300s,但是端口状态的变化最多就50s,会导致端口状态变成forwarding以后,但是路由表还没更新,交换机不会将数据发送到切换过来的端口里面。
- 所以路由表要及时更新。
- 优化机制:
- 当设备发现有个链路不通以后,会通过其他的接口发送TCN数据,对端设备收到TCN数据以后会回复一个TCA做确认
- 这个TCN会随着链路一直发到Root交换机
- root交换机收到TCN数据以后,回复TCA确认,确认完成以后,还会发送数据将TC置位(传播到整个网络),并且将所有交换机的路由表更新时间从300s–>15s,快速刷新。
10. STP的不足
网络的收敛比较慢(30s - 50s的收敛时间)