在网络三层架构中,我们会使用冗余这一技术,也就是对三层架构中的这些东西进行备份。冗余包含了设备冗余、网关冗余、线路冗余、电源冗余。
在二层交换网络中进行线路冗余,如图,将每个交换机都相连,这样无论断了哪一根线都可以从另一边继续通信。这样就实现了线路备份。
线路冗余(备份) --- 造成二层桥接环路 (二层交换机的转发列表mac地址表 也就是CAM表 --- 由流量经过时记录源mac地址产生)
在二层交换网络,也就是汇聚层和接入层的交换机,进行线路冗余的时候,由于交换机不像路由器能通过动态路由协议或者人工配置静态协议来有效避免出环,只能根据CAM地址表进行转发,我们对交换机之间进行线路冗余的时候,就会导致出环。比如LSW1交换机处连接PC,PC发送一个广播包,交给LSW1进行泛洪,LSW1会将PC发来的广播信息泛洪给其它两个交换机。LSW3收到该广播消息后会将该包继续进行泛洪给LSW2,这时候LSW2将会收到LSW1和LSW3发来的广播包,会将LSW1发来的广播包泛洪给LSW3,将LSW3发来的广播包泛洪给LSW1,造成环路,出现广播风暴。
环路则会导致这些问题:
最终导致设备性能下降重启或瘫痪
生成树协议:将一个二层交换机网络看作一个树形结构,这个网络中所有的交换机都是树的节点,在这些节点中选择一个作为树的根,让这颗树从根开始到达顶部之间所有的节点到根都只有唯一的最佳路径,将其它路径的端口阻塞。当唯一的最佳路径断开时,自动打开部分阻塞端口达到备份的目的。
生成树在生成过程中,应该尽量的生成一棵星形结构,且最短路径树;
STP的发展指的是STP中使用的算法的发展
一、IEEE组织的802.1D算法:
整个交换网络为一棵树
选举出(1)根网桥、(2)根端口、(3)指定端口、(4)非指定端口(阻塞端口)来进行树结构的规划。
BPDU --- 桥协议数据单元 -- 交换机通过收发BPDU中的数据进行沟通。
配置BPDU --- 只有根网桥可以发送,在交换网络初始状态时,所有的交换机都定义本地为根网桥,都可以发送BPDU,当交换网络中的所有交换机都收到别人的BPDU 时,基于BPDU中BID的比对,选举出真正的根网桥,此时,只有真正的根网桥发送BPDU,其它的交换机都为非根网桥,不再发送BPDU,而是仅接收和转发根网桥的BPDU;周期2s发送,hold time保存时间为20s。
配置BPDU这个协议数据单元存在的主要目的就是确定二层交换网络中的根网桥保证树结构。
TCN—拓扑变更消息(也是BPDU): 本地交换机链路故障后,STP重新收敛,为了快速刷新全网所有交换机的MAC表,将向本地所有STP接口发送TCN(标记位中的TCN位置1),邻居交换机收到TCN后,先标记为ACK位为回复,用于可靠传输消息;之后将TCN逐级转发到根网桥处,由根网桥回复TC消息来逐级回复到所有交换机;使所有交换机临时将MAC表的老化时间修改为15s(默认的,转发延时)
发送TCN的原因是为了使所有交换机临时将MAC表的老化时间从300s修改为15s,为什么要这样做呢?比如上图场景,虚线的网线阻塞为备份线路,当右边交换机的根端口断开后,这时候STP重新收敛,30s收敛完后,阻塞端口开放,备份线路启动,当主机B发送一个数据包到主机A,从备份线路到达左边交换机G0/0/2接口时,MAC地址表会记录主机B的MAC地址和端口号G0/0/2,但是左边交换机中MAC地址表还未到300s刷新时间,之前记录的主机B的MAC地址和对应的端口G0/0/1还未删除,当主机A给主机B回包时,交换机就不知道应该给G0/0/1还是G00/0/2接口进行单播,所以需要将之前的记录删除,就会发送TCN来更改老化时间为30s使得之前的MAC地址表记录删除。
(1)根网桥 --- 一棵树中只有一台root根网桥
通过比较BPDU中的BID来进行选择
BID = 网桥优先级 + MAC地址
网桥优先级范围是 0-65535,交换机网桥优先级默认为32768
MAC地址 交换机只有拥有svi接口才具有MAC地址
选择根网桥方式 : 优先级小则优,若优先级相同则MAC地址小为优。
(2)根端口 --- 每台非根网桥上只有一个根端口,接收来自根网桥的BPDU,转发用户的流量
离根网桥最近的端口为根端口
1.比较从根网桥发出后,通过该接口进入时最小的cost值
2.入向cost值相同,比较该接口上级设备的BID,小优
3.上级BID相同,比较上级设备的接口的PID,先优先级小,若一致,则编号小优
4.对端PID相同,比较本地接口PID,小优;
中间设备为hub或者透明交换机(不带console口),不受STP控制,下面交换机通过STP只能看到上面交换机,相当于对端PID相同
PID = 端口ID = 接口优先级(0-240,步长16,默认128)+ 接口编号
(3)指定端口 --- 二层交换网络中的每一条物理链路都有且仅有一个指定端口,转出来自根网桥的BPDU,同时可以转发用户流量。
默认根网桥上所有接口都是指定端口,根端口的对端一定为指定端口
1.比较从根网桥发出时,通过该接口进入这段链路时的cost值最小(出向)
2.若出向cost值相同,比较本地的BID,小优
3.本地BID相同,比较本地PID
4.本地PID相同,直接阻塞该端口
中间设备为hub或者透明交换机(不带console口),不受STP控制,相当本地PID相同
这第四种情况是最常见的,当我们的交换机下面连接了透明交换机,如果在透明交换机上用一根线连接了透明交换机的两个接口,那么交换机就会发现本地PID相同出现环路,但是透明交换机不受STP控制,无法堵塞透明交换机的一个端口,那么上面的交换机将会直接阻塞连接透明交换机的端口,使得该端口下的网络都会停止。就像我们生活中的如果一个交换机连接了一个教室的透明交换机,大家上课的电脑都连接在透明交换机上,如果一个同学将一个网线插在了透明交换机的两个接口上,则所有人都上不了网了。还有一种情况是没有回插,一根网线连接了电脑,但是这根网线无意间被损坏,导致里面的八根铜丝相遇,四根从左往右,另外四根从右往左,就会造成环路。也会导致PID相同上不了网。
(4)非指定端口(阻塞端口) --- 以上角色选举完,其它接口都为非指定端口,逻辑上阻塞,实际上可以接收消息,但是不转发
cost值:不同带宽 存在不同cost
802.1d标准: 802.1T标准
10M = 100 1000M= 20000
100M=19 100M=200000
1000M=4
10000M=2
>100000M=1
判断下图中的根网桥,根端口,指定端口,非指定端口
生成协议中,至少应该将根网桥干涉到汇聚层处;
以下图为例
如果接入层交换机成为了根网桥,那么经过STP之后,就会变成下图的效果
如果接入层的两个交换机下的电脑想要访问对方,则需要走很远的路
谁成为了根网桥,谁就是网络的中心,所有的流量都为到此进行聚合,汇聚层三层交换机就是用来做流量聚合的,搭建为一个星型结构,现在用接入层交换机去做根网桥,选路变远,性能没有三层交换机好。所以生成树角色选举需要干涉。
生成树端口除了有角色外,还有状态
接口状态:
down --- 没有BPDU收发,开始BPDU收发进入侦听状态
侦听 --- 强制15s时间,所有交换机进行BPDU收发选举根网桥、根、指定端口进入学习状态、非指定端口进入阻塞状态
学习 --- 强制15s时间,学习记录所有经过的流量中的源mac地址生成mac地址表,根、指定端口进入转发状态。
转发 --- 根、指定端口,可以转发用户报文
阻塞 --- 非指定端口逻辑阻塞
注:只有当接口进入到转发状态后,才能为用户转发数据报文,之前的30s不转发任何数据
收敛时间:
初次收敛 --- 30s = 15s侦听 + 15s学习
结构变化收敛 (STP课程52分钟处)
存在直连检测:本地仅存在一个阻塞端口,若其他端口断开,该阻塞端口马上进入15s侦听选举,结果若为启用,那么将再进入15s学习 --- 总共30s
没有直连检测:本地不存在直连检测,若其它端口断开,将会发送次优BPDU(以本地为根)给其它邻居交换机,其它邻居交换机无视该数据,邻居交换机开始进行20shold time及时,到时阻塞进入15s侦听,15s学习 一共50s
802.1D缺点:
收敛速度慢
链路资源率低
cisco公司也想用这个802.1D这个算法,它提出802.1D这个算法的缺点,链路利用率太低,所以自己设计了一个PVST算法来解决这一缺点。但它只能cisco私有。
实验:
在这个二层交换网络中,现在只存在vlan1,所以也就只有一棵树
通过这个图线路接口的灯可以看出sw1为根网桥
也可以进入sw1交换机查看生成树
可以看出在vlan1这棵树中,sw1就是根网桥优先级为32769,mac地址为0030.A300.078C
两个接口都为指定接口
阻塞接口在sw0交换机上
这时候我们再创建一个vlan2
sw1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
sw1(config)#vlan 2
sw1(config-vlan)#end
sw1#
%SYS-5-CONFIG_I: Configured from console by console
sw1#show spanning-tree
可以看到我们在sw1上创建了vlan2之后,仍然只有vlan1一棵生成树,是因为还未配置trunk干道,交换机的接口都不属于vlan2,所以只有vlan1一棵生成树
将接口改为trunk干道
sw1(config)#interface range fastEthernet 0/1 -2
sw1(config-if-range)#switchport mode trunk
为了让vlan2覆盖整个二层交换网络,每个交换机都需要配置vlan2和trunk干道,一条线只需要配一次trunk干道
将sw0也创建vlan2并配置trunk干道
sw0#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
sw0(config)#interface fastEthernet 0/1
sw0(config-if)#switchport mode trunk
sw0(config-if)#vlan 2
sw2只需要创建vlan2就可以了,它的两个接口已经成为了trunk干道
Switch#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)#hostname sw2
sw2(config)#vlan 2
这时候,vlan2已经覆盖了二层交换网络
我们再次查看生成树发现sw1是vlan1和vlan2的根网桥,那么堵塞接口仍然未变不转发用户数据,还是造成了链路资源的浪费。
我们在vlan2的生成树里修改sw2的网桥优先级变小,让sw2成为vlan2的根网桥
sw2(config)#spanning-tree vlan 2 priority ?
<0-61440> bridge priority in increments of 4096
sw2(config)#spanning-tree vlan 2 priority 111
% Bridge Priority must be in increments of 4096.
% Allowed values are:
0 4096 8192 12288 16384 20480 24576 28672
32768 36864 40960 45056 49152 53248 57344 61440
sw2(config)#spanning-tree vlan 2 priority 28672
sw2(config)#
查看sw2的生成树可以看出此时sw2成为vlan2生成树的根网桥,两个端口都是指定端口
查看sw0可以看出在vlan1的生成树中,fa0/1为阻塞端口,在vlan2生成树中,fa0/2为阻塞端口
通过查看图中交换机接口都变为绿灯可以看出两条链路都在使用,一条是vlan1在使用,一条是vlan2在使用,所以解决了链路资源浪费的缺点。
三、PVST + 在PVST的基础,兼容802.1q的trunk封装;且设计了部分的加速;
端口加速(接入层连接用户的接口) 上行链路加速-针对直连检测 骨干加速—针对次优BPDU
端口加速,跳过三十秒
上行链路加速仅在接入层设备上配置,因为配置后,该交换机将自动加大本地的网桥优先级;
在直连检测条件下阻塞接口将跳过30s,直接进入转发状态--上行链路加速
骨干加速所有交换机均可配置,针对接收到次优BPDU的阻塞端口可以跳过20s的hold time;
缺点:1、收敛慢(加速不彻底) 2、树多(仅cisco存在单独的芯片,友商无法负荷)
PVST+ 优点:分流 --- 提高利用率 部分加速
缺点:树多,加速不彻底
对于cisco有独立的芯片,所以也不害怕树多
但是对于其它厂家就不太友好
四、快速生成树
cisco的RSTP --- 基于vlan的快速生成树 - 一个vlan一棵树 pvst+的升级
公有RSTP(802.1w) --- 整个交换网络一棵树 802.1d的升级
快速的原理:
当tcn消息出现时,不需要等待根网桥的BPDU,就可以刷新本地的cam表;
切记:接口默认为半双工时,即便允许RSTP,依然基于慢速的802.1D算法来收敛;
PVST+ --> RSTP 一个vlan一棵树
802.1D --> RSTP(802.1W) 一个交换网络一棵树
五、MSTP/MST/802.1S 华为设备默认使用该协议 最主流的目前
继承了快速生成树的基础; 将多个vlan放置于一个组内,基于每个组一棵生成树;
不同组间的BPDU中优先级= 4096倍数+组号
cisco查看生成树show spanning-tree
华为查看生成树 display stp brief
82.1D组织