summary:

STP is a bridge-to-bridge protocol used to maintain a loop-free network.

STP establishes a root bridge, a root port, and designated ports.

With STP, the root bridge has the lowest bridge ID, which is made up of the bridge’s priority and MAC address.

With STP, ports transition through four states: blocking, listening, learning, and forwarding.

If a change occurs to the network topology, STP maintains connectivity by transitioning some blocked ports to the forwarding state.

RSTP significantly speeds the recalculation of the spanning tree when the network topology changes.

1、什么是STP:

通过阻塞某些端口使得任两个局域网(冲突域)间只存在一条活动的路径,使得存在物理冗余链路的网络中的帧不会发生循环。

 

1

2、STP的优缺点:

优点:避免了网络中循环的产生,使得网络可用。

缺点:(1)为避免循环而阻塞了冗余链路的某些端口,因此不能充分利用冗余链路

(2)原本可以使用的更短的物理路径被阻塞而导致某些用户流量要使用更长的物理路径

3、STP的工作原理:

1

 

STP如何选择某个接口将其设置为转发状态?

  • STP选出一个根网桥,根网桥中所有的接口都处于转发状态
  • 每一个非根网桥将从其接口选出一个到根网桥管理成本(administrative cost)最低的接口作为根端口(root port),STP将使根端口处于转发状态。
  • 当一个网段中有多个网桥时,这些网桥会将他们到根网桥的管理成本都通告出去,其中具有最低管理成本的网桥将作为指定(designated)网桥。指定网桥中发送最低管理成本的BPDU的接口是该网段中的指定端口,该端口将处于转发状态。

 

(1)选择根网桥、发现根端口和指定端口

BPDU——在STP中用来在网桥间交换信息的数据称为网桥协议数据单元(BPDU)

hello数据包(hello BPDU)——用来标识根网桥和优先级、网桥ID和成本的报文。

hello数据包中定义了网桥选择何时进行反应使用的所有计时器:

  • hello时间——网桥发送BPDU的时间间隔,发送的BPDU会被接收交换机/网桥转发,缺省值为2秒
  • 最大时间(MaxAge)——任何网桥判定拓扑改变需要等待的时间,通常该值是hello时间的倍数,缺省值为20秒
  • 转发延时——当一个接口从阻塞状态转换成转发状态的时延

 

1.jpg

 

STP选择根网桥的方式和政治选举类似。一开始,所有网桥都通过发送带有自身网桥ID和优先级别的hello数据包声称自己是根网桥。如果一个网桥收到另一个网桥的hello数据包,发现对方比自己更适合成为根网桥时,就停止声明自己是根网桥而开始转发这个更好的hello数据包。

 

端口成本:

2

 

(2)网络中发生变化后的反应

STP拓扑一旦设置,除非网络拓扑改变,否则将不会变化。当一个网络正常工作,不存在任何问题时,生成树的工作过程如下:

  • 根网桥将一个成本为0的hello数据包从所有接口发出
  • 邻接网桥将接收的hello数据包中的成本加上接收端口的成本后,从非根指定端口转发出去。
  • 当接收到hello数据包时网络中的所有网桥都重复步骤2
  • 根网桥每经过一个hello时间重复步骤1
  • 如果一个网桥在hello时间内没有收到hello数据包,它将继续正常工作,直到最大时间内都没有收到hello数据包,网桥将改变生成树对此作出反应。

 

生成树的中间状态:

1.jpg.jpg

 

总结:

使用生成树协议,可以保证桥接网络环境下存在多条冗余物理链路时只有一条活动的路径。生成树通过以下特性来达到此目标:

  • 所有网桥的接口最终都进入转发或者阻塞的稳定状态,处于转发状态的接口是生成树的一部分
  • 一个网桥被选举为根。选举过程从所有网桥都声明自己为根开始,直到最后某个网桥被所有网桥认为是最佳的根。根网桥的所有接口都处于转发状态。
  • 每个网桥直接或通过其他网桥间接地从根网桥接收hello数据包,每个网桥在多个接口上接收到hello数据包,接收具有最低成本hello数据包的那个端口被称为网桥的根端口,该根端口处于转发状态;
  • 所有其他接口被置于阻塞状态;
  • 根网桥每隔hello时间就发送hello数据包,其他的网桥期望接收到该包或其拷贝,这样它们才确认网络中没有发生变化。hello时间是由BPDU自身定义的,因此所有的网桥都使用同样的值;
  • 如果一个网桥在最大时间内没有接收到hello数据包,就开始改变生成树对此作出反应。拓扑不同反应也会不同(最大时间是有BPDU自身定义的,因此所有的网桥都使用同样的值)
  • 网络变化时,一个或多个网桥需要将接口从阻塞状态转换成转发状态,或从转发状态转换成阻塞状态。如果从阻塞状态转换到转发状态,首先会进入监听的中间状态。经过一个转发时延后(根BPDU定义的另一个计时器),进入学习状态,再经过一个转发时延,该接口被置于转发状态;
  • 生成树协议通过使用这些时延来保证网络中不会发生暂时的循环。