生成树协议(STP)
一、STP概述
1、交换机网络环路的产生
如上图所示,PC1和PC2通过交换机相连,网络初始状态时,PC1与PC2的通信过程如下。
1)、在网络通信的最初,PC1的ARP条目中没有PC2的MAC地址,根据ARP原理,PC1首先会发送一个ARP广播请求(请求PC2的MAC地址)交给交换机SW1。
2)、挡SW1收到ARP的广播请求时,根据交换机的转发原理,SW1交换机将广播帧从除接收端口之外的所有端口转发出去(即该广播会从F0/1和F0/2分别转发给SW2和SW3)。
3)、SW2收到广播帧后,同样根据交换机的转发原理,将广播帧从F0/2和连接PC2的端口转发,同样,SW3收到广播帧后,将其从F0/2端口转发。
4)、SW2从F0/2端口收到从SW3发送的广播帧后,将其从F0/2和连接PC2的端口转发,同样,SW3收到从SW2发送的广播帧后,将其从F0/1端口转发。
5)、SW1分别从SW2、SW3收到广播帧,然后将从SW2收到的广播帧转发给SW3,而将从SW3收到的广播帧转发给SW2。
SW1、SW2和SW3会将广播帧相互转发,这是网络就形成了一个环路,而交换机之间并不知道,这将导致广播帧在这个环路中永远循环下去,如下图所示:
在实际网路环境中,情况要复杂得多,挡广播帧经过交换机时,交换机就以指数的形式生成广播帧(交换机除收到该广播帧之外的所有端口转发广播帧)。这种广播帧会越来越多。最终形成广播风暴,导致网络瘫痪。
但是环状的物理线路能够为公司提供备份喜爱南路,增强网络的可靠性,因此有一种解决方法,一方面能够保证网络的可靠性,另一方面还可以防止广播风暴的产生。
STP(生成树协议):并不是断掉物理环路,而是在逻辑上断开环路,防止广播风暴产生。
1.2、STP简介
STP(生成树协议):就是把一个环形的结构改变成一个树形的结构。STP协议就是用来讲物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上的树形结构。
逻辑上断开环路,防止广播风暴的产生。
当线路故障,阻塞接口被激活,恢复通信,起备份线路的作用。
三台交换机正常使用STP逻辑上断开一个端口之后的通信过程,如下图
当SW1与SW2的链路发生故障时,会将逻辑堵塞的端口自动开启,如下如:
二、STP的工作原理
1、生成树算法
生成树算法可以归纳为以下三个步骤:
1)、选择根网桥(boot bridge)
2)、选择根端口(root ports)
3)、选择指定端口(designated ports)
1)、选择根网桥的算法
选择根网桥的依据是网桥ID,网桥ID是一个8字节的字段,其组成结构图如下图所示,
前2字节的十进制数成为网桥优先级,后6字节是网桥的MAC地址。
网桥优先级是用于衡量网桥在生成树算法中优先级的十进制数,取值范围为0~65535,,默认值是32768。
网桥ID中的MAC地址是交换机自身的MAC地址,使用show ver可查看。
交换机显示MAC的地址如下:
按照生成树算法的定义:交换机网桥ID值最小,优先级小的被选择为根网桥;优先级相同情况下,MAC地址小的为根网桥。
2)、选择根端口
根端口存在于非网桥上,需要在每个非根网桥上选择一个根端口。
选择根端口时,顺序如下:
a、到根网桥最低的根路径成本
b、直连的网桥ID最小
c、 端口ID最小
带宽与路径成本的关系
链路带宽(Mbps) | 路径成本 |
10 | 100 |
16 | 62 |
45 | 39 |
100 | 19 |
155 | 14 |
622 | 6 |
1000 | 4 |
10000 | 2 |
端口ID是一个2字节的STP参数,由1字节端口优先级和1字节端口编号组成。
端口优先级是一个可配置的STP参数,在基于IOS的交换机上,端口优先级的十进制值范围是0~255,默认值是128.
端口编号Catalyst用于列举各个端口的数字标识符。在基于IOS的交换机上,可以支持256个端口。端口编号不是端口号,但是端口号低的端口,端口编号也小。
在STP选择根端口的时候,首先比较交换机端口的根路径成本,根路径成本低的为根端口。挡根路径成本相同的时候,比较连接的交换机的网桥ID值,选择网桥ID值小的最为根端口;当网桥ID相同的时候,比较端口ID值,选择较小的最为根端口。(注:在比较端口ID值时,比较的是接收到的对端的端口ID值)
3)、选择指定端口
为了消除环路形成的可能,STP进行最后的计算,在每一个网段上选择一个指定端口。
选择指定端口顺序如下:
a、 根路径成本较低;
b、所在的交换机的网桥ID值较小;
c、 端口ID值较小
在STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口。另外,根网桥上的接口都是指定端口,因为根网桥上端口的根路径成为为0。(注意:和选择根端口不同,在比较端口ID值时,比较的是自身的端口ID值)。
生成树算法验证:
查看SW1生成树状态
查看SW2生成树状态
查看SW3生成树状态
2、桥协议数据单元(BPDU)
交换机之间通过BPDU(桥协议数据单元)来交换网桥ID、根路径成本等信息。BPDU帧利用了一个STP组播地址(01-80-c2-00-00-00)作为它的一个目的地址,使之能到达相邻的、并处于STP侦听状态的交换机。
BPDU报文每隔2S向所有的交换机端口发送一次报文,以便交换机能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。
2.1、BPDU的两种类型
配置BPDU,用于生成树计算。
拓扑变更通告(topology change notification,TCN),BPDU用于通告网络拓扑的变化
2.2、BPDU报文字段
BPDU中包含根网桥ID、根路径成本、发送网桥ID、端口ID和计时器等,对BPDU几个关键字段作用的解释如下。
根网桥ID:有一个2字节优先级和一个6字节网桥MAC地址组成。这个信息组合表明已经被选定为根网桥的设备标识
根路径成本:说明这个BPDU从根网桥传输了多远、成本是多少。这个字段的值决定哪些端口进行转发,哪些端口将被阻断。
发送网桥ID:这是发送该BPDU网桥信息,由网桥的优先级和网桥的MAC地址组成。
端口ID:由一字节的端口优先级和一字节的端口编号组成。
计时器:用于说明生成树用多长时间能完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。
2.3、STP利用BPDU选择根网桥的过程
当一台交换机第一次启动时,假设自己是根网桥,在BPDU报文中的根网桥字段填入自己的网桥ID,如下所示:
当接收到其他交换机发出的BPDU后,比较网桥ID,选择较小的添加到根网桥ID中
当全网所有的交换机接收到全部的BPDU并作比较后,就可以选择出唯一的一个根网桥。
3、STP的收敛
在STP运算过程中,交换机的每一个端口都必须经历好几种状态。
如下列出了交换机端口的五种STP状态
状 态 | 用 途 |
转发(Forwarding) | 发送/接收用户数据 |
学习(Learning) | 构建网桥表 |
侦听(Listening) | 构建“活动”拓扑 |
阻塞(Blocking) | 只接收BPDU |
禁用(Disabled) | 强制关闭 |
STP端口状态详细描述如下:
Disabled(禁用):由管理员关闭或网络故障使端口处于Disabled状态,他不属于正常的STP状态的一部分。
Blocking(阻塞):在端口初始化后,一个端口既不能接受或发送数据,也不能向它地址表添加MAC地址。相反,这样的一个端口仅允许接收BPDU报文,以便能侦听到其他邻接交换机的信息。此外,选出指定端口后,非指定端口也处于阻塞状态。
Listening(侦听):如果一个交换机认为一个端口可选为根端口或指定端口,他就会把该端口的Blocking状态变为Listening状态,在Listening状态,端口仍然不能接收或发送数据帧。不过,为了使该端口加入到生成树的拓扑过程,允许他接收或发送BPDU报文。由于该端口可以通过发送BPDU报文给其他交换机通告该端口的信息,这个端口最终可能被允许成为一个根端口或指定端口。如果该端口失去根端口或指定端口的地位,将返回Disabled状态。
Learning(学习):一个端口在Listening状态下经过一段时间后,将转为Learning状态。该端口仍可像从前一样发送和接收BPDU报文。不过,该交换机可以学习到新的MAC地址,并将改地址添加到交换机的地址表中。正因如此,才使得交换机可以沉默一定的时间才处理有关地址表的信息。
Forwarding(转发):在Learning状态下载经过一段时间的学习和转发,该端口转入到Forwarding状态。在Forwarding状态,该端口既可以发送和接收数据帧,也可以手机MAC地址表加入到他的地址表,还可以发送和接收BPDU报文。再生成树拓扑中,该端口以此才成为一个全功能的交换机端口。
STP利用三种计时方法来确保一个网络正常的收敛。
a、Hello时间:网桥发送配置BPDU报文之间的时间间隔。在根网桥交换机中配置的访问时间值将决定所有的非跟交换机的访问时间,这是因为这些交换机在收到发自根网桥的配置BPDU报文时,仅仅中继他们。不过,所有的交换机都有一个本地配置的访问时间,他用于确定重新发送TCN BPDU(拓扑变化提示)报文的时间。IEEE 902.1d标准规定的默认访问时间为2S。
b、转发延迟:一个交换机端口在Listening和Learning状态所花费的时间间隔,它的默认值各为15S。
c、最大老化时间:交换机在丢弃BPDU报文之前存储它的最大时间。在执行STP时,每一个交换端口都保存一份它所侦听到的“最好的”BPDU备份。如果源BPDU失去了与交换机端口的联系,交换机则在最大老化时间之后通知网络发生了拓扑结构方面的变化。最大老化时间默认值是20S。
侦听和学习都是生成树所实施的过渡状态,用来强迫端口等待来自其他交换机上所有BPDU。典型的端口过渡如下。
三、STP与VLAN的关系
生成树与vlan之间的关系主要有以下几种:
a、IEEE的CST(Common Spanning Tree,通用生成树)。
b、Cisco的PVST(Per vlan spanning Tree,每个vlan生成树)。
c、Cisco的PVST+(Per vlan spanning Tree Plus,增强的每个vlan生成树)。
d、IEEE的MST(Multiple spanning Tree,多生成树)。
CST:不考虑VLAN,以交换机为单位运行STP(整个交换网络生成一个STP实例),所以经过STP计算后,对阻塞一个端口,那么vlan3将无法通信。
如下图:
PVST:Cisco私有协议,为每个vlan运行单独的生成树实例(每个vlan生成一个生成树实例)。如下图:
PVST能优化根网桥的位置,为所有vlan提供最后路径(因为vlan的拓扑结构各不相同)。
PVST主要缺点如下:
为了维护每个vlan生成的生成树,交换机的利用率(如CPU负载)会更高。
为了支持各个vlan的BPDU,需要真用更多的trunk链路带宽。
PVST与IEEE的CST不兼容,不能与其他厂家的交换机进行互操作。
为了解决与其他厂家的交换机进行互操作,Cisco开发了PVST+。PVST+允许CST的信息传给PVST,以便于其他厂商在vlan上运行生成树的实现方法进行互操作。如下图:
PVST+为每一个vlan生成一个生成树实例。
四、PVST+的配置命令
启用生成树命令
Switch(config)#spanning-tree vlan vlan-list
指定根网桥
Switch(config)#spanning-tree vlan vlan-list priority Bridge-priority
Switch(config)#spanning-tree vlan vlan-list root { primary|secondary }
修改端口成本
Switch(config-if)#spanning-tree vlan vlan-list cost cost
修改端口优先级
Switch(config-if)#spanning-tree vlan vlan-list port-priority priority
将端口配置为速端口
Switch(config-if)#spanning-tree portfast
例如:
使用下面命令指定根网桥
Switch(config)#spanning-tree vlan 2 priority 4096
或使用下列命令指定根网桥
Switch(config)#spanning-tree vlan 2 root primary
使用下面命令修改F0/1端口的成本和优先级
Switch(config-if)#spanning-tree vlan 2 cost 10
Switch(config-if)#spanning-tree vlan 2 port-priority 96
使用下面命令查看生成树的配置
Switch#show spanning-tree
使用下面命令查看某个vlan的生成树详细信息
Switch#show spanning-tree vlan 2
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。