为何要使用生成树协议数据库
生成树协议是二层链路上的协议。网络
如上图所示,在二层网络中,交换机起到了很重要的做用,若是有一台交换机出现故障会影响网络的使用,为了不存在单点故障,在实际的二层链路中会采用链路冗余,也就是采用交换设备之间多条联络链接,即多台交换机之间都有链接,这样即便一台交换机故障了,也可使用其余交换机。这就是链路冗余。ide
这种作法虽然很好,可是会产生一个致命的问题,各个交换机设备之间都有链路链接,数据报到达目的主机的路线会增多,从而使数据报在交换机之间不断的被转发,造成一个环路。性能
多链路造成环路的致命问题学习
1. 造成广播风暴: 数据报在环路在不断的被广播转发造成广播风暴。spa
2. 多重复帧复制: 交换机在接受到不肯定单播帧时,将执行泛洪操做,这意味着,在环路中一个单播帧在传输中被复制为多个复本。3d
3. MAC地址表不稳定: 若是交换机在不一样的端口收到同一个帧,它的MAC数据库将会变得不稳定。blog
以上三种状况不管是哪种,都将会使二层网络链路发生崩溃。ci
解决问题分析 get
咱们知道之全部发生这种状况的缘由是二层链路造成了环路,为何造成环路呢?是由于数据帧为到达目的主机会在各个相连的交换机之间互相复制转发和传输造成环路。
若是咱们能给各个数据帧指定一条到达目的主机的最短路径,那么就不会造成环路了,由于数据帧是沿着咱们给定的路线传输。这样就解决了因数据帧胡乱传输而造成的环路问题,进而解决了以上的种种问题,并且还能是实现链路冗余的目的。那么这条指定的最短路径要怎么指定呢?能够在链路中加上一个协议,这个协议就是生成树协议。
生成树协议有哪些
IEEE协会经过了IEEE802.1d协议,即开天辟地的第一代生成树协议STP,这个协议和其余协议同样,都是随着网络的不断发展而不断更新换代的。到如今为止,该协议一共有三代;
第一代 STP/RSTP
第二代PVST/PVST+(思科特有)
第三代 MTSTP/MSTP
咱们只对STP、RSTP和MSTP进行讲解
救世主STP(802.1d)又叫 生成树协议
在这种环路肆虐的时候,如同救世主般的STP来到了咱们身边。呵呵
STP的主要功能是经过一系列的运算来解决因为备份链接所产生的环路问题。
注意:单纯标准的802.1d STP协议并不能实现真正的冗余和负载分担。
STP运行原理简介:
经过阻断冗余链路将一个有环路的桥接网络修剪成一个无环路的树形拓扑结构,即:可以确保数据帧在某一时刻从一个源出发,到达网络中任何一个目标的路径只有一条,而其余的路径都处于非激活状态(不能进行转发),若是在网络中发现某条正在使用的链路出现故障时,网络中开启了STP技术的交换机会将非激活状态的阻塞端口打开,恢复曾经断开的链路,确保网络的连通性。
如上图所示:从PC0到达PC1的数据帧会通过中间由三台交换机组成的环路,STP协议会选择一条最短的路径让数据帧从PC0到达PC1。假如,STP协议经过计算,认为走2路——3路到达PC1是最短路径,那么1路就会处于非激活状态,即1路上有关的端口会处于堵塞状态。若是交换机S1出现了故障致使2路和3路不能走了,那么STP就会激活1路,确保数据帧可以到达PC1.
STP原理----顺序四步走:
1.选择根桥(根交换机)RB
在网路中须要选择一台根交换机RB,选择RB就须要交换机们本身选择,须要交换机们通讯,这些信息被称为BPDU(桥协议数据单元),每2秒发送一次,BPDU中包含的信息较多,可是RB的选择只比较BID(桥ID),BID最小的就是根交换机。
BID=桥优先级+桥MAC地址。先比较桥优先级,而后再比较桥MAC地址的优先级,通常来讲,桥优先级都是同样的,都是32768,因此通常只比较桥MAC地址,MAC地址最小(也就是BID最小)的做为RB。
例如:SW1:Default优先级 32768 MAC 0c0011111111
SW2:Default优先级 32768 MAC 0c0022222222
很明显,在优先级相等的状况下,MAC地址SW2的小,因此SW2为根交换机。
2.选择根端口RP(要从离根桥最近的端口选)
对于每台非根桥,要选择一个端口用来链接到根桥,这就是根端口
注意:根端口只能在非根交换机上选取的。
当非根桥有多个端口能够链接到根桥时,应该选择性能比较好的端口做为根端口,选择的依据是: 首先比较开销Q,其次比较PID(端口ID)
好比:以下图所示;
根据根桥的选取,能够判断SwitchZ为根桥,也就是根交换机。那么SwitchX和SwitchY为非根桥,非根桥SwitchX须要选择一个端口(只能选择一个端口)用来链接SwitchZ(根桥),首先比较的是开销Q:
带宽 |
IEEE802.1d(STP) |
|
|
10Mb/s |
100 |
2000000 | |
100Mb/s |
19 | 200000 | |
1000Mb/s |
4 | 20000 |
经过Port0链接到根桥,Q=19.
经过Port1链接到根桥,Q=100+19=119.
很明显经过Port0链接到根桥的开销Q小,因此选择SwitchX和SwitchY的Port0为根端口。
可是假设Q相同的话,就须要比较PID了,PID=端口优先级+端口号,通常来讲端口优先级是默认的,因此,端口号越小的端口,将成为根端口。
注意: 先比较开销,再比较PID。
3.选择指定端口DP
在每个交换机之间的链路上选择一个端口,做为指定端口。
例如:以下图所示:
上图中共有3个网段,X-Y,Y-Z,X-Y,其中前两个网段的指定端口都是SwitchZ(根桥)上的端口,由于根桥没有根端口,有的只是指定端口,而X-Y(红线网段)的指定端口须要选择,依据以下:
X到达根桥的开销Q=19
Y到达根桥的开销Q=19
因为Q相同,须要比较BID(指定端口ID),SwitchX的BID小,因此位于SwitchX上的port1将成为该网段的指定端口。
4.RP、DP设置转发状态,其余端口设为阻塞状态
选出来的RP和DP将设为转发状态,既不是根端口也不是指定端口的其余端口将被Block!
经过上述四部走,就能够造成无环路的网络。
STP计时器
一共有3个:
1. Hello Time: 根桥发送BPDU之间的时间间隔,也是网络初始化的时候,每一个网桥发送各自的BPDU的时间间隔。
2.Forwarding Time : 指一个端口Listening和Learning的各自时间,默认为15s,为了保证BPDU在全网中的转发,因此作如此设定,这个值是能够配置的,因为Forwarding Time 的限制,通常建议网络的直径应小于7
3. Max Age : 存储BPDU最长的时间,超过这个时间端口接受不到BPDU,就会采起相应的措施。这个时间默认为20s.
注意: 这三个时间在拓扑稳定后都是由根桥发出的,由根桥在全网统一计时器,在根桥修改才有效。
STP端口状态概述
当协议信息BPDU经过一个交换网络时。可能发生传播延时,那么交换网络的拓扑结构就可能会发生改变。
每个使用STP的二层LAN端口存在如下5种状态:
1. 阻塞(Blocking):10s 端口不能参与帧的转发发
2. 侦听(Listening):15s 这是端口自阻塞状态后的第一个过渡状态。STP认为这种状态的二层LAN端口应当参与帧的转发
3. 学习(Learning):15s 处于准备参与帧转发状态
4.转发(Forwarding):端口能够正式转发帧了
5. 禁止(Disabled):端口不参与STP,不转发帧。
STP端口拓扑变化:
当启用STP后,设备开启电源后,每一个端口和网络都要经历阻塞、侦听、学习这类的过渡状态。如上图所示。
1.阻塞状态端口变化: 网络设备在交换BPDU以前,都是假设本身为根的,而且端口在初始化时,老是先置于阻塞状态。交换BPDU后就能够肯定哪一个设备做为根桥。
处于阻塞状态的端口执行如下任务:
丢弃从所在网段中接收的帧;
丢弃与其余转发端×××换的帧
不把终点位置添加到地址数据库中。
接收BPDU,而且把它们直接传到系统模块中。
不传输从系统模块中接收到的BPDU
2. 侦听状态端口变化: 当STP肯定这个二层LAN端口应当参与帧转发时,进就进入到了侦听状态
处于侦听状态的端口执行如下任务:
丢弃从所在网段中接收的帧;
丢弃与其余转发端×××换的帧
不把终点位置添加到地址数据库中。
接收BPDU,而且把它们直接传到系统模块中。
接收、处理和传输从系统模块中接收到的BPDU
3.学习状态:从侦听状态进入到学习状态:
处于学习状态将执行如下任务:
丢弃从所在网段中接收的帧;
丢弃与其余转发端×××换的帧
把终点位置添加到地址数据库中。
接收BPDU,而且把它们直接传到系统模块中。
接收、处理和传输从系统模块中接收到的BPDU
4.转发状态端口变化; 处于转发状态的端口能够正式转发帧了。
处于侦听状态的端口执行如下任务:
转发从所在网段中接收的帧;
转发与其余转发端×××换的帧
把终点位置添加到地址数据库中。
接收BPDU,而且把它们直接传到系统模块中。
处理和传输从系统模块中接收到的BPDU
5.禁用状态的端口变化:处于禁用状态的端口不参与帧转发或者STP。
注意: 这种把二层端口置于禁用状态的行为是不建议的,由于这至关于一宗浪费
处于侦听状态的端口执行如下任务:
丢弃从所在网段中接收的帧;
丢弃与其余转发端×××换的帧
不把终点位置添加到地址数据库中。
不接收BPDU,而且把它们直接传到系统模块中。
这就是整个网络中交换机拓扑端口的变化,直到最后网络稳定。
总结---STP运行过程梳理
假设S1为根交换机
当网络稳定后,这种稳定状态下,根交换机S1 向网络中以2s一次的频率发送BPDU报文,非根交换机S2经过根端口接受BPDU,而后经过指定端口向S3发送BPDU报文。经过这种方式,BPDU报文能够顺利的扩散到网络的每台交换机。
可是当网络拓扑发生变化时,交换机会向根交换机方向发送TCN BPDU报文,这儿的变化有如下几种状况:(当出现如下几种状况后,当事交换机就会发送TCN BPDU)
1. 处于转发状态或者监听状态的端口过渡到阻塞状态,这个状态一般是链路故障
2. 处于未启用状态的端口进入转发状态,这个状态一般是增长了新的链路
3. 交换机从指定端口收到TCNBPDU报文。
假设S3出现了以上状况中的一种,那么交换机就认为网络拓扑发生了变化,将执行步骤1,S3从根端口向根交换机的方向发送TCN BPDU报文(这儿的方向是向S2),S2经过指定端口接受TCN BPDU ,执行步骤2,而后发送给S3 一个TCA,同时执行步骤3,向根交换机的方向发送TCN BPDU报文,S1(根交换机)收到TCN BPDU报文后执行步骤4,向S2发送TC BPDU,S2接受到TC BPDU后再转发给S3。接受到TC BPDU报文后的交换机S2和S3将本身的MAC地址表老化时间(生存时间)设置为15s,开始学习新的转发路径,达到网络的稳定。
在端口的变化中,从阻塞到侦听状态,须要10s的时间,从侦听到学习须要15s,从学习到转发须要15s。
这个时间在如今高速发展的网络中是不能接受,由于太慢了,有没有一种能够收敛这些时间的生成树协议呢?
答案是有的,那就是RSTP---快速生成树协议。咱们的下一篇文章再来探讨,看看RSTP到底快在什么地方。