【干货】关于生成树协议里那些你不知道秘密??

生成树协议(STP)

  • Compaq很久之前名为数字设备公司( DEC),后被收购并更名为现在的名称。早在此前的30年,DEC就开发出了生成树协议的最初版本。后来IEEE研发了自己的STP版本,命名为802.1D。思科已经开始在其新生产的交换机上完成到另一个行业标准的过渡,即所谓的802.1w。

  • STP的主要任务是防止第2层网络(网桥或交换机)出现网络环路。它警惕地监视着网络以找出所有可用链路,并关闭任何冗余链路以确保不会出现环路。STP首先使用生成树算法( STA)创建一个拓扑数据库,然后找出并关闭冗余链路。运行STP后,数据帧就只能在STP选定的最优链路上进行转发。

  • 在下面的小节中我们来看下生成树协议最基本的内容。

注意

STP是一种2层协议,用于维护一个无环路的交换式网络。在图10-9中所示的网络中,生成树协议是必须的。

在图10-9中给出了一个带有冗余拓扑(交换环路)的交换式网络。如果不在网络中采取一些2层协议机制来阻止网络环路,此网络就会遇到前面所讨论过的问题:广播风暴、多帧复制以及MAC表不稳定。

警告

警告:应该注意,图10-9 中的网络在不使用STP的情况下有时也是可以运行的,当然它工作起来会非常地缓慢。这个示例清楚地展示了交换环路所能造成的危害。最糟糕的是,一旦网络运转起来,要想找出问题的根源会超級困难!

生成树术语

在详细描述STP在网络中的运行机制之前,我们首先来学习一些基本概念和术语,并且还要掌握。这些内容与第2层交换式网络的关联。

  • 根桥 根桥是指拥有最佳桥 ID的网桥。对于STP来说,关键就是要为网络中所有的交换机推选出一个根桥,并使根桥成为该网络中最重要的点。而网络中所有其他决策一比如哪个端需要阻塞以及哪个端口需要配置为转发模式——都需要基于与根桥的关系进行选择。一旦网络中的根桥被选举出来,所有其他的网桥都需要确定一个通往根桥的单一路径。通往根桥的最佳路径上的端口就被称为根端口。

  • BPDU 指网络中所有交换机都需要 相互交换的、用于根交换机选举的信息,这些信息也会用于网络的后续配置。每台交换机都会对桥协议数据单元(BPDU)内的参数进行比较,并将从邻居收到的BPDU放人自己的BPDU中,然后再将其传送给其他邻居。

  • 桥ID STP使用桥ID跟踪网络中的所有交换机。桥ID由桥优先级(默认情况下所有思科交

    换机的优先级都为32 768)和桥MAC地址共同决定。在网络中拥有最小桥ID的网桥将成为根桥。

  • 非根桥 指除了根桥外的所有网桥。非根桥会与所有的网桥交换BPDU,并在所有交换机上

    更新STP拓扑数据库,以防止环路并对链路失效提供保障措施。

  • 端口开销  当两台交换机间存在多条链路时,端口开销用于确定最佳路径。一条链路的开销取决于链路的带宽。

  • 根端口 根端口是指与根桥直接相连的链路所在的端口,或者是通往根桥路径开销最低的端口。如果存在连接到根桥的多条链路,那么只有检查每条链路的带寬才能确定根端口,此时最低开销的端口是根端口。如果上行的多台交换机开销均相同,那么就使用带有较低通告的桥ID的那个桥。当多条链路连接到同一台设备时,就使用上行交换机上连接到最低端口号的端口。

  • 指定端口  指定端口是专门指定的,通过其根端口到达根桥开销最低的端口。指定端口会被标记为转发端口。

  • 非指定端口 非指定端口是指开销比指定端口高的端口。确定根端口和指定端口后剩下的端口就是非指定端口。非指定端口将被设置为阻塞状态,不能进行转发。

  • 转发端口 转发端口指能够进行数据帧转发的端口, 它可以是根端口或指定端口。

  • 阻塞端口 阻塞端口是指不能转发帧的端口, 设置阻塞端口是为了避免环路。然而,阻塞端口会始终监听BPDU帧并丢弃其他所有帧。

生成树的操作

正如前面所讲的,STP 的任务就是要找出网络中所有的链路,关闭任何冗余链路,从而阻止网络环路的出现。

为了做到这一点,STP 首先选举一个根桥, 根桥可以通过所有的端口完成对数据的转发,并且它是该STP域中所有设备的参考点。一旦所有的交换机都同意将某台交换机选为根桥,每个网桥就必须找出属于它自己的一个并且也是唯一个分派的根端口。任意两台交换机之间的链路必须要有一个而且只能有一个指定端口,该端口位于能够提供到根桥最大带寬的链路上。

注意, 一个网桥可以通过多个其他网桥到达根桥,也就是说这一路径可能不是最短路径,但一定是最快(具有最大带寬)路径,这一点很重要。

显然,根桥上的每个端口都是指定端口(为某个网段的转发端口),因为根桥离自己总是最近的。等到尘埃落定之后,那些既不是根端口也不是指定端口的端口,也就是那些非根端口和非指定端口,全部被设置为阻塞状态,这样就破坏了已构成的交换环路。在决定航行路线时,如果只有一个人有决定权,事情会进行得异常顺利,因此,在任何给定的网络中,只允许有一个根桥。

1.选举根桥

桥ID将用于STP域中根桥的选举,并且当多个候选者的可用根端口和路径开销相等时,桥ID也可以确定此STP域中剩余设备的根端口。这个ID长8B,其中包括了设备的优先级和MAC地址。在所有运行IEEE STP版本的设备上,默认优先级为32 768。

为了确定根桥,需要将每个桥的优先级和它的MAC地址结合起来。如果两个交换机或网桥碰巧拥有相同的优先级数值,那么,MAC地址就成为决定哪个设备具有最低( 最佳) ID的依据。如果有两台交换机,分别为A和B,它们都使用默认优先级32 768,那么,MAC地址就是进行比较的依据。如果交换机A的MAC地址为000000101,而交换机B的MAC地址是00000.22222这样,交换机A将成为根桥。只要记住,在进行根桥选举时,取值越小越好。

默认情况下,在根桥选举之前,BPDU 通过网桥/交换机的所有活动端口每2秒向外发送一次,再强调一次,带有最小(最佳)桥ID的网桥将被选举为根桥。降低桥的优先级可以修改ID值,从而使其自动成为根桥。在大型交换式网络中,能够做到这一点是很重要的, 这样就能保证最佳路径会被选中。在这里需要追求的是效率!

图10-10 给出了一个典型的带有冗余交换路径的交换式网络。首先,我们需要找出根交换机;然后通过修改交换机的优先级,来让非根桥成为根桥。

查看图10-10,可以看出交换机A是根桥,因为它的桥ID最小。为了阻止交换环路的出现,交换机B必须关闭一个与交换机A相连接的端口。记住,尽管交换机B不能通过阻塞端口进行发送,但它仍然可以接收BPDU帧。

STP为了确定关闭交换机B上的哪个端口,它首先要检查每条链路的带宽值,然后将带宽值最低的链路关闭。由于在交换机A和B之间的两条链路都是100Mbit/s,因此,STP 通常会关闭端口号较高的那一条链路。在这个示例中,12要比11高, 因此,端口12将被设置为阻塞模式。修改默认优先级是选择根桥的最佳方式。挑选距离网络中心最近的交换机作为根桥,这样的配置可以保证STP的快速会聚,这一点很重要。

让我们来试下,让交换机B成为网络中的根桥。下面是交换机B的输出,它显示了默认优先级。这里可以使用show spanning-tree 命令:

在这里,我们立即注意到了两件事:交换机B运行的是IEEE 802.1d协议(输出中给出的是"ieee" ),并且第一项输出( RootID)是此交换式网络中关于根桥的信息。注意,这个根桥不是交换机B。交换机B到根桥的端口( 所谓的根端口)是端口1。这里的桥ID实际上是由交换机B和VLAN 1 构成的生成树桥ID的信息,VLAN 1被表示为VLAN0001,注意每个VLAN都可以有不同的根桥。此处还列出了交换机B的MAC地址,可以看出,它与根桥的MAC地址是不同的。

交换机B的优先级是32 768,这是所有交换机的默认优先级。注意,它在这里被显示为32 769,即与VLAN ID相加的结果,由此可以推出,对于VLAN 1,它将显示为32 769。对于VLAN 2则为32 770,以此类推。

正如前面所述,通过修改优先级,可以指定某台交换机成为STP网络中的根桥,现在指定交换机

B成为根桥。可以使用下列命令在Catalyst交换机上修改某个桥的优先级:

可以将优先级设置为0到61 440之间的任何值。将优先级设置为零(0)意味着,该交换机始终为根桥(假设其他交换机的桥ID也被设置为0时,它与这些交换机相比总是拥有较低的MAC),桥优先级的数值是以4096为间隔递增的。如果需要将某台交换机设置为网络中所有VLAN的根桥,那么必须修改每个VLAN的优先级,0是可以使用的最低优先级。最好不要将所有交换机的优先级都设置为0。

请看下面的输出,将VLAN 1中交换机B的优先级修改为4096后,我们就成功地指定了这台交换机成为根桥:

现在,根桥的MAC地址和交换机B的桥优先级一样了, 这表明交换机B已经成了根桥。需要了解命令show spanning-tree,这非常重要。

!注意不管你信不信,还有另一个可以用来设置根桥的命令。

生成树的端口状态

对于运行IEEE 802.1d STP的网桥或交换机来说,其端状态会在5种不同的状态间进行转换。

  • 阻塞被阻塞的端 口不能对数据帧进行转发;它只监听BPDU 帧。设置阻塞状态是为了阻止

  • 使用有环路的路径。当交换机通电时,所有端口在默认情况下都处于阻塞状态。

  • 侦听端口 侦听BPDU,以确保在开始传送数据帧之前,网络上没有环路出现。处于侦听状态的端口在没有形成MAC地址表时就准备转发数据帧。

  • 学习交换机端口 侦听BPDU,并学习此交换式网络中的所有路径。处在学习状态的端口开始形成MAC地址表,但仍不能转发数据帧。转发延迟是指将端口从侦听状态转换到学习模式(或从学习到转发模式)所需花费的时间,默认设置为15秒,可以用命令show spanning-tree查看。

  • 转发端口发送并接收所有 桥接端口上的数据帧。如果在学习状态结束时,端口仍然是指定端口或根端口,那么它就会进入转发状态。

  • 禁用(在技术上它不是一个可转换状态) 处于禁用状态的端口(管理上)不能参与帧的转发或组成STP。禁用状态下的端口实质上是不工作的。

注意只有在学习和转发模式中,交换机才能形成MAC地址表。

在大多数情况下,交换机的端口都处于阻塞或转发状态。转发端口通常是到根桥开销最低(最佳)的端口。但如果网络拓扑发生了改变(可能是因为链路失效或者有人添加了一台新的交换机),就会发现交换机上的端口在侦听和学习状态之间转换。

我曾经提到,阻塞端口是一种预防网络环路的策略。一旦交换机为它的根端口和任一指定端口确定了到达根桥的最佳路径,那么,所有其他的冗余端口都将处于阻塞状态。被阻塞的端口仍可以接收BPDU,只是它们不能再发送出任何帧。

如果由于网络拓扑的改变,交换机迭定一个阻塞端口为指定端口或根端口, 那么它将进人侦听模式,并检查所有收到的BPDU,从而确保一旦端口进入转发模式它不会创建网络环路。

3.会聚

当网桥或交换机上的所有端口都转换到了转发或阻塞模式时,就会形成会聚。在会聚完成之前,无法转发数据。是的,就是这样:在STP会聚过程中,所有的主机数据都会停止发送!因此,如果你想与网络用户保持良好的关系(或者是长期保持雇佣关系),就必须确保你的交换式网络设计完好,从而使STP能够快速会聚。

图10-11给出了在设计和实现交换式网络时,必须特别重视的问题,从而保证STP能够高效会聚。

由于会聚可以确保所有的设备都具有一个协调统-的数据库, 因此会聚确实相当重要。但是我还需要再次强调,达到会聚实际上要用掉一些时间。从阻塞转换到转发模式通常会需要50秒的时间,建议不要修改这个默认的STP定时器时间(但如果需要或处理大型网络时,可以调整这些定时器的设置)。可以像图10-11 所示的那样,通过创建层级交换机实用设计,设法让核心交换机成为STP的根桥,就可以让STP会聚得又快又好。

在交换机端口上,从阻塞到转发的典型的生成树拓扑会聚时间为50秒,这样在服务器或主机上

就会引发超时的问题,比如,重新启动交换机。针对这样的问题,可以在个别端口上使用快速端口来

禁用生成树协议。

4.生成树的端口快速

如果交换机上连接服务器或其他设备,并且你可以完全确定这些链路不会因为禁用STP而产生交换环路,那么,可以在这些端口上使用所谓的端口快速( PortFast )。使用了端口快速就表明,当STP会聚时,这一端口无需花费50秒即可进人转发模式。

下面是可以完成这一配置的命令,相当简单:

关于中继端口,我们至今还没有正式介绍过,从根本上讲,中继端口用于连接交换机,并在交换机间传递VLAN信息。如果要在某个中继端口.上启用端口快速,就必须特别地小心。交换机间的端口通常都需要运行STP,因此这不是典型的配置。下面,我们就来看下,当在某个接口上启用了端口快速时,交换机会给我们一些什么提示:

我们在端口F0/1上启用了端口快速,注意到这里给出了一个相当长的提示信息,它告诉你这样做要小心。另一个很实用的接口命令是range,通过它可以在交换机上同时配置多个端口。下面是一个例子:

Swi tch(config)#int range fastEthernet 0/1 - 12

Swi tch(config-if- range)#spanning-tree portfast

只需输人上面介绍的range和配置端口快速命令再加一个回车,我们就可以将此交换机上的所有12个端口都设置为端口快速模式。希望这种配置不会创建任何环路!再次强调,在使用端口快速时一定要特别地小心谨慎。同时还需要注意,命令interface range 可以与任何命令联合使用。在上面的示例中,它是与portfast命令一起使用的。

5.生成树的UplinkFast

UplinkFast是思科产品特有的特性,当链路失效时UplinkFast可用来缩短STP的会聚时间。注意,与portfast命令样, 在使用这个命令时,同样需要特别地小心谨慎! UplinkFast 特性专门运行于交换式环境中,当交换机至少有一个可替换/备份的根端口(一个处于阻塞状态的端口)时才会需要使用它。这也就是为什么思科只推荐一种 典型的应用,即当接人层的交换机端口被阻塞时,才启用UplinkFast。

UplinkFast 允许交换机在主链路失效之前就找出到根桥的可替换路径。这表明如果主链路失效,可替换的备用链路将首先被启用,这样端口就不用再等待通常STP会聚所需要的50秒的时间。因此,如果你正在运行802.1d STP,而且在接人层的交换机上配置了冗余链路,那么,你肯定需要打开UplinkFast。但是,在思科多层设计中,如果不知道通常用于分配层和核心层交换机的可替换/备份的根链路的拓扑设计结构,就不要轻易使用Uplinkfast。

6.生成树的BackboneFast

与可以在本地交换机上确定并快速修复链路失效的UplinkFast不同,思科还有一个专用的STP扩展特性BackboneFast,在那些无法与交换机直接相连的链路失效的情况下,使用BackboneFast可以加速会聚。当运行BackboneFast的交换机从指定网桥接收到一个劣质BPDU,它就知道到根桥的路径中某一链路失效了。需要明确的是,劣质BPDU是一个给出根桥和指定桥等同类交换机列表的BPDU。

另外,BackboneFast 与UplinkFast不同,Uplinkfast 只能配置在接入层交换机上,或者是带冗余链路的交换机(并且其中至少有一条链路处于阻塞模式),而BackboneFast可以在所有的Catalyst交换机上启用,这样就能够检测出非直连链路上的失效。启用BackboneFast的好处是它能够加速生成树的再配置过程,在默认的50秒的STP会聚时间中,它能节省20秒钟。

7.快速生成树协议(RSTP) 802.1w

你是否希望在你的交换式网络(无论是何种品牌的交换机)中,不仅STP配置良好,而且在每台交换机上都内置并启用上面刚刚讨论过的所有特性?这样的结果,当然可以有!那么,欢迎进人快速生成树协议(RSTP )的世界。

思科创建了PortFast、 UplinkFast 和BackboneFast来“修补”IEEE 802.1d 标准中的漏洞和缺陷。但这些改进特性的不足之处在于,它们都是思科专用的,还需要进行额外的配置。但新的802.1w 标准( RSTP)将所有这些“问题"都-并解决了 ,你需要做的就只是打开RSTP。有一点很重要,即必须确保网络中所有的交换机都能正确地运行802.1w协议。

!注意RSTP确实能够与传统的STP协议实现互操作,你可能对此有些吃惊。但需要知道,当它与传统的网桥进行交互时,802.1w将丧失其内在的快速会聚能力。

RSTP并不是一个“全新”的协议,但比起802.1d标准它又进化了许多,当拓扑发生改变时它具有更快的会聚时间。在创建802.1w时必须保证向后的兼容性。

802.1w重新定义了5种端口状态:

禁止=丢弃

阻塞=丢弃

侦听=丟弃

学习=学习

转发=转发

找出根桥、根端口和指定端口的方式并没有改变;但是,需要重新学习确定每个链路开销的方法。表10-1给出了基于带宽的IEEE开销,STP和RSTP据此确定通往根桥的最佳路径。

下面来看一下如何使用改进的IEEE开销规范确定端口,图10-12演示了这样一个示例。在图10-12中,哪个交换机会变成根桥,而哪些端口又会成为根端口和指定端口呢?

交换机C拥有最低的MAC地址,因此,交换机C将成为根桥,并且根桥上的所有端口都是转发端口,可见,这是最容易的部分。交换机A的根端口是哪个?如果交换机A和交换机B之间的路径都是吉比特的,那么它的开销只能是4,但是它们之间是快速以太网链路,因此交换机A和B之间的链路开销是19。看一下交换机B和C之间的链路开销,可以看出这一开销为 4,因为它是吉比特的链路;然而,由于交换机D和C之间是快速以太网链路,因而其开销为19,与交换机A和B之间的链路是相同的。从交换机A到C中间通过交换机B和D的路径总开销为19+4+19 = 42。如果从交换机A直接到交换机C,开销更低(19),因此,在交换机A上Fa0/1就是我们的根端口。对于交换机B,最

佳路径经由交换机D,它的开销为4+19=23,于是,交换机B上的Gi0/1为根端口,而交换机D上的Gi0/2为根端口。在交换机A和B之间的链路上,我们只需要一个转发端口,由于交换机A拥有更低的桥ID,因此交换机A的Fa0/2将成为转发端口。所有没有在这里列出的端口都将进人阻塞模式(非指定状态),用于阻止环路的出现。

如果还是不太清楚,记住只需要找出根桥,然后判断出根端口,然后是指定端口。理解这些内容的最佳方式就是实践,因此,我们再来看一个示例,如图10-13所示。

哪个网桥会成为根桥?由于所有的优先级都设定为默认情况,SW-C将成为根桥,因为它拥有最低的MAC地址。我们很快就会发现,SW-D 有一个连接到Sw-C的吉比特端口,因此它将成为SW_D的根端口,其开销为4。SW-B的最佳路径也是直接连接到sw-C的吉比特端口,其开销也为4,但是SW-A呢? SW-A的根端口不会是直接相连的100 Mbit/s端口,它的开销为19,而连接到SW_D的吉比特端口和随后连接到SW-C的吉比特端口,它们的总开销只为8。

8. EtherChannel

除了配置冗余链路并允许STP将某条链路设置为阻塞( BLK)模式之外,我们还可以将多条链路捆绑在一起创建逻辑上的聚合,这样多条链路可以像单一链路那样工作。既然这种做法与STP一样,也可以提供同样的冗余性,那么为什么我们不将这些冗余的链路捆在一起使用呢?

同样,这里也有两个不同的版本可供选择,思科的EtherChannel 和IEEE的端口通道协商协议的版本。思科的版本被称为端口聚合协议( PAgP ),而IEEE的802.3ad的标准则被称为链路聚合控制协议(LACP )。这两个版本都很好用,但配置各不相同。

(0)

相关推荐