一.生成树的概述
生成树协议工作在第二层,通过一定技术将网络的结构变成树形结构。原因【防止网络中出现环路】;出现环形的网络拓扑时存在的问题【信息无法到达对方,信息在网络中始终循环】
参考1:
https://baike.baidu.com/item/%E7%94%9F%E6%88%90%E6%A0%91%E5%8D%8F%E8%AE%AE/1309781?fromtitle=%E7%94%9F%E6%88%90%E6%A0%91&fromid=10284070&fr=aladdin
参考2:https://blog.51cto.com/dengqi/1253320
二.生成树网络中的接口类型【注意的问题:所有的端口都是需要进行学习{优先级,MAC,带宽}】
(1)根端口:【首先必须找到根桥,根桥所对应的端口均为根端口】【由优先级<0-61440>
和MAC地址来决定】【优先级0是最高级别,61440是最低级别的,4096为倍数;即0,4096,8192.......】
(3)阻塞端口:【根据MAC地址和到达根桥花费值来决定】
(4)可以通过修改端口的优先级,来调整该端口是指定端口还是阻塞端口;<0-240>的参数,0的优先级最低,240的优先级最高;是以16位倍数进行调整,即0,16,32......;
三.生成树的基础实例
分析:
1-由两台交换机和4台PC机构成的一个简单的局域网;
2-两台交换机之间由两条链路连接在一起;即在两台交换机之间形成了一个环路;其中的一个接口将处于监听状态;则该链路不参与数据的传输,只作为备份的链路存在;
3-看到在两条链路上的四个节点之间,有一个节点处于监听状态【在交换机上默认启动了生成树协议】
4-所有PC机在同一个VLAN下,所有只规划了192.168.10.0/24的C类标准网络;
5-在交换的网络中,每个VLAN都能够构成一个生产树;即有自己的树根、根端口、指定端口和阻塞端口等;
验证:四台PC机在同一个局域网中,在默认情况下,可以相互通信;
实例1:在没有关闭生成树协议的情况下,PC0到PC1【没有经过环路,是SW1上的设备】
C:>ping 192.168.10.2
Reply from 192.168.10.2: bytes=32 time=5ms TTL=128
Reply from 192.168.10.2: bytes=32 time<1ms TTL=128
Reply from 192.168.10.2: bytes=32 time<1ms TTL=128
Reply from 192.168.10.2: bytes=32 time<1ms TTL=128
实例2:在没有关闭生成树协议的情况下,PC0到PC2【经过环路,是SW1到sw2】
C:>ping 192.168.10.3
Reply from 192.168.10.3: bytes=32 time=1ms TTL=128
Reply from 192.168.10.3: bytes=32 time<1ms TTL=128
Reply from 192.168.10.3: bytes=32 time<1ms TTL=128
Reply from 192.168.10.3: bytes=32 time<1ms TTL=128
实例3:在关闭生成树协议的情况下,PC0到PC1【没有经过环路,是SW1上的设备】
(1)关闭sw1的生成树协议
Switch>en
Switch#conf t
Switch(config)#host sw1
sw1(config)#no spanning-tree mode //关闭生成树
sw1(config)#no spanning-tree vlan 1 //关闭VLAN1的生成树协议
(2)关闭sw2的生成树协议
Switch>en
Switch#conf t
Switch(config)#host sw1
Sw2(config)#no spanning-tree mode //关闭生成树
Sw2(config)#no spanning-tree vlan 1 //关闭VLAN1的生成树协议
(3)现象:两台交换机之间链路的监听端口不存在了;即存在环路;
C:>ping 192.168.10.4
Request timed out.
Reply from 192.168.10.4: bytes=32 time=23ms TTL=128
Request timed out.
Request timed out.
PC0与PC4【跨交换机之间的连接就出现了断点;是由于网络中存在环路的原因。】
(4)结论,当网络中存在环路时,无论是跨交换机通信还是不跨交换机通信,网络设置之间的连接都将存在一定的问题,有不规则的断点存在。
四.根桥的选取
1.根桥的选举:
(1)选择方法1:根据优先级(0~61440)来选择,优先级最小的为根;若优先级相同,则看交换机背板的基本MAC地址,MAC地址最小的为根,MAC最大的就必定有一个端口为阻塞端口;
注意:交换机的背板MAC地址的查看方法【sw1#show version】
(2)选取方法2:通过直接修改交换机设备的优先级,来决定生成树的根;默认情况下,所有交换机的优先级都是【32768】;由于默认情况下所有交换机上只有一个VLAN1,所以在查看生成树信息时,只能看到VLAN1优先级信息。命令:
sw1(config)#spanning-tree vlan 1 priority 0 //设置VLAN1的优先级为0,0为最高优先级;
(3)选取方法3:通过命令直接定义主根和副根;
定义主根的命令:spanning-tree vlan * root primary //配置为主根
定义副根的命令:spanning-tree vlan * root se //配置为福根
实例1:正常状态下的根桥选择实例【即未对交换机做任何的配置】
如何来确定SW1是否为根桥?通过【sw1#show spanning-tree】命令后,查看在结果中是否存在【This bridge is the root】,如果有存在,则SW1是根桥,否则,SW1不是根桥;
sw1#show spanning-tree //查看生成树协议信息
VLAN0001 //vlan的编号信息
Spanning tree enabled protocol ieee //表示交换机使用的生成树协议是"PVST+",这也是思科默认的生成树协议。
Root ID Priority 32769 //根桥的优先级【生成树的默认优先级+VLAN的编号】
Address 0001.4237.CEAB //根桥的基本MAC地址
Cost 19 //从SW1都根桥的花费值
Hello Time 2sec Max Age 20sec Forward Delay 15sec //BPDU发送间隔默认2秒,最大存在时间是20秒,转发延时是15秒。
Bridge ID Priority 32769 //sw1的优先级【生成树的默认优先级+VLAN的编号】
Address 0030.A351.C7CE //SW1的MAC地址
Interface【接口】Role【角色】Sts【状态】Cost【花费】 Prio.Nbr Type
---------------- ---- --- --------- ----------------------------------------
Fa0/4 Desg FWD 19 128.4 P2p
Fa0/3 Desg FWD 19 128.3 P2p
Fa0/2 Altn BLK 19 128.2 P2p
Fa0/1 Root FWD 19 128.1 P2p
角色:Desg:指定端口;Root:根端口;Altn:替换端口
状态:FWD:转发状态,BLK:阻塞状态,LRN:学习状态
类型:P2P:点到点【指的是接口的类型】
花费:19【说明sw1与sw2之间的链路带宽是100M】
sw2#show spanning-tree //查看生成树协议信息
VLAN0001 //显示VLAN1的相关生成树的信息
Spanning tree enabled protocol ieee //表示交换机使用的生成树协议是"PVST+",这也是思科默认的生成树协议。
Root ID Priority 32769 //根桥的优先级【生成树的默认优先级+VLAN的编号】
Address 0001.4237.CEAB //根桥的基本MAC地址
This bridge is the root //指出该交换机是根桥
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec //BPDU发送间隔默认2秒,最大存在时间是20秒,转发延时是15秒。
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) //sw1桥ID的优先级
Address 0001.4237.CEAB //sw2的MAC地址
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time20 //BPDU发送间隔默认2秒,最大存在时间是20秒,转发延时是15秒。
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------
Fa0/2 Desg FWD 19 128.2 P2p
Fa0/3 Desg FWD 19 128.3 P2p
Fa0/4 Desg FWD 19 128.4 P2p
Fa0/1 Desg FWD 19 128.1 P2p
sw2#
实例2:通过改变优先级来确定SW1为VLAN1的根桥
sw1(config)#spanning-tree vlan 1 priority 0 //设置VLAN1的优先级为0
sw1#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 1 //优先级0+VLAN的编号
Address 0030.A351.C7CE
This bridge is the root //指定当前的交换机为根交换机
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 1 (priority 0 sys-id-ext 1)
Address 0030.A351.C7CE
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time20
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- ----------------------------------------
Fa0/4 Desg FWD 19 128.4 P2p
Fa0/3 Desg FWD 19 128.3 P2p
Fa0/2 Desg FWD 19 128.2 P2p
Fa0/1 Desg FWD 19 128.1 P2p
实例3:通过命令来确定SW2为VLAN1的根桥
sw2(config)#spanning-tree vlan 1 root primary //指定当前的交换机为主要根交换机
sw2#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 1 //通过rootprimary命令后,设备的优先级变为0
Address 0001.4237.CEAB
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 1 (priority 0 sys-id-ext 1)
Address 0001.4237.CEAB
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time20
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- ----------------------------------------
Fa0/2 Desg FWD 19 128.2 P2p
Fa0/3 Desg FWD 19 128.3 P2p
Fa0/4 Desg FWD 19 128.4 P2p
Fa0/1 Desg FWD 19 128.1 P2p
实例4:根据拓扑图完成根交换机的配置
配置要求:
(1)创建vlan
(2)将相应的接口划分到指定的vlan中
(3)设置trunk链路(8条)
(4)启用生成树协议STP
(5)配置主/副根
①M1作为vlan2 和vlan1的主根,vlan3的副根
②M2作为vlan3 的主根,vlan2和vlan1的副根
(6)配置实例
①spanning-tree vlan *root primary //配置为主根
②spanning-tree vlan *root se //配置为福根
(7)查看配置情况【show spanning-tree】
配置过程:
1-创建VLAN信息及设备的主机名
Switch>en
Switch#conf t
Switch(config)#vlan 2
Switch(config-vlan)#vlan 3
Switch(config-vlan)#hostname S1
2-将接口划分到指定的VLAN中
S1(config)#int f0/4
S1(config-if)#switchport mode access
S1(config-if)#switchport access vlan 2
S1(config-if)#int f0/5
S1(config-if)#switchport mode access
S1(config-if)#switchport access vlan 3
3-设置设备间的TRUNK链路
M1(config)#int range f0/1-4
M1(config-if-range)#switchport trunk encapsulation dot1q//封装DOT1Q协议
M1(config-if-range)#switchport mode trunk //设置接口的工作模式为trunk
M1(config-if-range)#switchport trunk allowed vlan 1-3 //只允许vlan1-3的信息通过该链路
M2(config)#int range f0/1,f0/3-4,f0/7
M2(config-if-range)#switchport trunk encapsulation dot1q
M2(config-if-range)#switchport mode trunk
M2(config-if-range)#switchport trunk allowed vlan 1-3
S1(config)#int range f0/1-3,f0/7
S1(config-if-range)#switchport mode trunk
S1(config-if-range)#switchport trunk allowed vlan 1-3
S2(config)#int range f0/1-3,f0/6
S2(config-if-range)#switchport mode trunk
S2(config-if-range)#switchport trunk allowed vlan 1-3
4-检查VLAN的划分情况
5-查看TRUNK链路的配置情况
6-启动生成树协议
M2(config)#spanning-tree mode pvst
7-配置主根和副根
(1)配置M1作为vlan2 和vlan1的主根,vlan3的副根
M1(config)#spanning-tree vlan 1-2 root primary //配置M1为vlan1和vlan2的主根
M1(config)#spanning-tree vlan 3 root secondary //配置M1为vlan3的副根
(2)M2作为vlan3 的主根,vlan2和vlan1的副根
M2(config)#spanning-tree vlan 3 root primary //配置M1为vlan3的主根
M2(config)#spanning-tree vlan 1-2 root secondary //配置M1为vlan1和vlan2的副根
8-检查主根和副根的配置情况
9-改变端口的带宽,从而改变端口的花费值,观察端口的状态,以f0/6为例
M2(config)#int f0/6
M2(config-if)#speed 10
S2(config)#int f0/6
S2(config-if)#speed 10
说明:发现F0/6接口在VLAN1-3上的状态均变成了【阻塞状态】,且花费值变成了100;
S1(config)#int f0/1
S1(config-if)#spanning-tree vlan 1-3 port-priority 240
M1(config)#int f0/1
M1(config-if)#spanning-tree vlan 1-3 port-priority 240
说明:发现FO/1的优先级变成240了;
五.最佳路径
1.最佳路径的选择是根据“开销路径”来选择;【开销路径=路径上各发送端口的开销之和】【10G=2;1G=4;100M=19;10M=100】
2.阻塞端口的选择【1.根据路由的花销,最大的花销被设置阻塞端口】【如果说花销是相同的,通过优先级别来判断,优先级别的数字越小,则该端口被设置阻塞端口】【如果花销相同,优先级也相同,MAC地址最大的被设置为阻塞端口】【当在一个交换机上BID(桥ID)和MAC地址是相同的,则通过两个接口的PID号来决定,PID号最大的被设置为阻塞端口】
六.说明
STP通过以下四步使网络收敛为无环拓扑
(1)每广播域选出唯一一个根桥
(2)每非根桥产生唯一一个根端口
(3)每网段有且只有一个指定端口
七.配置方法
1.通过命令直接指定主根和副根
spannning-tree vlan * root primary //指定该交换机为某个vlan的主根[通过这种方式设置的主根,一般不会发生变化]
spannning-tree vlan * root secondary //指定该交换机为某个vlan的副根[通过这种方式设置的副根,一般不会发生变化]
2.通过设置优先级来指定主根和副根
spanning-tree vlan * priority<0~61440>//以4096的倍数设置生成树的优先级,0的优先级最高[通过这种方式设置的主根/副根,一般不稳定]
3.通过修改接口的speed来控制端口的状态[阻塞、监听]
speed [10/100/auto]
4.通过修改接口的参数来控制端口的状态[根端口、阻塞、监听]
Switch(config-if)#spanning-tree ?
bpduguard Don"t accept BPDUs on thisinterface //启用BPDU保护功能
guard Change aninterface"s spanning tree guard mode //启用根保护功能,防止其他交换机抢占根桥
link-type Specify a link type for spanningtree protocol use //设置端口的连接类型:全双工模式端口被认为是有点对点链接;半双工端口被认为是有一个共享链接。
portfast Enable an interface to movedirectly to forwarding on link up
vlan VLANSwitch Spanning Tree //设置VLA下端口的优先级别,<0~240>,0的优先级别最低,240的优先级别最高,16位倍数
八.带宽的花费值说明
(1)10M的花费为100
(2)100M的花费为10
(3)1G的花费为4
(4)10G的花费为2
九.结论
1.根桥的选举:
(1)选择方法1:根据优先级(0~61440)来选择,优先级最小的为根;若优先级相同,则看交换机背板的基本MAC地址,MAC地址最小的为根,MAC最大的就必定有一个端口为阻塞端口;
注意:交换机的背板MAC地址的查看方法【sw1#show version】
(2)选取方法2:通过直接修改交换机设备的优先级,来决定生成树的根;默认情况下,所有交换机的优先级都是【32768】;由于默认情况下所有交换机上只有一个VLAN1,所以在查看生成树信息时,只能看到VLAN1优先级信息。命令:
sw1(config)#spanning-tree vlan 1 priority 0 //设置VLAN1的优先级为0,0为最高优先级;
(3)选取方法3:通过命令直接定义主根和副根;
定义主根的命令:spanning-tree vlan * root primary //配置为主根
定义副根的命令:spanning-tree vlan * root secondary //配置为福根
2.根桥的所有端口都为指定端口【Desg】;根桥所对应的端口原则上都是根端口【Root】;
3.默认状态下所有的交换机均开启生成树协议;
4.生成树的作用之一是防止环路的产生;
5.原则上每一个VLAN属于一个生成树,该生成树的根是根据优先级和交换机的背板MAC地址来决定。每一个VLAN具有一个独立的根。也可以多个VLAN使用一个根;
6.在设置生成树的优先级时,是以4096的倍数为基础进行设置【0,4096,8192.......】;
7.当优先级为0时,该交换机也不一定是根桥【如果在同一个VLAN的网络中有设置某一个交换机为“primary”,则此交换机为该VLAN的根】;
8.在一个VLAN中可以设置主根和副根,副根只有在主根出现问题时才启用;
9.在查看生成树配置时,如果为根交换机将提示“this is bridge is the root”,且"ROOTID"和“BRIDGE ID"的MAC地址是相同的;
10.在一个VLAN中只能有一个主根和一个副根;