11-STP生成树

一:STP生成树

  生成树协议STP(Spanning Tree Protocol)将环形网络修剪成为一个无环的树型网络,避免报文在环形网络中的增生和无限循环。

在一个复杂的网络环境中,难免会出现环路。由于冗余备份的需要,网络设计者都倾向于在设备之间部署多条物理链路,其中一条作主用链路,其他链路作备份,这样都有可能会导致环路产生。

环路会产生广播风暴,最终导致整个网络资源被耗尽,网络瘫痪不可用。环路还会引起MAC地址表震荡导致MAC地址表项被破坏

为了破除环路,可以采用数据链路层协议STP,运行该协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降

二:STP工作原理

STP通过阻塞端口来消除环路,并能后实现链路备份的目的。

STP的主要作用:

  1. 消除环路:通过阻断冗余链路来消除网络中可能存在的环路。
  2. 链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连接

三:STP相关概念

  • 根桥

  树形网络结构必须有树根,于是STP/RSTP引入了根桥(Root Bridge)概念。

对于一个STP/RSTP网络,根桥有且只有一个,它是整个网络的逻辑中心,但不一定是物理中心。但是根据网络拓扑的变化,根桥可能改变。

  • BID(Bridge ID):桥ID

  IEEE 802.1d标准中规定BID是由2字节的桥优先级(Bridge Priority)与桥MAC地址构成,即BID(8字节) = 桥优先级(2字节) + 桥MAC(6字节)

在STP网络中,桥ID最小的设备会被选举为根桥。在华为公司的设备上,桥优先级支持手工配置。

  • PID(Port ID):端口ID

  PID由两部分构成的,即PID(16位) = 端口优先级(4位) + 端口号(12位)。

PID只在某些情况下对选择指定端口有作用,即在选择指定端口时,两个端口的根路径开销和发送交换设备BID都相同的情况下,比较端口的PID,PID小者为指定端口。

  • 路径开销(RPC)

路径开销是STP/RSTP协议用于选择链路的参考值。STP/RSTP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。根设备的端口的路径开销都为0。

在一个STP/RSTP网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的开销。

  • PC(port cost)

PC的计算需要依据端口带宽来计算

四、STP选举

1、STP的选票

>>>STP的选举是通过比较BPDU(Bridge Protocol Date Unit 桥协议数据单元)的字段

>>>BPDU主要比较以下字段:

     Root ID 根ID:根ID=根优先级+MAC地址 (根优先级默认是32768,若根优先级一样则比较MAC地址

     Cost of path 路径开销:路径开销是在端口发送BPDU的时候加

                                             带宽10M开销100,带宽100M开销19,带宽1G开销4,带宽10G开销2

     Bridge ID 桥ID:桥ID=桥优先级+MAC地址(桥优先级默认是32768,若桥优先级一样则比较MAC地址)

     Port ID 端口ID:端口ID=端口优先级(默认是128)+端口号     例如:f0/1的端口ID是128.1 

2、STP的端口角色

>>>根端口:非根交换机上去往根交换机最好的端口(每一个非根交换机上有一个

>>>指定端口:根交换机去往非根交换机最好的接口(每一个段有一个

>>>阻塞端口:既不是根端口也不是指定端口          (在非根交换机上,整个环路只有一个

五、STP协议端口状态

 

六、BPDU、计时器详解

1、标准生成树STP BPDU包格式

 

 

 BPDU字段包含的信息:

Protocol ID   协议ID

Version    STP版本(三种)

STP(802.1D)传统生成树    值为0

RSTP(802.1W)快速生成树    值为2

MSTP(802.1S)多生成树    值为3

Message Type   消息类型(常见的两种)

   配置BPDU:负责建立,维护STP拓扑     

   TCN BPDU:传达拓扑变更        

Root ID      根桥ID

Cost of Path   路径开销

Bridge ID      桥ID

Port ID     端口ID

Message Age    配置BPDU在网络中传播的生存时间 20

Max Age           配置BPDU在设备中能够保存的最大生存周期  20s

Hello Time    问候时间(根桥通过不断发送STP维持自己的地位,Hello time 是发送的间隔时间) 2S

Forward Delay   端口从listening -> learning  或 learning -> forwarding 的转态需要时间 15S

华为设备STP  的配置BPDU格式:

 

 

从这里可以分析出,该端口的端口号是2,据开销20000可知千兆口,所以为G0/0/2

很明显该端口所属的交换机不是根桥,并且是根桥的邻居。BPDU类型是配置BPDU

下面看下当某条链路断开时,发生了拓扑变化的BPDU报文

 比如有一台交换机,一个端口为根端口,另一个为阻塞端口。如果根端口被关闭了

那么阻塞端口会发送一个拓扑变更BPDU的报文给相邻的交换机,这个BPDU类型为:TCN

 

而相邻的交换机会向这个阻塞端口发送一个确认拓扑变更的BPDU,这样阻塞端口就知道自己的消息被收到并将会传达。

这个BPDU类型为 TCA,同时相邻的交换机就会把继续把 TCN 向根端口方向转发,之后也会收到上层交换机发来的TCA确认接收报文

 

 

如果根桥收到了这个由阻塞端口传来的TCN,便会下发拓扑变更BPDU其类型为TC,每台收到此TC报文的交换机都会将自己的MAC缓存表刷新或减低过期时间。

然后再向下传达这个TC报文

 

 

 

 

图1、在交换机 LSW5中 GE0/0/1原本为阻塞状态,GE0/0/0为根端口

但是有一天GE0/0/2端口down掉了

如果没有上述的拓扑变更BPDU的话,那么会发生如下情况

client6 发送 数据 给 client4

缓存表里client6的mac地址对应的却是GE0/0/2的接口(已经down掉了)

这样导致client6无法与外界通信,除非要等mac缓存表的过期时间300s也就是5min

这个时间实在太长了,解决的办法就是发送拓扑变更给根桥,根桥同意变更后向下发送

TC BPDU,所有收到此报文的交换机都把MAC缓存表刷新或减少过期时间来避免收敛速度慢

图2、与根桥的直连链路发生故障

 当根桥发生故障时,不会再向其他桥设备发出配置BPDU报文。当非根桥没有收到根桥发出的配置BPDU报文后,会等待一个最大老化时间(默认时间20秒)。当到达最大老化时间后,非根桥会认为根桥网络不可达(根桥故障),使原本阻塞的端口会由阻塞状态(阻塞状态只接收对端发送的配置BPDU报文,不能发送BPDU;不能参与数据的转发)变为监听状态(监听状态是选举根与各个端口类型的状态,此时依旧不能参与数据的转发),此变化过程需要15秒的时间。之后,端口状态由监听状态变为学习状态(此过程需要15s的时间)。处于学习状态的端口可以学习接收到的数据中的MAC地址,此时依旧不能转发数据。再次经过15秒后,端口状态由学习状态变化为转发状态,此时,端口恢复数据的转发。

  从上面可以看出:在STP中,当根桥出现故障时,会自动重新选举新的根桥与各个端口(根端口、指定端口、阻塞端口)。经过(20秒+15秒*2=50秒)的时间才会恢复数据的转发

图3、直连链路发生故障

 

 

  当上图的链路发生故障时,由于另外一条链路仍然可以收到根桥发出的配置BPDU报文,所有LSW2会立刻知道链路发生问题。原本的阻塞端口会变成监听状态,在变为学习状态,最后变为转发状态,整个过程会用2*15秒=30秒的时间。

  从上面可以看出:在STP中,当直连链路发生故障时,需要经过30秒的时间才会恢复网络数据的转发

图4、非直连链路发生故障

 

 

 当上图链路发生故障时,LSW2会感知到链路发生故障,会以自己为根桥给LSW3发送配置BPDU报文。当LSW3收到LSW2的配置BPDU报文后,与收到根桥(LSW1)的配置BPDU报文进行对比,对比发现LSW2发送的配置BPDU报文不是最优的,便不理会。当LSW3经过一个最大老化时间(默认20秒)后,LSW3上的阻塞端口由于收不到来自根桥的配置BPDU,便由阻塞状态转换为转发状态,将根桥的配置BPDU报文发送给LSW2。当LSW2收到根桥的配置BPDU报文后,与自己的配置BPDU报文进行对比。发现不是最优配置BPDU报文,然后进行端口收敛。整个过程会持续(20秒+2*15秒=50秒)的时间。

  从上面可以看出:在STP中,当非直连链路发生故障时,需要经过50秒的时间才会恢复数据的转发

 

2、计时器

  • 配置BPDU报文每经过一个交换机,Message Age都加1
  • 如果Message Age 大于Max Age ,非根桥会丢弃该配置BPDU

 Hello Time是指运行STP协议的设备发送配置BDPU的时间间隔默认2s 用于检测链路是否存在故障,交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文,以确认链路是否存在故障,当网络拓拓扑稳定后,该值只有在根桥上修改才有效

Message Age 如果配置BPDU是根桥发出的,则Message Age 为0 ,否则 Message Age,是从根桥发送到当前桥接受到BPDU的总时间,包括传输延时等,实际现实中,配置BPDU报文,每经过一个交换机,Message Age 增加 1

Max Age 是指BPDU报文的老化时间(默认20s)可在根桥上通过命令人为修改这个值,Max Age 通过配置BPDU报文的传递,可以保证Max Age在整个网络中一致,非根桥设备收到配置BPDU报文后,会将报文中的Message Age 和 Max Age 进行比较,如果Message Age 小于等于Max Age

则该非根桥设备会继续转发配置BPDU报文,如果Message Age 大于Max Age 则该配置BPDU报文将被老化掉,该非跟前设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致根桥连接失败

 

posted @ 2020-04-11 22:41  龙门、三少  阅读(456)  评论(0编辑  收藏  举报