为何会需要stp?

因为二层交换网络中可能出现环路,环路上的设备在进行泛洪的时候,会导致广播风暴;广播风暴对网络的影响非常大,会严重消耗设备 资源及网络带宽,导致网络正常的数据转发出现停滞甚至失败。

特别的,当因环路导致需要通过泛洪学习的MAC地址在两个端口间来回绑定的现象,叫做MAC地址漂移。

何为stp?

STP:Spanning-tree protocol

STP能够在网络中存在二层环路时,通过阻塞特定端口从而打破环路,并在网络出现拓扑变更时及时收敛,以保证网络的冗余性。

stp如何工作?

stp通过在同一个广播域中的开启了stp功能的交换机互相发送和接受BPDU报文,通过BPDU报文中的内容,进行Root节点的选举、根端口RP的选择、指定端口DP的选举,非指定端口的阻塞,来消除环路的。

BPDU报文内容,以及其作用 ?

网桥协议数据单元 Bridge Protocol Data Unit
依赖BPDU报文的泛洪,使得STP能够正常工作。

当网络初始化时,同一个广播域中的交换机开始发送BPDU报文,也接收其它交换机发送的BPDU报文。当网络信息通过BPDU报文在广播域中同步完毕后,开始进行Root选举,当选举出来Root交换机后,其他交换机不会再发送BPDU报文,只会接受BPDU报文和中继BPDU报文,而Root交换机将会继续发送BPDU报文。

BPDU报文中的字段内容:
123664520190519215451496883421740.png

其中比较重要的字段有根ID、路径开销、桥ID、端口ID,下面一一介绍这四个字段:

  1. 根ID:即广播域中选举出来的根路由器的ID;桥ID:即广播域中其他非根路由器的ID。

根ID和桥ID都是BridgeID,BridgeID一共8字节,前两个字节是优先级,后6字节是MAC地址。
1236645201905192159096771245782544.png

当广播域进行Root节点选举的时候 ,首先比较优先级,优先级数值越小,优先级越高,默认优先级为32768,且配置时以4096的倍数配置;如果优先级相同,则比较MAC地址,Mac地址小的为Root节点。

当然,在进行端口选举的时候 ,也会看BridgeID,比较顺序为:Root BridgeID 》路径开销》发送桥ID》端口ID

  1. Path Cost:路径开销

路径开销是一个端口量,跟接口带宽有一定关系。

端口带宽和开销的关系:
1236645201905192202400091985391351.png

注意根节点的端口不算开销。
123664520190519220322649155977632.png

可以看到,从根节点发送出来的BPDU报文开销为0,当穿过一个中继之后,开销加上了中继节点上的如接口的开销。

  1. Port ID:

端口ID(2字节)= 端口优先级(1字节)+ 端口编号(1字节)
端口优先级默认128,范围0-255,越小越优先:
123664520190519220719921284756655.png

介绍完了上面的几个重要属性,我们下面来看看STP如何运行:

  1. 每个广播域选择一个根桥(Root Bridge),其实就是选择一台交换机
  2. 每个非根桥上选择一个根端口(Root Port):
    123664520190519221030526605395609.png
  3. 每个段(segment)选择一个指定端口(Designated Port),段即为两个交换机之间的连接,根桥的所有端口都是指定端口,不会被阻塞。
    12366452019051922121719470122885.png
  4. 选出非指定端口(NonDesignated Port, 将会被阻塞)
    1236645201905192213201381745144061.png

下面使用华为的eNSP进行模拟操作,先介绍一下简单的命令:

基础配置 :

指定生成树协议类型STP/RSTP/MSTP
stp mode {stp| rstp} //默认时MSTP

配置交换机优先级
stp priority
//默认32768

指定交换机为根桥
stp root primary // 实际上是将交换机的优先级设计为0

指定交换机成为次根桥
stp root secondary // 事实上是将交换机的优先级 设置 为4096

启用生成树协议
stp enable // 默认处于disable状态

配置端口STP优先级
interface g 0/0/24
stp priority

配置端口路径的开销
interface g 0/0/24
stp cost

查看stp摘要信息
display stp brief

我们先在拓扑界面上搭建如下拓扑:

1236645201905192216170711713291092.png

我们使用LSW1作为Root节点,LSW2作为从节点:

LSW1配置:
123664520190519221731382333886578.png

LSW2配置:
1236645201905192218107951732163546.png

LSW3配置:
123664520190519221858606142828168.png

配置完成后,我们使用dis stp brief查看stp摘要信息:

LSW1:
1236645201905192220006961997778525.png

可以看到,LSW1作为根节点,两个端口都是DP端口,而且状态都为转发模式,这个模式说明端口工作正常。

LSW2:
123664520190519222117727837483260.png

可以看到,LSW2作为从节点,有一个根端口和一个选定端口,都为转发模式。

LSW3:
1236645201905192222104971776090578.png

可以看到LSW3有一个端口为根节点,处于转发模式,另外一个端口处于阻塞模式。

下面补充说明一下端口的状态:
1236645201905192223190921795767537.png

端口状态转换流程:
123664520190519222343830225171288.png

Q.E.D.