23-STP协议基本部署

1. STP协议和二层环路

在企业局域网络中使用冗余链路会带来环路的风险,导致广播风暴,MAC地址表震荡等各种问题,影响网络的稳定性,但有时候为了网络的稳定性,又不得不使用冗余链路。不过STP协议可以解决冗余链路带来的环路问题,并且当交换机的某一条链路发生故障时,可以迅速切换到备用链路,保证网络的可靠稳定性。

STP协议定义了三种端口角色来保证当前网络中没有环路,STP协议的选举规则如下:

  1. 先选举根桥
  2. 然后选举根端口
  3. 再选举指定端口

2. STP协议的选举过程

什么是根桥?说通俗点根桥其实就是一个交换机。

STP协议是通过构造一颗生成树来解决网络中的环路问题的,在每个STP网络中都会存在一个根桥交换机用于维护整个生成树(根桥就是整颗生成树的树根),其他的则为非根桥交换机,并且每个交换机都有一个桥ID(BID),这个BID由网桥优先级和MAC地址组成,网桥优先级是可以配置的,其范围是0 - 65535,默认值为32768,数值越小说明优先级越高,网桥优先级最高的交换机会被选举为根桥交换机,如果优先级相同,则会比较MAC地址,MAC地址越小的优先级越高,总结成一句话就是:根桥交换机的选举主要是依据网桥优先级和MAC地址(越小越优先)。

 

在上图中SW1交换机的桥ID是1024,并且该桥ID在当前网络中是最小的,那么根据选举根桥的规则直接选举SW1交换机为根桥,SW3为备根,SW2为非根。

 

STP协议除了要选举根桥外,还要选举端口:  

根端口(RP):离根桥交换机最近的非根交换机的端口,并且每个非根交换机最多只有一个根端口,用于接收BPUD分组。

指定端口(DP):每条链路上必须且只有一个指定端口,并且离根桥交换机最近,用于发送BPDU分组。

非指定端口(NDP):每个网络拓扑必须要有一个非指定端口,用于阻塞数据防止环路,也称为阻塞端口。

端口的选举主要依据以下几个参数(所有参数值都是越小越优先):

  1. 先选举Cost值最短(到根)
  2. 再选举BID最小
  3. 在选举邻居PID最小

现在根据端口的选举规则分别选举出根端口,指定端口,非指定端口,如下图所示:

 

有同学可能会疑惑为什么要选举根桥和端口?由于STP协议通过构造一棵生成树来解决网络的环路问题,根桥设备是发送BPDU分组,其他设备则是接收BPDU分组,以此来维护整个生成树网络,这就需要通过选举端口来决定谁来收发BPDU分组了。

 

1. 首先是选举DP端口,由于根桥要发送BPDU分组,那么根据DP端口的定义和选举规则,SW1交换机的f0/0和f0/1都选举为DP端口,用于发送BPDU分组。

2. 其次是选举RP端口,一般来讲,发送BPDU分组的对面就是接收BPDU分组的,所以SW2交换机的f0/0和SW3交换机的f0/0就是RP端口,用于接收BPDU分组。

3. 最后还要从SW2的f0/1到SW3的f0/1这条链路中分别选举出DP端口和NDP口,还是根据DP端口的选举规则,因为这条链路上的端口Cost值一样,所以无法参考Cost值来选举端口。需要根据BID来选举DP,由于SW3交换机的f0/1口的BID优先级更高,那么SW3交换机的f0/1口选举为DP口,那么SW2的f0/1口就是NDP口了,用于阻塞数据分组防止环路。

 

总结一下STP选举的规则:

  1. 先选举根桥,并且根桥的所有接口都是DP(因为根桥的接口离本身最近)
  2. 一般DP的对面就是RP(因为DP用于发送BPDU分组,而RP是用于接收BPDU分组)
  3. 选举流程:
    1. 先选举根桥
    2. 再选举DP和RP
    3. 最后选NDP(阻塞端口)

 

3. 实验——部署STP协议

STP协议也是基于Trunk链路的,在部署STP协议之前,所有交换机的链路必须设置为Trunk模式。

另外,思科的设备为防止环路默认情况下都开启了STP协议,但在工程环境下是非常不推荐使用默认的STP协议,因为默认的STP协议在选举端口时会随机选举一个端口为阻塞端口,特别是在一个大型企业网络中,如果默认的STP协议在汇聚层的设备上随机选举了一个阻塞端口,就有可能会造成大面积的网络故障。

所有链路设置为Trunk模式,略过......

 

配置交换机的BID,SW1为根桥,SW2为备根,SW3为非根:

SW1(config)#spanning-tree vlan 1 priority 0
SW2(config)#spanning-tree vlan 1 priority 1024
SW3(config)#spanning-tree vlan 1 priority 4096

 

show命令查看根桥SW1交换机的STP信息:

SW1#show spanning-tree vlan 1 brief

VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    0
             Address     cc01.08c8.0000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    0
             Address     cc01.08c8.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

//主要关注Sts字段(端口的状态)
Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/0      128.1    128    19 FWD     0     0 cc01.08c8.0000 128.1  
FastEthernet0/1      128.2    128    19 FWD     0     0 cc01.08c8.0000 128.2  

SW1#

STP协议的比较重要的几个字段:

This bridge is the root:这句话说明,SW1交换机自己就是根桥设备。

Sts:Sts字段表示端口的状态,一般有FWD和BLK两种状态,FWD表示转发状态(Sts字段很重要)。

Hello Time:表示hello分组的更新周期为2秒,生命周期为20秒,转发延迟为15秒

Address:MAC地址

Port ID:表示PID,越小越优先,端口的优先级默认是128,其范围是0 ~ 255。

从上面给出的STP协议信息可以看出,SW1交换机已经选举为根桥了,同时SW1所有的端口都处于FWD状态(转发状态)。

 

 

show命令查看根桥SW2交换机的STP信息:

SW2#show spanning-tree vlan 1 brief

VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    0
             Address     cc01.08c8.0000		//根桥的MAC地址
             Cost        19
             Port        1 (FastEthernet0/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    1024
             Address     cc02.1c80.0000		//自己的MAC地址
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/0      128.1    128    19 FWD     0     0 cc01.08c8.0000 128.1  
FastEthernet0/1      128.2    128    19 FWD    19  1024 cc02.1c80.0000 128.2  

Cost字段:备根到根桥的Cost值(所花费的开销)。

我们可以看到SW2交换机所有的接口处于转发状态(FWD状态)。

 

 

show命令查看根桥SW3交换机的STP信息:

SW3#show spanning-tree vlan 1 brief

VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    0
             Address     cc01.08c8.0000
             Cost        19
             Port        1 (FastEthernet0/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    4096
             Address     cc03.2f4c.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/0      128.1    128    19 FWD     0     0 cc01.08c8.0000 128.2  
FastEthernet0/1      128.2    128    19 BLK    19  1024 cc02.1c80.0000 128.2  

SW3#

重点关注Sts字段,SW3交换机的优先级是4096,并且SW3的f0/1口是处于BLK状态(阻塞),该端口用于防止环路。

 

接下来设置SW1交换机为主根,配置如下:

SW1(config)#spanning-tree vlan 1 root primary
//这句话的意思是SW1设备已经设置为主根了
% This switch is already the root of VLAN1 spanning tree
//优先级是0
 VLAN 1 bridge priority unchanged at 0
 VLAN 1 bridge max aging time unchanged at 20
 VLAN 1 bridge hello time unchanged at 2
 VLAN 1 bridge forward delay unchanged at 15
SW1(config)#

 

SW2交换机为备根,配置如下:

SW2(config)#spanning-tree vlan 1 root secondary 
 VLAN 1 bridge priority set to 16384
 VLAN 1 bridge max aging time unchanged at 20
 VLAN 1 bridge hello time unchanged at 2
 VLAN 1 bridge forward delay unchanged at 15
SW2(config)#

原先自定义设置为SW2的优先级为1024的,但是设置SW2为备根后,优先级变成16384了。

 

下面的内容是作为补充的。

进入接口配置模式下,可以修改链路的Cost(开销)值和端口的优先级,配置如下:

//修改端口的Cost值
SW1(config-if)#spanning-tree cost ?
  <1-65535>  Change an interface's spanning tree path cost 
//修改端口的优先级
SW1(config-if)#spanning-tree port-priority ?
  <0-255>  Change an interface's spanning tree priority

4. STP数据分组

STP协议是通过BPDU数据分组来维护整个生成树的网络的,BPDU(Bridge Protocol Data Unit,网桥协议数据单元)用于实现生成树的选举和维持。一般包含选举的参数,例如BID、PID、Cost。

注意:初始化情况下,所有设备都能发送,当根选举出来之后,只有根才能发送,其他交换机仅仅是转发。

现在通过wireshark工具抓取SW1的f0/1口到SW3的f0/0口链路的BPDU数据分组,BPDU分组主要有两种:一种是配置BPDU分组,另一种是TCN/TC/TCA拓扑变更分组。

 

4.1配置BPDU分组

配置BPDU分组相当于一个hello包,包含了STP选举的信息,配置BPDU数据分组格式如下所示:
 

BPDU分组常用的字段:

Root Identifier字段:该字段包含了根桥的一些信息,例如根桥的BID等。

Bridge Identifier字段:该字段包含了根桥的BID

Message Age字段:BPDU分组在网络中传播的存在时间

Max Age字段:BPDU分组的最大生命周期时间

Hello Time字段:BPDU分组的更新周期时间

Forward Delay字段:端口状态变迁的延迟时间

我们可以看到STP协议的BPDU分组是基于802.3标准封装的,从BPDU分组中可以看出这其实是一个hello包,包含了STP的选举信息。

 

4.2 TCN/TC/TCA拓扑变更分组

TCN/TC/TCA拓扑变更分组:主要是在运行了STP协议的局域网络环境下发生故障时,用于通知网络拓扑信息变更,更改MAC地址的更新时间为15秒,其目的是加速MAC地址表的快速收敛或更新。

 

TCN分组格式:

 

 

TC分组格式:

 

 

TCA分组格式:

 

原创文章 317 获赞 280 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_35733751/article/details/100013335