生成树协议 STP(Spanning Tree Protocol)
提高网络可靠性,在网络中使用冗余链路。冗余链路会给交换网络带来环路风险,导致广播风暴。生成树协议STP(Spanning Tree Protocol)可以再提高可靠性的同时又能避免环路带来的影响
环路引起的问题
-
环路会引起广播风暴,网络中的主机会收到重复的数据帧
-
环路会引起MAC地址表震荡
交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。
为什么会出现震荡,比如第一次由G0/1接收到的数据包,但是第二次是由G0/2接口接收到源MAC地址不变就会产生震荡,互相替换。
衍生出泛洪攻击
STP工作原理
STP通过阻塞端口来消除环路,并且能够实现链路备份的目的。
如果通过阻塞端口解决了环路,那备份就冗余链路就不起作用了,所以STP不仅可以解决环路,也可以使用冗余链路。
需要寻找阻塞端口,来实现既可以解决环路,也可以使用冗余链路
BPDU报文(bridge protocol data unit)
- BPDU报文分为两种
- 配置BPDU:平常使用
- TCNBPDU:当拓扑发生变化时,发送的拓扑变化通知
- TCNBPDU:topology change notification
6B | 6B | 4 | 8 | 2B | 2B | 2B | 2B | 2B | 2B |
---|---|---|---|---|---|---|---|---|---|
PID | PVI | BPDU Type | Flags | Root ID | Port ID | Message Age | Max Age | Hello Time | Fwd Delay |
桥ID | STP版本 | BPDU类型 | 标记域 | 指定桥ID | 指定端口ID | BPDU消息年龄 | BPDU最大生存周期 | BPDU老化时间 | 发送BPDU的周期 |
STP操作过程
- 每个广播域选择一个根桥
- 每个非根桥选择一个根端口和根桥相连
- 每个段选择一个指定端口
- 阻塞非指定端口
选举STP根桥
- 每一台交换机启动STP后,都认为自己是根桥。只有根桥才能发送BPDU报文,为选举出根桥以前的root ID都是自己的桥ID
- 交换机对比BPDU报文的的root ID,也相当于对比bridge ID
- 选举出根桥以后,根桥每两秒发送一次BPDU
- 每进过一个设备都会将BPDU中的桥ID替换成自己的桥ID,root ID不变,继续转发。用于cost选择不出根端口时,作为对比值,选举根端口
- 如果收到的BPDU报文中的桥ID优先级高,则交换机会修改自己的BPDU报文的根桥ID字段,宣告新的根桥。不会像OSPF一样选取出来就不会改变了。
- 每个交换机都有个桥ID,桥ID是优先级加上四十八位的MAC组成的,优先级可以配置,取值范围1-65535,默认值32768。
- 优先级相同,比对MAC地址,都是越小越优先
- 生存时间默认30秒
- 发送BPDU的时间默认10秒
- 每个BPDU报文每经过一个交换机,Message Age都加1
- 如果Message Age大于Max Age,非根桥会丢弃改配置BPDU
选举根端口
STA算法
链路速度 | 开销 |
---|---|
10Gbit/s | 2 |
1Gbit/s | 4 |
100Mbit/s | 19 |
10Mbit/s | 100 |
根端口选举(按照顺序)
- 到根桥的最低路径成本
- 最低的发送者网桥ID(BID Bridge ID)
- 最低的发送者端口ID(PID Port ID)
- 根路径开销就是该端口到根所有路径的总和开销
ID | 说明 | 默认值 | 取值范围 |
---|---|---|---|
BID | 优先级+48位MAC地址 | 32768(4096的倍数) | 1-65535 |
PID | 端口优先级+端口号 | 128(必须为16的倍数) | 0-248 |
根选举开销选举不出来,四方形的拓扑图就容易出现这种情况,转发BPDU时替换的桥ID的作用就体现出来了。
根选举开销和桥ID都选举不出来的时候,就考虑其中的PID,比如交换机两根线相连,f0/1端口=128.1 fa0/2端口=128.2,端口优先级默认128.
选举指定端口
-
两个端口对比bridge id,就可以了
-
根桥所有端口都是指定端口
-
根端口的对端都是指定端口
-
指定端口是发送BPDU报文,根端口是接受BPDU报文
-
什么都没选上的接口就是阻塞端口
端口角色
- 根桥(RP)
- 指定根接口(DP)
- 指定端口(AP)
端口状态转换
端口状态 | 说明 |
---|---|
Forwarding | 转发状态:既能转发流量也可以转发BPDU报文 |
Learning | 学习状态:可以学习mac地址,不能转发数据,等待15s |
Listening | 侦听状态:可以接受和转发BPDU报文,不能转发用户流量,维持15s,确认端口角色 |
Blocking | 阻塞状态:只能接受BPDU报文,不能转发BPDU报文,也不能转发流量 |
Disbled | 禁用状态:什么都不干 |
STP拓扑变化 故障
直连链路故障
故障交换机会立刻检测到自身的故障切换到阻塞端口
- 因为要进过listening和learning状态每个状态都有15秒定时器
- 所以会在30秒后恢复到转发状态
非直连链路故障
- 非直连链路故障后,预备接口转发状态大约需要50秒
- 一个BPDU超时20秒,相当于发送10个BPDU报文时间
- 没有回应,就改变阻塞端口状态,经过listening和learning状态30s,直到forwarding状态
- 故障交换机根端口如果还健在就向上发送TCNBPDU
- 上级交换机回复一个普通BPDU确认收到,继续在向上,直到根桥,在超时时立即发送报文和MAC老化时间同时进行
- 根收到以后发送只一个配置BPDU,在这个BPDU中会有一个TC位,TC拓扑变更
- 收到这个BPDU报文的交换机立刻将MAC地址老化时间从300s缩短到15s(华为设置直接0秒,反正都有30s的状态转换)
- 泛洪学习MAC地址
根桥故障
非根桥会稳定的收到来自根桥的BPDU报文,如果根桥故障不发,下游收不到,等到定时器,BPDU失效,非根交换机又会选举根桥,导致50秒的恢复时间,等待时间等于message+两倍的fwdDelay的收敛时间
STP的基本配置
默认开启的STP,但是只是MSTP,需要将模式改为stp
stp mode stp
配置交换机优先级
stp priority 4096
配置路径开销
有三种路径开销模式
- IEEE 802.1D-1998
- IEEE 802.1T (缺省值)
- Legacy
//进入端口
int 端口
//改变开销
stp cost 2000
验证stp
display stp
本章总结
- 根桥产生故障后,其他交换机被选举为根桥。那么原来的交换机根桥恢复正常以后,网络又会发生什么变化
会重新选举
- 端口开销和根根路径开销的区别是什么?
端口开销:交换机端口开销
根路径开销:到根交换机的总开销