天天看点

HCIA STP的端口状态与BPDU

一、前言

前面我们研究了STP原理

先回顾一下根桥、根端口、指定端口的选举依据。

根网桥选举依据:

1)先看优先级

2)优先级一样看MAC地址

3)相对较小的是根网桥

这里BID其实就是交换机的优先级+交换机MAC地址

根端口,指的是非根网桥(交换机)所有端口中,距离根网桥最近的端口,选举依据有:

1)路径开销,就是端口的带宽,带宽越大开销越小,端口总开销的计算是“将根桥到达端口前所有’入’端口开销加起来”,这里只计算入口不计算出口,总开销较小的就是根端口。我们使用的交换机端口默认开销都是200000,这个可以通过display stp查询。

2)对端BID,如果开销一致,则比较对端的BID(也就是CIST Bridge的值),值较小的就是根端口。

3)对端PID,如果BID也一样就比较对端的PID,PID指的是Port ID,由端口优先级(默认128)+端口号组成。

4)本端PID,如果对端PID也一样,那就比较本端的PID,较小的就是根端口了。

指定端口,指的是链路上的两个端口中,距离根网桥最近的端口,选举依据有:

1)路径开销,链路上两个端口中路径开销最小的就是指定端口

2)交换机BID,路径开销一样时,链路上两个端口所在交换机BID较小的是指定端口

3)端口PID,BID也一样时,则比较端口的PID,较小的是指定端口

阻塞端口,一个端口如果既非根端口又非指定端口,那就是阻塞端口了。

综上,我们可以发现所有选举的依据其实就是:

1)BID:交换机优先级(默认32768)+交换机MAC地址

2)PID:端口优先级(默认128)+端口号

3)路径开销:与端口带宽相关的一个值,带宽越大值越小

二、BPDU报文

报文内容如下图所示,标红的部分就是与选举有关的字段,可以看到它囊括了BID、PID、路径开销,足够我们来实现STP协议了。

HCIA STP的端口状态与BPDU

三、选举过程与端口状态

1.初始关机状态

我们可以假设网络互联的交换机都已配置好了STP,并且现在都是关机状态。

HCIA STP的端口状态与BPDU

2.选举

现在同时启动四台交换机,由于他们都配置了STP,所以STP协议开始发挥作用。

由STP的机制可知,一开始所有交换机都认为自己是“根桥”,他们会将BPDU报文中的Root Identifier字段设置为自己的BID并向网络中其他交换机发自己的BPDU,具体怎么发的不知道,但是我们知道网络中所有交换机都能收到其他交换机的BPDU就行了。

如下图应当是交换机启动时各端口向隔壁发BPDU的情况。

HCIA STP的端口状态与BPDU

交换机收到其他BPDU后就比较Root Identifier字段中的BID与自己的BID,如果发现自己的BID比较大,那就将BPDU中Root Identifier替换这个较小的BID并向隔壁的交换机继续发。向下图这样应当就是各交换机通过BPDU最终收集到的信息,包括了根桥BID、对端BID、对端PID、本端BID、本端PID,依据这些信息就可以选举出根桥、根端口、指定端口。

HCIA STP的端口状态与BPDU

3.端口状态与时间阈值

交换机自然不是一启动就完成了根桥和各端口的选举,他必然是有一个过程的,从启动交换机到端口选举再到MAC学习整个过程如下:

1)交换机启动,启动后所有端口默认进入Disabled:禁用状态,端口既不处理和转发BPDU报文,也不转发用户流量。端口会在这种状态下停留10秒钟时间。很自然的,交换机刚启动需要预留10秒钟时间来等待自身稳定。10秒钟的Disabled结束后,交换机会先进入Blocking:阻塞状态,并持续20秒钟时间。不知道为啥需要这20秒。

2)选举根桥和各端口,交换机接着进入Listening:侦听状态,端口可以转发BPDU报文,但不能转发用户流量。在默认情况下,该端口会状在这种态下停留15秒钟的时间。很明显这时候网络中的交换机通过交换BPDU来获取必要信息并选举出根桥、根端口、指定端口和非根非指定端口(也就是需要阻塞的那个)。

3)学习MAC地址,选好根桥和各端口后进入Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量默认情况下,端口会在这种状态下停留15秒钟时间。

4)转发流量,学习好MAC地址后端口就进入Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。

5)阻塞端口,那么非根端口和非指定端口,就再次进入Blocking:阻塞状态,端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。

四、网络变化与收敛时间

如下图,我们有这样一个拓扑的网络,我已经根据前面的计算方式把根桥、根端口、指定端口、阻塞端口都标出来,并在交换机上逐一确认过标注是对的。

HCIA STP的端口状态与BPDU

假如我们现在把LSW2与LSW3中间的链路拔掉,根据规则LSW3的E0/0/1会成为根端口,但其端口需要经过“Listening:侦听状态和Learning:学习状态”这两个状态,也就是需要最少30秒才能完成稳定。

现在考虑另一个场景,假如网络中接入另一台交换机LSW5,他上电开机后,一般会影响到两连的两个交换机,但假如其优先级比别人都小一点(比如改成4096而别人都是32768),然后我们把这个交换机上电后再接入到网络中。

HCIA STP的端口状态与BPDU

很明显网络需要重新选举根桥、根端口、指定端口等,但根据我实际观察只有一部分端口受到影响,会逐步经历Blocking:阻塞状态、Listening:侦听状态、Learning:学习状态这三个阶段,也就是至少需要50秒网络才能真正稳定。

这30秒和50秒也就是STP的收敛时间。

五、回顾

总的来说,STP使用BPDU这个报文来传递各种信息,包括BID、PID、路径开销等,交换机收集到各种信息后“选举”出根桥、根端口、指定端口,最后将非根非指定端口阻塞,这个过程会经历Disabled:禁用状态(10秒)、Blocking:阻塞状态(20秒)、Listening:侦听状态(15秒)、Learning:学习状态(15秒),最后根端口和指定端口进入Forwarding:转发状态,非根非指定端口进入Blocking:阻塞状态。

我们将端口进入稳定状态需要的时间称为收敛时间,不同的网络变动可能需要的收敛时间不一样,主要有30秒和50秒两种。