生成树协议 STP(Spanning Tree Protocol)

  • Post author:
  • Post category:其他




生成树协议 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操作过程

  1. 每个广播域选择一个根桥
  2. 每个非根桥选择一个根端口和根桥相连
  3. 每个段选择一个指定端口
  4. 阻塞非指定端口



选举STP根桥

  1. 每一台交换机启动STP后,都认为自己是根桥。只有根桥才能发送BPDU报文,为选举出根桥以前的root ID都是自己的桥ID
  2. 交换机对比BPDU报文的的root ID,也相当于对比bridge ID
  3. 选举出根桥以后,根桥每两秒发送一次BPDU
  4. 每进过一个设备都会将BPDU中的桥ID替换成自己的桥ID,root ID不变,继续转发。用于cost选择不出根端口时,作为对比值,选举根端口
  5. 如果收到的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

根端口选举(按照顺序)

  1. 到根桥的最低路径成本
  2. 最低的发送者网桥ID(BID Bridge ID)
  3. 最低的发送者端口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秒
  1. 一个BPDU超时20秒,相当于发送10个BPDU报文时间
  2. 没有回应,就改变阻塞端口状态,经过listening和learning状态30s,直到forwarding状态
  3. 故障交换机根端口如果还健在就向上发送TCNBPDU
  4. 上级交换机回复一个普通BPDU确认收到,继续在向上,直到根桥,在超时时立即发送报文和MAC老化时间同时进行
  5. 根收到以后发送只一个配置BPDU,在这个BPDU中会有一个TC位,TC拓扑变更
  6. 收到这个BPDU报文的交换机立刻将MAC地址老化时间从300s缩短到15s(华为设置直接0秒,反正都有30s的状态转换)
  7. 泛洪学习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



本章总结

  • 根桥产生故障后,其他交换机被选举为根桥。那么原来的交换机根桥恢复正常以后,网络又会发生什么变化

会重新选举

  • 端口开销和根根路径开销的区别是什么?

端口开销:交换机端口开销

根路径开销:到根交换机的总开销



版权声明:本文为qq_43512551原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。