9.3 理解STP
STP(Spanning Tree Protocol,生成树协议)与上节介绍的VLAN的关系非常密切。STP对应IEEE802.1D标准,主要应用于存在环路(通俗一点说就是,构成了数据发送和接收的循环路径)的网络,通过一定的算法既能实现路径冗余,同时又可将环路网络修剪成无环路的树型网络,从而避免报文在环路网络中的增生和无限循环。
9.3.1 STP的由来
要正确使用STP,就必须先了解它存在的意义或者开发这种技术的目的,只有这样才能更好地理解它的工作原理。前面说了,STP的目的就是消除网络中冗余的链路(当然不是物理消除),下面就来介绍STP是如何实现这个目的的。
二层数据网的自愈(就是指在网络出现故障时的自动修复能力)需求由来已久,早期的以太网桥采用了基于 MAC地址在不同端口之间的转发,而每一个端口对应的是一个以太网的网段,也就是一个以太网的广播域,通过学习每个端口的 MAC地址表的方式,以太网桥只转发不同端口间的通信。但是由于网桥依赖的是运行网络中存在的MAC地址和端口的对应表,所以一旦收到目的地址未知的数据包,它仍将利用广播的形式来寻址,所以,这种方法使得它天生不能隔离广播包和组播包的通信,其后果就是在一个环形网络中造成数据流量以指数形式的增长,从而导致网络的瘫痪,这种现象也称为"广播风暴"。
"广播风暴"的现象只存在于两点之间存在冗余链路的网络之中,而冗余链路却是在现实网络设计中大量存在的。如图9-5中核心层、汇聚层的交换机间都是有冗余设计的。本来这样设计的目的就是想当某一条链路失效时,另一条冗余的链路能够马上接管所有的工作。但是,在实际工作中,这些冗余连接还会带来广播风暴隐患。
如图9-5中的Switch 6交换机发送的数据要到达Switch 1,就可以有多条不同路径了,其中包括:Switch6→Switch 3→Switch 1,Switch 6→Switch 3→Switch 4→Switch 1,Switch6→Switch 3→Switch 4→Switch 5→Switch 2→Switch 1这三条。这样一来,当从Switch6发送一个请求数据包到Switch1时,就可能从以上三条路径中同时流出,显然这不是必要的,给网络带来了不必要的网络流量压力。本示例还只是一个很简单的结构,如果结构更复杂的话,冗余连接会更多,对应的冗余链路也就是更多,所带来的广播风暴将更大。
(点击查看大图)图9-5冗余连接设计示例 |
除了广播风暴的影响外,这么多冗余链路还可能形成网络环路,造成数据发送和接收死循环。同样以图9-5为例。在以上三条路径中,如果不加修剪,从Switch1上发送到Switch 6的数据包,可能就不会到达Switch 6,而是直接在Switch 1→Switch 3→Switch4→Switch 1,或者Switch 1→Switch 4→Switch 3→Switch 1,或者Switch 1→Switch2→Switch 5→Switch 4→Switch 1等多个封闭的环路上循环。
为了解决"广播风暴"和网络死循环这两个在二层数据网络中存在的主要弊端,IEEE(电机和电子工程师学会)在基于思科的STP技术基础上颁发了IEEE802.1D协议标准。这种两种协议的本质其实是一样的,就是消除网络拓扑中任意两点之间可能存在的冗余路径,将两点之间存在的多条路经划分为"通信链路"和"备份链路"。并规定,数据的转发只在"通信链路"上进行,而"备份链路"只用于链路的侦听,只有在发现"通信链路径"失效时,才自动地将通信切换到"备份链路"上。
用于正常数据转发的"通信链路"往往是最短的路径,如上一示例中的"Switch 6→Switch 3→Switch1"这条路径。但是,STP并不是全部禁用这些冗余链路,而只是在正常工作中让它们处于侦听状态,当活跃链路失效时才接替活跃链路的工作。这样就可以达到既不会因为冗余链路而形成广播风暴,也不会因为没有冗余链路而造成网络循环,降低网络的可用性。
现在的二层以太网交换机和三层以太网交换机采用了硬件电路的设计,保证了每个端口的独享带宽。这样一来,每个交换机都可以看成是一个多个拥有独立带宽端口的网桥,用户可以将它的每一个端口看作是一个独立的网桥端口,其二层的工作原理与网桥类似。为了实现在用户接入层、汇聚层甚至骨干层范围内的高可靠性,网络中关键的拓扑设计往往采用冗余链路的设计(参见图9-5),虽然也有其他的技术可以实现高效的网络收敛,但是大多数网络设计者还是采用了IEEE802.1D 的方法,原因是生成树协议是一项简单而又成熟的网络自愈技术。
9.3.2 STP的基本功能和工作原理
在网桥或交换机上运行的STP是与IEEE 802.1D标准具有类似功能的,但是它们是两种不同的链路层协议。因为IEEE802.1D是以标准形式颁布的,所以应用更广,所有品牌的网络设备都可以支持,而STP是由思科开发的,所以仅在思科自身以及授权使用的品牌设备上使用。但就目前来看,两者几乎是一个统一体,没什么区分了,因为IEEE802.1D几乎是等同采用思科STP的。
在网桥和交换机上部署STP的目的就是在你既想要有冗余链路,又要阻止环路的情形下阻止在网络中出现环路,最终达到降低广播风暴产生的可能(只能是可能,因为广播风暴不仅只有网络环路才能发生,还可能是因为专门的广播包引起的),消除网络循环。有时,在网络设计中,特别是一些比较大型,同时可用性要求高的网络系统设计时,冗余的链路与网络中故障转移所需的备份同等重要。在主链路失效时,通过激活备份链路可以使得用户继续连接到网络。在网桥和交换机上不部署STP,这样的部署又可能造成网络环路出现。如果两个连接的交换机一个运行STP,另一个运行IEEE802.1D,则它们需要不同的收敛计时器。
在如图9-6所示的网络示例中,在Switch A和SwitchB之间存在一条冗余链路。但是这种部署可能会创建一个桥接环路。例如,从Station M(站点M)发出的一个到StationN(站点N)的广播或者多播包可能会在两个交换机之间循环。
(点击查看大图)图9-6未运行STP的网络示例 |
但是,如果在两个交换机上运行了STP,则网络的逻辑结构就可看成图9-7所示。这时在Switch A和SwitchB之间就只有一条路径,从Station M发出的一个到StationN的广播或者多播包就不会在两个交换机之间循环了,消除了网络环路。
为了提供所需的路径冗余,同时又可以避免环路发生,STP定义了一个延伸到网络中所有交换机的"树"(只是一种比喻说法,既表示了网络中各交换机的层次结构,又暗示网络中没有环路)。STP强迫冗余数据路径处于备用的阻塞状态,而使其他路径处于转发状态。如果处于转发状态的一条链路不可用,STP重新配置网络,并变更数据路径为备用路径。
(点击查看大图)图9-7运行STP后的网络示例 |
9.3.3 STP运作规则
在STP中,网络中所有交换机的关键就是选择根网桥。网络中的其他确定,如哪个端口置于阻塞模式,哪个端口置于转发模式,都是需要依据根网桥才能确定的。在交换网络中,不同于桥接环境,更像多VLAN处理。一个交换网络中,在你执行根网桥时,通常是指定根网桥作为根交换机。每个VLAN必须有它自己的根网桥,因为每个VLAN是一个独立的广播域。不同VLAN的根网桥可以都是在一台交换机上,当然也可以在不同交换机上。
【说明】为特定VLAN进行根交换机选举非常重要。你可以选择根交换机,或者可以由网络中的交换机自己决定。如果不控制根交换机选举过程,可能在你的网络中会存在不适宜的路径。
所有交换机交换用于根交换机选举和以后网络配置的信息。BPDU承载了这些信息。每个交换机会比较本机发送到邻居交换机的BPDU和从邻居中接收到的BPDU中的参数。在STP根交换机选举过程中,参数值越小越好(优先级越高)。如果SwitchA通告的根ID比Switch B通告的根ID小,则来自Switch A的信息就越好。SwitchB停止它的根ID通告,接受Switch A的根ID通告。
生成树(ST)的工作方式是为交换机和端口分配角色,以确保在任何时刻交换网络中点与点之间只有一条路径。它所分配的端口角色包括根网桥(RootBridge,RB)、指定网桥(Designated Bridge,DB)、根端口(RootPort,RP)、指定端口(Designated Port,DP)和非指定端口(Nondesignated Port)。
根交换机识别每个VLAN,在根交换机识别后,交换机按照以下STP规则运作:
首先,根交换机中的所有端口都必须处于转发状态。然后,网络中的其他每个交换机通过比较交换机上每个端口上接收到的BPDU信息来决定到根交换机的最佳路径。交换机使用接收到的BPDU中信息最小的端口作为到达根交换机的端口,也就相应交换机的"根端口"。在确定了根端口后,交换机进行以下规则。
根端口必须设置为转发模式。另外,每个LAN网段中交换机相互通信,以确定哪台交换机用于从该网段中转发数据到根交换机,这台交换机就称之为"指定交换机"。
在一个LAN网段中,指定交换机上连接到这个网段的端口必须处于转发状态。
所有交换机中的其他端口必须处于阻塞模式。这条规则仅适用于连接到其他交换机的端口。STP不会影响连接到工作站或者服务器的端口,这些端口必须处于转发状态。
【说明】当STP运行在PVST或PVST+时添加或者删除VLAN会触发VLAN实例ST的重新计算,仅相应VLAN的通信将中断,中继链路上的其他VLAN仍可以正常通信。在已有的MST实例中添加或者删除VLAN也会触发这个实例的ST重新计算,并且该MST实例中的所有VLAN通信都将中断。
默认情况下,在每个端口上都运行ST(生成树)。ST功能不能在交换机上基于每端口方式关闭。尽管不建议,但你仍可以在交换机上基于每VLAN,或者全局方式关闭STP。只要你禁止ST就需要特别小心,因为这可能在网络内部生成二层环路。
9.3.4 STP角色选举
当交换机第一次启动,开始了根交换机的选举过程。每个交换机基于每VLAN方式传递一个BPDU到直接连接的交换机上。因为BPDU是通过网络传递的,所以每个交换机会比较该交换机会把自己的BPDU与接收到的BPDU进行比较。然后交换机对哪台机成为根交换机达成一致意见。在网络中具有更低网桥ID的交换机将成为根交换机,赢得选举。
以上STP角色的选举基本过程如下:
(1)首先在整个交换网络中选举一个"根网桥"(RB),即选举一个根交换机。
每个交换网络中只能有一个网桥担当"根网桥"。它是通过比较网桥的BPDU(Bridge Protocol DataUnit,桥接协议数据单元)信息来选举的。在BPDU中包括了"网桥ID"(BridgeID)。网桥ID包含2个字节的网桥优先级(BridgePriority)和6个字节的MAC地址。"网桥ID"的数值越低,成为"根网桥"的概率也就越高。
(2)确定了"根网桥"后,网络中的其他交换机就为非根网桥了。此时再为所有"非根网桥"选举"根端口"(RP)。"根端口"可以发送和接收"配置BPDU",或者接收BPDU消息包。
"根端口"是"非根网桥"到"根网桥"的最佳路径所在端口,也即最低开销的路径(当然,直接连接的路径开销最小)。在每个"非根网桥"上选举一个"根端口",也就是"根端口"是针对"非根网桥"而言的,而不是在"根网桥"上,这一点最容易引起误会。
如果有多条等价路径(也就是此交换机到根网桥的路径中所经过的交换机跃点数是一样,也就是经过了相同数量的交换机),那么"非根网桥"先根据所直接连接的网桥的"网桥ID"来选择(不同交换机的"网桥ID"是不一样的),选择连接"网桥ID"最低的网桥的端口作为根端口;如果所连接的网桥的"网桥ID"都一样(也就是一个交换机与另一台交换机之间有两个或以上端口直接连接),则再根据所连网桥的"端口ID"(也就是端口号,每个端口的"端口ID"是不一样的)最低的那个端口作为"根端口"。
【说明】要显示交换机上各VLAN中网桥ID中的网桥优先级和MAC地址值,可以使用showspanning-tree命令查看。它是用来查看交换机上生成树配置的。
(3)在各个网段(星型网络对应于一个交换机端口,而总线型网络则对应于一条总线)中选举一个"指定端口"(DP)。"指定端口"所在的交换机就是"指定网桥"(DesignatedBridge,DB,也即"指定交换机")。
"指定端口"是相应网段所有端口中到达"根网桥"的路径开销最低的端口。在"根网桥"上,所有的端口都为"指定端口",因为它们各自所代表的网段中,到达"根网桥"的路径为0(就在"根网桥"交换机上),当然最小了。但是并不是说"指定端口"只是在"根网桥"上,"非根网桥"上也有,只是在一个网段中只能有一个"指定端口"。"指定端口"不仅能够发送和接收流量,还可以发送和接收配置消息或BPDU(BPDU的发送仅针对"根网桥"之上的"指定端口")。
(4)最后,STP封堵所有"非指定端口"。
在STP中,除了"根端口"和"指定端口"外的交换端口都属于"非指定端口"。"非指定端口"是处于阻塞状态的,不能接收和发送配置信息和BPDU。
【说明】"网桥"连接的是不同网段的设备,而早期的"集线器",或者"中继器"所连接的不是不同网段,而同一网段(或者说是同一冲突域)的设备,因为网桥的两个端口不是共享介质的,而集线器或者中继器各端口是共享介质的。而交换机可以看成是一个具有多个端口的网桥,每个端口都具有桥接功能。这样一来,也就可以这么理解,由同一网桥或者交换机端口(其实路由器中的LAN端口也一样)连接的设备就属于一个网段。在星型以太网中,最常见的就是按交换机来划分网段的,一个交换机(根交换机除外)代表一个网段,因为它上面各端口所连接设备到根交换机的通信都是共享一条介质的。但它与下级交换机的连接又可根据不同端口划分不同的网段,因为它可以连接多个下级交换机。在总线型网络中,一条总线上连接的设备都属于一个网段,HUB上连接的也属同一个网段,但HUB的各端口不能再分网段,因为它们是共享介质的。
通过以上端口角色的分配,就可以确保在同一时刻,只能一条性能最佳的链路(最佳路径)为活跃的(每个网络中只有一个根网桥,每个网段上只有一个指定端口,而每个非根网桥只有一个根端口),其他冗余路径都处于阻塞状态。
也可以这么简单理解,就是在STP算法中,活跃链路只包括:根网桥上的"指定端口"--网段中的"指定端口"--非根网桥的"根端口"。所有包括非指定端口的链路都是阻塞的。在如图9-8所示的示例中,根网桥(SwitchX)上的两个端口都是"指定端口",非根网桥(SwitchY)的一个端口为"根端口",另一个端口为"非指定端口",因为在网段1和网段2中已有一个指定端口了,所以不能再在连接同一个网段的交换机上指定某个端口为"指定端口"。
(点击查看大图)图9-8端口角色选举示例 |
9.4 STP端口状态
在STP中,各种类型的端口都有与其对应的工作状态的。当然端口状态在从交换机启动到正常工作过程中,可能会发生一系列的改变。STP中包括的端口状态有:阻塞(Blocking)状态、侦听(Listening)状态、学习(Learning)状态、转发(Forwarding)状态、禁止(Disabled)状态。通过这些不同状态的分配,就可以使得交换机(或网桥)上的各端口工作在不同状态,从而达到无网络环路的目的。
9.4.1 STP端口状态概述
当协议信息通过一个交换网络时,可能发生传播延时。其结果往往是交换网络的拓扑结构可能会随时发生改变。当一个原来不在生成树拓扑结构中的二层端口直接转变成转发状态时,则可能会创建新的临时数据环路。
端口在正式进行数据帧转发前必须等待新的拓扑信息,然后再通过交换网络传播。但是必须允许已使用旧拓扑结构转发的帧继续转发,直到达到帧的生存周期期满。
每一个使用STP的二层LAN端口存在于以下5种状态:
阻塞(Blocking):这种二层LAN端口不能参与帧转发。
侦听(Listening):这是端口自阻塞状态后的第一个过渡状态。STP认为这种状态的二层LAN端口应当参与帧转发。
学习(Learning):这种状态的二层LAN端口处于准备参与帧转发状态。
转发(Forwarding):这种状态的二层LAN端口就可以正式转发帧了。
禁止(Disabled):这种状态的二层LAN端口不参与STP,不转发帧。
以上状态的二层LAN端口在数据通信中可进行以下5个状态转变过程:
从初始化到阻塞状态
从阻塞到侦听或者禁用状态
从侦听到学习或者禁用状态
从学习到转发或者禁用状态
从转发到禁用状态
图9-9描述了一个二层LAN端口是如何进行以上这5个状态转变的。
图9-9STP二层LAN接口状态 |
当你启用了STP,在设备开启电源后,每个端口和网络都要经历阻塞、侦听、学习这类的过渡状态。如果有适当的配置,每个二层LAN端口最终会稳定到转发或者禁用状态。图中的实线流程表示一个基本的状态转变过程,虚线流程表示在实际的端口状态转变过程中可能发生的状态转变过程。
当STP算法把一个二层LAN端口置于转发状态,将发生以下过程:
(1)当二层LAN端口等待协议信息时置于侦听状态,建议置于阻塞状态。
(2)二层LAN端口等待转发延时(Forwarddelay,此步包括由侦听状态到学习状态所需经历的等待时间)到期,转变这个二层LAN端口为学习状态,并重置转发延时计数器(Forwarddelay timer)。
(3)在学习状态下,这个二层LAN端口继续阻止帧转发,以便它可以从转发数据库中学习到终端位置信息。
(4)这个二层LAN端口再次等待转发延时(此步是由学习状态到转发状态所需经历的等待时间)到期,然后转变为转发状态,此时,学习和转发这两种状态是同时启用的。
从以上流程可以看出,在整个端口状态转变中,一个端口由初始的阻塞状态到转发状态是需要经过两个转发延时周期的,效率比较低。这是STP最大的不足,也就是它最终被RSTP(快速生成树协议)取代的一个重要原因。
以下各节会具体介绍以上5种端口状态。
STP即生成树协议,它是局域网交换网络中技术性最强的主题之一,随着交换网络成为焦点,它的作用也越来越明显.
STP协议产生的原因:
1.广播环路
2.网桥表损坏
3.使用它来防止环路
STP协议运行STA算法,它强迫某些冗余链路进入备份状态,它的算法很复杂,但用于收敛出一个无环拓朴却只有三步
1.选择根网桥
2.选择根端口
3.选择指定端口
生成树算法是依据网桥ID,路径成本和端口ID这些参数来生成无环拓朴的,它总是使用4个判决过程
1.确定根网桥
2.计算到根网桥的最小路径成本10M/100100M/191000M/4 带宽越高,路径成本越低
3.确定最小的发送方网桥ID数值越小优先级越高,默认为32768
4.确定最小的端口ID数值越小优先级越高
STP在进行数据操作时,数据报文以桥接协议数据单元BPDU的形式进行交换,BPDU帧利用STP组播地址01-80-c2-00-00-00作为目的地址,使之能到达相邻并处于STP侦听状态的交换机
BPDU有两种类型:
一种是配置BPDU,用于生成树木计算
一种是拓朴变更通告
STP端口有五种状态
1.禁用Disabled:同管理员手工指定或网络故障导致的状态,它不是正常STP状态的一部分
2.阻塞Blocking:此时端口既不能接收也不能发送数据,也不能向它的地址表添加MAC地址,而且只允许接收BPDU报文
3.侦听Listening:如果交换机认为它一个端口可选为根端口或指定端口,那么它就把该端口由阻塞状态变成侦听状态
4.学习Learning:一个端口在侦听状态下经过一段时间后就会转成学习状态,在此状态下的交换机可以学习新MAC地址
5.转发Forwarding:在学习状态下再经过一段时间该端口即进入转发状态,至此该端口才成为一个全功能的交换机端口
STP的计时器
1.HELLO时间:交换机发送BPDU报文之间的时间间隔,默认为2s
2.转发延迟:交换机在侦听Listening到学习Learning状态所花费的时间,默认为15s(学习到转发状态也是15s)
3.最大老化时间:交换机在丢弃BPDU报文之前储存它的时间,默认为20s
CISCO现在使用的STP协议是带SCT的PVST+,可与别的生成树协议兼容,为每个VLAN使用一个独立的生成树
最好将核心层交换机配置成根网桥:spanning-tree vlan xx rootprimary(强制),
也可通过修改网桥优先级来实现:spanning-tree vlan xx priorityxxxxx
修改端口成本:spanning-tree vlan xx cost xx
修改端口优先级:spanning-tree vlan xx port-priorityxxxx
启用速端口:spanning-treeportfast所有接入层端口上配
启用上行速链路:spanning-treeuplinkfast接入层及汇聚层交换机上配
加快20s收敛时间:spanning-treebackhonefast 每台交换机上配