本章重点:
STP的工作原理
配置PVST+以实现交换网络的负载分担
本章难点:
STP的工作原理
4.1STP概述
4.1.1交换网络环路的产生
图4.1物理拓扑
如图4.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会将广播帧相互转发,这时网络就形成了一个环路。而交换
机之间并不知道,这将导致广播帧在这个环路中永远循环下去(如图4.2所示)
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9ef3853f48200483598d75fb3d407a527e6bdd8bfe0452e30a63e368b9b0e4fef7be67b9f2ecf3b1dbc7fec3121eb26ba824e47ef41db2970267decd5446112566bfe6746&a=48&b=44][/url]
4.2广播风暴的产生
在实际网络环境中情况要复杂的多,当广播帧经过交换机时,交换机就以指数的形式生成广播帧(交换机从除收到该广播帧之外的所有端口转发广播帧)。这种广播帧会越来越多,最终形成广播风暴,导致网络瘫痪。
这种广播风暴只有在物理环路消失时才可能停止。
但是环状的物理链路能够的网络提供备份线路,增强网络的可靠性。这在网络设计中是必要的,因此,这就需要一种解决方法,一方面保证网络的可靠性,另一方面还要防止广播风暴的产生。
STP协议就是用来解决这个问题。STP协议并不是断掉物理环路,而是在逻辑上断开环路,防止广播风暴的产生。
4.1.2STP简介
STP就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上树形结构。如图4.3所示,对于三台交换机构成环路的网络,在使用STP协议后,交换机SW2与SW3连接链路的一个端口被协议从逻辑上阻塞,这条线路也就不能再传输数据了,也就是从逻辑上打破了环路。当正常通信的链路发生故障时,被逻辑上阻塞的链路被重新激活,使数据能从这条链路正常传输
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f91ee5bf96891a6317d37e3e0b05655fb2bbf65a9c77093dd0e3743e9de80daf71a529d290f51e11743545ba2eb79b5edd627771ac6aec281a7954d2e4920639c4206e96bd&a=48&b=44][/url]
图4.3三台交换机STP功能示意1
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9beea08f35179fc2b66706be2db8320bb714c6c91d65327a22693b9e370775bfb298e1789ed260b4d620b5840c70b2d6cf6d0f4b8e66d8c308fa3e95388f352ef73c2b50e&a=48&b=44][/url]
图4.4三台交换机STP功能示意2
那么STP协议如何实现将环形结构的拓扑变成树形结构呢?STP协议如何知道哪些接口应该阻止,哪些接口应该用来传输数据呢?它依据的算法是什么样的?下面将详细讲解IEEE802.1d STP的工作原理。
4.2STP工作原理
4.2.1生成树算法及验证(STP选举过程)
1.生成树算法
生成树协议运行生成树算法(STA)。生成树算法很复杂,但是其过程可以归纳为以下三个步骤。
(1) 选择根网桥(ROOT BRIDGE)
(2) 选择根端口(ROOT PORTS)
(3) 选择指定端口(DESIGNATED PORTS)
*******************************************************************************
名词解释: 网桥的交换机的前身,由于STP是在网桥基础上开发的,因此现在交换机的网络中仍然沿用网桥这一术语。
******************************************************************************
下面以一个例子来讲解这几个步骤的选择过程,它采用如图4.5所示的网络拓扑。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f91fca042c9aa5474132432770c563f8f064224526a188cb89a31c613509d2972ea8d73879e54fd8d84de960381946752137acab86d2d232c8985438e848a258bd5e116a14&a=48&b=44][/url]
图4.5STP收敛过程示例拓扑图
要将图所示的网络结构变成一个无环的拓扑,首先,STP要选择根网桥,前面讲过,STP是将一个环形的拓扑变成一个树状的拓扑结构,因此选择根网桥实现上就是为网络选出一个树根,那么选择根网桥的依据是什么呢?
1) 选择根网桥
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f92753af17c63edf54504a00d3d5c5d27d3caa3a48af6f5ef79b08af9be397949107685299912351fa523bcd4bd9476ca8761f39c9e90878955eaee93a5eaa814f2ea158c3&a=48&b=44][/url]
选择根网桥的依据是网桥ID,网桥ID是一个八字节的字段,其组成结构如图4.6所示,前面两个字节的十进制数称为网桥优先级,后六个字节是网桥的MAC地址。
网桥优先级是用于衡量网桥在生成树算法中优生级的十进制数,取值范围为0~65535,默认值是32768.
网桥ID中的MAC地址是交换机自身的MAC地址,可以使用命令 show version 在交换版本信息中查看交换机自身的MAC地址,显示如下:
Base Ethernet MAC address : 00:0D:28:00:B1:00
按照生成树算法的定义,当比较那个STP参数的两个取值时,值小的优先级高。因此,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID的值最小,优先级小的被选择为根网桥,在优先级相同的情况下,MAC地址小的为根网桥。
在如图4.5所示的拓扑中,SW2的优先级为4096,SW1与SW3的优先级为默认值32768,因此,SW2被选为根网桥,如图4.7所示。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f922afbd84b07f4ba5b38f760343df5b4438ccdbbfb9efcc932c7324b250db137ee5c715585a3b81569ef717c14ccffb565d94ed8d0c65560b49a599b56ea264e29cc3f129&a=48&b=44][/url]
图4.7收敛过程选择根网桥
如果SW2的优先级也是32768时,三台交换机的优先级相同。比较三台交换机的MAC地址,SW2的MAC地址最小,所以SW2被选为根网桥。
2) 选择根端口
选出了根网桥之后,网络中的每台交换机必须和根网桥建立关联,因此,STP将开始选择根端口的过程。根端口存在每个非根网桥上,需要在每个非根网桥上选择一个根端口。
选择根端口的依据按照顺序依次如下。
到根网桥最低的根路径成本。
直连的网桥ID最小
端口ID最小
根路径成本是两个网桥间的路径上所有链路的成本之和,也就是一个网桥到达根网桥的中间所有链路的路径成本之和,如图4.8所示
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f995e4af0cd67c1b6e3e3546b4bea2619b7cac2708dd8ab0a832b2a277b129c53d68b37dd74c291108b9284f328e2dd573994f81b01907e863bc66069b5ff002d5eeaf63d8&a=48&b=44][/url]
图4.8根路径成本与路径成本
路径成本用来代表一条链路带宽的大小,见表4-1,一条链路的带宽越大,它的传输数据的成本也就越低。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9cf3713787af90e6607001b43a4d5341dd8fbfc21928c5f26e82a405dc93a9937f45fb17e2eaf49fbe56875c72a58f3903e64a913e9b4243dd5dc663b8a226047368ed16f&a=48&b=44][/url]
4-1 带宽与路径成本的关系
端口ID是一个二字节的STP参数,由一个字节的端口优先级和一个字节的端口编号组成,如图4.9所示。
端口优先级是一个可配置的STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0~255,默认值是128。
端口编号是catalyst用于列举各个端口的数字标识符。在基于IOS的交换机上,可以支256个端口。端口编号不是端口号,但是端口号低的端口,端口编号值也较小。
在STP选择根端口的时候,首先比较交换机端口的根路径成本,根路径成本低的为根端口,当根路径成本相同的时候,比较连接的交换机的网桥ID值,选择网桥ID值小的作为根端口;当网桥ID相同的时候,比较端口ID值,选择较小的作为根端口。
*******************************************************************************
注意啦:在比较端口ID时,比较的是接收到的对端的端口ID值
****************************************************************************
在如图4.10所示的拓扑中,已经选出了根网桥,那么下一步就需要在SW1和SW3上各选择一个根端口,在本例中,所有的链路都是100MB/S的,那么下一步就需要在SW1和SW3上直接与SW2相连的接口的根路径成本是19,而SW1 与SW3之间连接的端口,其根路径成本应该是19+19=38;因此,在SW1与SW3上,直连SW2的端口被选为根端口,如图4.10
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9e8d00b8fa9331d90cdc1ec5758175c9a71a364a10e0cbab9417f3b58925db441447171e425c8f6b0df0c70bba5c54083eaea9b2b757e2b8fcbba838396ef2c7e44c4b2a1&a=48&b=44][/url]
图4.10 STP收敛过程选择根端口
3) 选择指定端口
选择完根网桥和每台交换机的根端口后, 一个树形结构已初步形成,但是,所有链路仍连接在一起,并可以都处于活动状态,最后导致形成环路。
为了消除环路形成的可能,STP进行最后的计算,在每一个网段上选择一个指定端口,选择指定端口的依据有三个。
根路径成本较低
所在的交换机的网桥ID值较小
端口ID较小
在STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口;当根路径成本相同的时候,比较这个端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机上的端口作为指定端口;当网桥ID相同的时候,也就是说,有几个位于同一交换机上的端口时,比较端口ID值,选择较小的作为指定端口。
另外,根网桥上的接口都是指定端口,因为根网桥上端口的根路径成本为0
如图4.11所示的拓朴中,首先,作为根网桥的SW2上的端口都是指定端口。那么在SW1 与SW3连接的网段上需要在两个端口之间选出一个指定端口来。
首先比较两个端口的根路径成本,这两个端口的根路径成本的值都是38 (19+19),那么只能比较网桥的ID 了,现在SW1与SW3的网桥优先级相同,SW3的MAC地址小于SW1的MAC地址,因此,SW3的网桥ID小,所以SW3上的端口选作指定端口(如图4.11所示)。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9bfa94e178df5b3a67c29c0411f7bc845d78195a229a34480741d1850141f0d6cbda3cc138f9d334cf21b1591428d34410d24479d2f25fd0bfad3561066ea9db89522a7c5&a=48&b=44][/url]
STP的计算过程结束,这时,只有在SW1上连接到SW3的端口既不是根端口,也不是指定端口,那么这个端口被阻塞(BLOCK)。被阻塞的端口不能传输数据。
由于SW1上连接SW3的接口被阻塞,所以图4.11所示的拓朴可以等价为图4.12 SW1和SW3之间的链路成为备份链路。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9d50940ae412d0af17bfed3d0babf9c06be6100ca33164d02094c623d4111b0cc6c735cf5de5589e9005dfd47b5780f779649356ce728cdf79d53e30d836a34fb5435aa4b&a=48&b=44][/url]
2.生成树算法验证
在了解了生成树协议的选举过程后,下在分别以两台和三台交换机为例,验证生成树选举算法。
两台交换机的生成树协议选举过程
通过两条速率不等的链路连接的两台交换机的STP选举过程。
按照图4.13所示连接网络(如果没有ethernet端口,可以将fastethernet端口速率改为10Mb/s),其中的交换机设备都有为默认配置,SW1的MAC为001f.caff.1000,SW2的MAC为0021.1ba5.6980.
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f917442e8b032aa59504fde6f14d77e68d9e441890d69fa7ff3569d33af20c995c8f92a4040d272b2631873e0c08e1eafa71615c123288f8b990c1aca4291fbbb23f3c1adb&a=48&b=44][/url]
图4.13两台交换机通过两台链路连接,且两条链路速率不等
按照STP的工作原理来选择根网桥、根端口和指定端口。
首先,根据网桥ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,在这种情况下选择,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,链路为10M的COST为100,而100M的 COST为19,所以SW2的F0/24端口为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。所以SW1的F0/23的F0/24成为指定端口,SW2的F0/23端口阻塞。
在交换机上可以使用命令 show spanning-tree查看生成树。
三台交换机的生成树协议选举过程
按照图4.15所示连接网络,链均为100M链路,其中的交换机设备都为默认配置,
SW1的MAC为001fcaff.1000,SW2的MAC为0021.1ba5.6980,SW3的MAC为0021.d780.7400.
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f99c259c013a777eb9a1b431191eef2f4b53270613bb171b994b437fb715283fd301dd2bb3a9f5399079aa1662615a24fcf80cd52d752735ae11fb73b9459cfb7b375ce54b&a=48&b=44][/url]
首先,根网桥ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,交换机SW2和SW3直接与SW1相连的接口根路径成本最低,所以SW2的F0/24端口为根端口,SW3的F0/23为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。在SW2和SW3相连的网络上包含两面三刀个端口,这两个端口的根路径成本都是38,因此根据网桥ID选择指定端口,所以SW2的F0/23成为指定端口,SW3的F0/24端口阻塞。
在交换机上可以使用命令 show spanning-tree查看生成树。
4.2.2 BPDU(bridge protocol data unit ,桥协议数据单元)
交换机之间根据网桥ID选择根网桥,根据根路径成本等选择根端口,那么交换机如何获知网络中其他交换机的网桥ID呢?,根路径成要又是怎样计算出来的?
生成树协议(STP)在交换机互相通信时进行操作,数据报文以桥协议数据单元(BPDU)的形式进行交换。
每隔2秒,BPDU报文便向所有的交换机端口发送一次,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。
BPDU的两种类型
正常情况下,交换机只会从它的Root Port上接收configuration BPDU包,但是绝不会主动发送configuration BPDU包给root bridge。
这里就需要提到第二种类型的BPDU包了,也就是Topology Change Notification(TCN) BPDU。
这样,当一台交换机检测到拓扑变化后,它就可以发送TCN给root bridge,注意TCN是通过root port向root bridge方向发出的.
当交换机从它的designate port接收到TCN类BPDU时,它必须为其做转发,从它自已的root port上发送出去TCN类型的BPDU包,这样一级一级地传到root bridge后,TCN的任务才算完成.
BPDU报文字段
ü 根网桥ID:根信息是由一个2字节优先级和一个6字节ID所组成。这个信息组合标明已经被选定为根网桥的设备标识。
ü 根路径成本:路径成本说明了这个BPDU从根网桥传输了多远,成本是多少。这个字段的值用来决定哪些端口将进行转发,哪些端口将被阻断。
ü 发送网络桥ID:这是发送该BPDU的网桥信息。由网桥的优先级和网桥ID组成。
ü 计时器:计时器用于说明生成树用多长时间完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。
STP利用BPDU选择根网桥的过程:
1、当一台交换机第一次启动时,假定自己是根网桥,在BPDU报文中的根网桥字段填入自己的网桥ID,向外发送。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f97dbc0dae9773e36e59f12947a8a856bf62d572d29ed1bf00304b1e705b27eda28f2c54389789026e891b80d386ad49ea3c788ba2b885ac1804550b6578124c1645d0840d&a=48&b=44][/url]
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f91cc2a3977222ea86d99962eedfea2c23ec9c59d7088015b6dfcef2c90c7ebecbac76cd311322a90228e51b62860407241615a031636f558453dfc1cf00c9e444255e9d72&a=48&b=44][/url]
交换机假定自己是根网桥并发送BPDU
2、交换机比较接收到的BPDU报文中根网桥ID与自己的网桥ID的值哪个更小,如果接收到的BPDU中的根网桥ID值小于自己的网桥ID,则用接收到的根网桥ID替换现有的根网桥ID,并向外转发。如此不断反复,最终能够选择出全网公认的唯一一个根网桥。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f94dd8b56ff2f1bae4037d48bd60720ee7f33de9f416de3f84d91f63accbcf5863a99ded6988dcdeaaeeaf24a36495512a4587366f30c27156819c427f905de35d74cd9825&a=48&b=44][/url]
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9eade5f902c9ea3812c74edfc8573744f134b13295b2bee32a50216ee3802d7dfb1c9254d8f8e3ed4c0cb7b8e295e87e37f2b2f459753c6d5e822d975b47faefb7c913d63&a=48&b=44][/url]
交换机用更小的根网桥ID替换原有的根网桥
3、收敛以后,如果又一台新的交换机加入进来,则继续比较更网桥ID,选出新的根网桥。
STP利用BPDU确定端口的跟路径成本:
1、根网桥发送一个根路径成本为0的BPDU报文。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9d00cd7d35ea422aeb1d8dc67a9a2345f5ea7264fcedacfe7ed0eeec391cb0707a1d07214a540de7fccf0fb880a48020ebaefe63ad241278cac9e6a02dc9f053d510c1e66&a=48&b=44][/url]
2、当离根网桥最近的下一级交换机收到BPDU报文时,就把BPDU所到达的那个端口的路径成本值与根网桥的根路径成本值相加。
[url=http://b44.photo.store.qq.com/http_imgload.cgi?/rurl4_b=163c547c952f267e18e311c63f54a2f9d033ead4e21ada6ced2d10ea824e3a77ba43fee3546a60b014df70eb09b67e53fce12e1ca1a07979c2f0e229ed9b4bdbf930a729c1ce70b8b22921c52f2ac7cbc8f56516&a=48&b=44][/url]
3、邻接交换机再以这个新的累加值作为根路径成本,然后发送出包含此值的BPDU报文。
4、当邻接交换机下的每一台交换机都收到这个BPDU报文时,再把随后的交换机端口路径成本与这个值相加,依次类推。
生成树端口的状态:
禁用(Disabled):强制关闭(实际并不属于端口正常的STP状态的一部分)
阻塞(Blocking):只接收BPDU,以便能侦听到其他邻接交换机的信息。老化时间20s。
侦听(Listening):构建“活动”拓扑,为了使该端口加入生成树的拓扑过程,允许接收或发送BPDU报文,延迟时间15s。
学习(Learning):构建网桥表(转发BPDU报文的同时,学习新的MAC地址,并添加到交换机的地址列表中),延迟时间15s。
转发(Forwarding):发送/接收用户数据(可以发送和接收数据帧,也可以收集MAC地址加入到它的地址表,还可以发送BPDU报文)
IEEEE的通用生成树(CST):不考虑VLAN,以交换机为单位运行STP。
Cisco的每VLAN生成树(PVST):为每个VLAN使用独立的一个生成树实例。
Cisco的兼容CST的PVST(PVST+):允许CST信息传给PVST,以便与其他厂商在VLAN上运行生成树的实现方法进行互操作。
PVST的配置
SwA(config)#spanning-tree vlan 1 root primary
配置VLAN 1的根网桥为SwA,并设置优先级为24576,如果配置为secondary,则优先级变成28672
SwB(config)#spanning-tree vlan 2 priority 8192
配置VLAN 2的根网桥为SwB,并设置优先级为8192
以上两条命令不能保证根网桥就是它们自身(SwA或者SwB),主要查看它们的网桥ID。
SwA(config-if)#spanning-tree vlan 1 cost 19
修改端口的路径成本为19,即百兆带宽
SwB(config-if)#spanning-tree vlan 2 port-priority 100
修改端口的优先级为100
SwC(config)#interface range f0/1 - 20
SwC(config-if-range)#spanning-tree portfast
将SwC的1到20端口配置为速端口
SwC(config)#spanning-tree uplinkfast
将SwC配置成上行速链路
SwA#show spanning-tree vlan 1
查看VLAN 1的生成树信息
EthernetChannel(以太网通道)
Switch(config)#interface range f0/1 - 2
Switch(config)#channel-group 1 mode on
Switch(config)#no channel-group
配置和撤销Switch的1和2端口为通道1
Switch#show etherchannel summary
查看Switch的通道信息