生成树协议(STP)

生成树协议(STP)算法

n 交换网络环路的产生网络

在实际网络环境中,状况要复杂得多,当广播帧通过交换机时,交换机就以指数的形式生成广播帧(交换机从除收到该广播帧以外的全部端口转发广播帧)。这种广播帧会愈来愈多,最终造成广播风暴,致使网络瘫痪。负载均衡

这种广播风暴只有在物理环路消失时才可能中止。ide

可是环状的物理线路可以为网络提供备份线路,加强网络的可靠性,这在网络设计中是必要的,所以,这就须要一种解决方法,一方面可以保证网络的可靠性,另外一方面还要防止广播风暴的产生。学习

STP协议就是用来解决这个问题的。STP协议并非断掉物理环路,而是在逻辑上断开环路,防止广播风暴的产生。优化

n STP简介spa

STP(Spanning Tree Protocol,生成树协议)就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,经过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上的树形结构。设计

n 生成树算法blog

生成树协议运行生成树算法(Spanning Tree Algorithm,STA)。生成树算法很复杂,可是其过程能够概括为如下三个步骤:教程

(1) 选择根网桥(Root Bridge)

(2) 选择根端口(Root Ports)

(3) 选择指定端口(Designated Ports)

名词解释:网桥时交换机的前身,因为STP是在网桥基础上开发的,所以如今交换机的网络中仍然沿用网桥这一术语。在Cisco教程里习惯称为“网桥”,在这指的就是“交换机”。

1)选择根网桥(在一个环形网络中,能够出现多个根网桥(有多个VLAN的时候,或者作负载均衡的时候),默认只有一个)

选择根网桥的依据是网桥ID,网桥ID是一个八字节的字段,前两个字节的十进制数称为网桥优先级,后两个字节是网桥的MAC地址。

网桥优先级是用于衡量网桥在生成树算法中优先级的十进制数,取值范围为0-65535,默认值是32768.

网桥ID中的MAC地址是交换机自身的MAC地址,可使用命令show version在交换机版本信息中查看交换机自身的MAC地址。

按照生术数算法的定义,当比较某个STP参数的两个取值时,值小的优先级高。所以,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID的值最小,优先级小的被选择为根网桥,在优先级相同的状况下,MAC地址小的为根网桥。

2)选择根端口(在每一个非根网桥上选择一个)

选出了根网桥以后,网络中的每台交换机必须和根网桥创建某种关联,所以STP将开始选择根端口的过程。根端口存在于非根网桥上,须要在每一个非网桥上选择一个根端口。

选择根端口的依据按照顺序依次以下:

(1) 到根网桥最低的根路径成本

(2) 直连的网桥ID最小

(3) 端口ID最小(直连对端的网桥端口ID最小的端口所对应的端口)

根路径成本是两个网桥间的路径上全部线路的成本之和,也就是某个网桥到达根网桥的中间全部线路的路径成本之和。

路径成本用来表明一条线路带宽的大小,一条线路的带宽越大,它传输数据的成本也就越低。

端口ID是一个二字节的STP参数,由一个字节(8位)的端口优先级和一个字节(8位)的端口编号组成。

端口优先级是一个可配置的STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0-255,默认值是128。

端口编号是Catalyst用于列举各个端口的数字标示符。在基于IOS的交换机上,能够支持256个端口。端口编号不是端口号,可是端口号低的端口,端口编号值也较小。

在STP选择根端口的时候,首先比较交换机端口的根路径成本,根路径成本低的为根端口。当根路径成本相同的时候,比较链接的交换机的网桥ID值,选择网桥ID值小的做为根端口;当网桥ID相同的时候,比较端口ID值,选择较小的做为根端口。

注意:在比较端口ID值时,比较的是接收到的对端的端口ID值。

3)选择指定端口(在每条链路上选择一个)

选择完根网桥和每台交换机的根端口后,一个树形结构已初步造成,可是,全部的线路仍链接在一块儿,并可能都处于活动状态,最后致使造成环路。

为了消除环路造成的可能,STP进行最后的计算,在每个网段上选择一个指定端口。选择指定端口的依据与根端口相同,按顺序有如下三个:

(1)根路径成本较低

(2)所在的交换机的网桥ID的值较小

(3)端口ID的值较小

在STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低时,也就是将到达根网桥最近的端口做为指定端口;当根路径成本相同的时候,比较这个端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机上的端口做为指定端口;当网桥ID相同的时候,也就是说,有几个位于同一交换机上端口时,比较端口ID值,选择较小的做为指定端口。

注意:和选择根端口不一样,在比较端口ID值时,比较的是自身的端口ID值。

n 桥协议数据单元(BPDU)

交换机之间经过BPDU(桥协议数据单元,Bridge Protocol Data Unit)来交换网桥ID、根路径成本等信息。交换机从端口发送出一个BPDU帧,使用该端口自己的MAC地址做为源地址。交换机自己并不知道它周围是否还有其余的交换机存在。所以,BPDU帧利用了一个STP组播地址(01-80-c2-00-00-00)做为它的一个目的地址,使之能到达相邻的,并处于STP侦听状态的交换机。

每隔两秒,便向全部的交换机端口发送一次BPDU报文,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。

1. BPDU的两种类型

? 配置BPDU,用于生成树计算。

? 拓扑变动通告(Topology Change Notification,TCN)BPDU,用于通告网络拓扑的变化。

2. BPDU报文字段

BPDU中包含根网桥ID、根路径成本、发送网桥、端口ID和计时器等,下面是对BPDU几个关键字段做用的解释。

? 根网桥ID:由一个二字节优先级和一个六字节网桥MAC地址组成。这个信息组合代表已经被选定为根网桥的设备标识。

? 根路径成本:说明这个BPDU从根网桥传输了多远,成本是多少。这个字段的值决定哪些端口将进行转发,哪些端口将被阻断。

? 发送网桥ID:这是发送BPDU的网桥信息,由网桥的优先级和网桥MAC地址组成。

? 端口ID:由一个字节的端口优先级和一个字节的端口编号组成。

? 计时器:计时器用于说明生成树用多长时间能完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。

3. STP利用BPDU选择根网桥的过程

根网桥的选择是一个持续、反复进行的过程,它没两秒触发一次,检查BPDU的根网桥ID是否发生了变化、网桥是否有网桥ID值更低的交换机加入进来。

n STP的收敛

1. 生成树端口的状态

生成树协议在交换机中自动运行,在交换机开机的时候能够看到,交换机的指示灯显示为***,而且大约有30S的时间不能转发数据,这时交换机是在作STP计算。直到交换机的STP计算完毕,有些端口能够转发数据,有些端口被阻塞,也就是网络收敛后,交换机才开始转发数据。而且,当网络的拓扑发生变化的时候,交换机还要从新运行STP计算,造成新的逻辑的拓扑结构。

在STP运算过程当中,交换机的每个端口都必须依次经历好几种状态:

状态 用途

转发(Forwarding) 发送/接受用户数据

学习(Learning) 构建网桥表

侦听(Listening) 构建“活动”拓扑

阻塞(Blocking) 只接受BPDU

禁用(Disabled) 强制关闭

2. 生成树计时器

STP在交换机相互发送BPDU报文时,尽力造成一个无环路的拓扑。BPDU从一台交换机传到另外一台交换机时,总要花费必定的时间。另外,当拓扑改变(如线路或根网桥故障)的消息从网络的一侧传送到另外一侧时,也要经历必定的传播延迟。因为存在这些延迟,因此须要为交换机设置足够的时间来完成BPDU的转发和生成树的运算,因袭,在交换机内部设置了一些计时器来控制每一个阶段的时间长度。

STP利用三种计时方法来肯定一个网络正确的收敛。现将STP计时器及它们的默认值描述以下:

? Hello时间:网桥发送配置BPDU报文之间的时间间隔。IEEE802.1q标准规定的默认访问时间为两秒。

? 转发延迟:一个交换机端口在Listening(侦听)和Learning(学习)状态所花费的时间间隔,它的默认值各为15S。

? 最大老化时间:交换机在丢失BPDU报文以前存储它的最大时间。

侦听和学习都是生成树所实施的过渡状态,用来强迫端口等待来自其余交换机上的全部BPDU。典型的端口过渡以下:

1) 从阻塞到侦听(20s)

2) 从侦听到学习(15s)

3) 从学习到侦听(15s)

当启用STP时,VLAN上面的每台交换机在加电之后都通过从给阻塞到侦听、学习的过渡状态。

STP计时器能够用命令予以配置和调整。不过,如不是通过认真考虑和规划,建议不要轻易改变计时器的默认值。

n STP与VLAN的关系

VLAN与生成树之间的关系主要有如下几种:

? IEEE的CST(Common Spanning Tree,通用生成树)

? Cisco的PVST(Per VLAN Spanning Tree,每VLAN生成树)

? Cisco的PVST+(Per VLAN Spanning Tree Plus,加强的每VLAN生成树)

? IEEE的MST(Multiple Spanning Tree,多生成树)

其中,CST不考虑VLAN,以交换机为单位运行STP(整个交换网络生成一个STP实例),交换机中划分VLAN不会产生广播环路。可是因为CST不考虑VLAN,因此通过STP计算后会阻塞其中的一个端口。

PVST是Cisco私有的协议,PVST为每一个虚拟局域网运行单独的生成树实例(每一个VLAN生成一个STP实例)。

PVST为每一个VLAN运行独立的一个生成树实例,能优化根网桥的位置,能为全部的VLAN提供最优路径(由于VLAN的拓扑结构各不相同)。

可是,PVST也不是完美的,主要缺点以下:

? 为了维护针对每一个VLAN而生成的生成树,交换机的利用率(如CPU负载)会更高。

? 为了支持各个VLAN的BPDU,须要占用更多的Trunk线路带宽。

? PVST与IEEE的CST不兼容,使得运行PVST的Cisco交换机不能与其余厂家的交换机进行互操。

为了解决和其余厂商的交换机进行互操做的问题,Cisco开发了PVST+。PVST+容许CST的信息传给PVST,以便与其余厂商在VLAN上运行生成树的实现方法进行互操做。

PVST+为每个VLAN生成一个生成树实例,而每一个实例都要占用交换机的CPU和内存资源。随着VLAN的增长,实例也会增长,这致使维护生成树实例将占用较多的交换机资源。

n PVST+的配置命令

1. 配置PVST+的意义

由于在交换网络中,若是一个根网桥不稳定,那么这个网络就须要常常惊醒STP运算,常常变化逻辑拓扑。所以,能够说,若是网络中有一个不稳定的根网桥,就会有一个不稳定的网络。

而在交换机选择根网桥的时候,若是不修改网桥ID中的优先级,那么选择的依据就是交换机的MAC地址,而MAC地址是随机的,极可能就会碰到这种状况:网络中最边缘的交换机被选择成了根网桥。所以,虽然生成树在交换机中自动运行,可是,合理的配置可以对网络进行优化。

除了配置网络中比较稳定的交换机为根网桥外,PVST+的配置主要还有如下几个方面:

1) 利用PVST+实现网络的负载均衡

配置两台或多台核心交换机分别为不一样VLAN的根网桥,使不一样的VLAN中各接入交换机上选择的根端口不一样,所以,不一样的VLAN的数据传输使用的线路也不一样,以达到两条或多条线路之间负载均衡的目的。

2) 配置速端口(PostFast)

使链接终端的端口快速进入到转发状态。主机链接到交换机的端口,若是主机关闭后再开机,交换机的端口状态会先变为down再变为up。这时,此端口直到STP进入转发状态后才可用,若是使用默认的STP计时器,端口从down到STP的转发状态须要至少30秒。这就致使主机必须等待端口进入转发状态后,才能接收或转发数据。

当单台主机链接到交换机的一个端口时,不可能造成环路,因此Cisco交换机提供了速端口功能。在端口启用速端口功能后,当端口从down到up状态时,该端口不通过侦听和学习状态,直接进入转发状态,节省30秒的转发延迟。然而,该端口仍然运行生成树协议,若是检测到了环路,也可以从转发状态转换到阻塞状态。速端口只能配置在链接终端的接口上,不然就有可能致使短期的生成树的环路。

2. PVST+配置命令

(1) 启用生成树命令

交换机在默认状况下启用生成树。经过在此命令前加no,能够关掉某个VLAN的生成树,可是,通常状况下,即便网络中不存在物理环路,也不建议关闭生成树。启用生成树的命令以下:

Switch(config)# spanning-tree vlan vlan-list

(2) 指定根网桥

因为MAC地址不可更改,因此要指定VLAN的优先级。可使用下面命令更改优先级。

Switch(config)# spanning-tree vlan vlan-list priority Bridge-priority

其中,Bridge-priority默认为32768,范围是0-65535,能够经过此命令同时更改多个VLAN的网桥优先级,例如VLAN5和VLAN10-20的网桥优先级配置为4096,以下所示:

Switch(config)# spanning-tree vlan 5,10-20 priority 4096

除了更改网桥的优先级外,还可使用命令指定交换机为根网桥,若是配置为primary,则交换机的优先级变为24576,配置secondary,优先级变为28672。配置根网桥的命令以下:

Switch(config)#spanning-tree vlan vlan-list root {primary | secondary}

注意:配置VLAN负载均衡的两种方法的目的都是改变STP的优先级,且配置的STP优先级必须是4096的倍数

(3) 修改端口成本

在端口模式下配置以下命令,来更改该端口的端口成本。以下所示:

Switch(config-if)#spanning-tree vlan vlan-list cost cost

(4) 修改端口优先级

在端口模式下配置以下命令,更改该端口的端口优先级,以下所示:

Switch(config-if)#spanning-tree vlan vlan-list port-priority priority

例如,使用下面命令更改F0/1端口的成本和优先级,以下所示:

Switch(config)# spanning-tree vlan 1 cost 10

Switch(config)# spanning-tree vlan 1 port-priority 96

(5) 配置速端口

Switch(config)#spanning-tree portfast

3. PVST+配置的查看

(1) 查看生成树的配置

Switch# show spanning-tree

(2) 查看某个VLAN的生成树详细信息

Switch# show spanning-tree vlan vlan-id detail

配置VLAN负载均衡

clip_p_w_picpath002

具体步骤:

1. 在SW0上配置以下:

clip_p_w_picpath003

或者更改优先级:

clip_p_w_picpath004

2. 在SW1上配置以下:

clip_p_w_picpath005

或者更改优先级:

clip_p_w_picpath006

相关文章
相关标签/搜索