冬天西装搭配什么鞋子:STP的由来

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 12:26:22

9.3.1 STP的由来

9.3  理解STP

STP(Spanning Tree Protocol,生成树协议)与上节介绍的VLAN的关系非常密切。STP对应IEEE 802.1D标准,主要应用于存在环路(通俗一点说就是,构成了数据发送和接收的循环路径)的网络,通过一定的算法既能实现路径冗余,同时又可将环路网络修剪成无环路的树型网络,从而避免报文在环路网络中的增生和无限循环。

9.3.1  STP的由来

要正确使用STP,就必须先了解它存在的意义或者开发这种技术的目的,只有这样才能更好地理解它的工作原理。前面说了,STP的目的就是消除网络中冗余的链路(当然不是物理消除),下面就来介绍STP是如何实现这个目的的。

二层数据网的自愈(就是指在网络出现故障时的自动修复能力)需求由来已久,早期的以太网桥采用了基于 MAC 地址在不同端口之间的转发,而每一个端口对应的是一个以太网的网段,也就是一个以太网的广播域,通过学习每个端口的 MAC 地址表的方式,以太网桥只转发不同端口间的通信。但是由于网桥依赖的是运行网络中存在的MAC 地址和端口的对应表,所以一旦收到目的地址未知的数据包,它仍将利用广播的形式来寻址,所以,这种方法使得它天生不能隔离广播包和组播包的通信,其后果就是在一个环形网络中造成数据流量以指数形式的增长,从而导致网络的瘫痪,这种现象也称为'广播风暴'。

'广播风暴'的现象只存在于两点之间存在冗余链路的网络之中,而冗余链路却是在现实网络设计中大量存在的。如图9-5中核心层、汇聚层的交换机间都是有冗余设计的。本来这样设计的目的就是想当某一条链路失效时,另一条冗余的链路能够马上接管所有的工作。但是,在实际工作中,这些冗余连接还会带来广播风暴隐患。

如图9-5中的Switch 6交换机发送的数据要到达Switch 1,就可以有多条不同路径了,其中包括:Switch 6→Switch 3→Switch 1,Switch 6→Switch 3→Switch 4→Switch 1,Switch 6→Switch 3→Switch 4→Switch 5→Switch 2→Switch 1这三条。这样一来,当从Switch 6发送一个请求数据包到Switch 1时,就可能从以上三条路径中同时流出,显然这不是必要的,给网络带来了不必要的网络流量压力。本示例还只是一个很简单的结构,如果结构更复杂的话,冗余连接会更多,对应的冗余链路也就是更多,所带来的广播风暴将更大。

  (点击查看大图)图9-5  冗余连接设计示例

除了广播风暴的影响外,这么多冗余链路还可能形成网络环路,造成数据发送和接收死循环。同样以图9-5为例。在以上三条路径中,如果不加修剪,从Switch 1上发送到Switch 6的数据包,可能就不会到达Switch 6,而是直接在Switch 1→Switch 3→Switch 4→Switch 1,或者Switch 1→Switch 4→Switch 3→Switch 1,或者Switch 1→Switch 2→Switch 5→Switch 4→Switch 1等多个封闭的环路上循环。

为了解决'广播风暴'和网络死循环这两个在二层数据网络中存在的主要弊端,IEEE(电机和电子工程师学会)在基于思科的STP技术基础上颁发了IEEE 802.1D协议标准。这种两种协议的本质其实是一样的,就是消除网络拓扑中任意两点之间可能存在的冗余路径,将两点之间存在的多条路经划分为'通信链路'和'备份链路'。并规定,数据的转发只在'通信链路'上进行,而'备份链路'只用于链路的侦听,只有在发现'通信链路径'失效时,才自动地将通信切换到'备份链路'上。

用于正常数据转发的'通信链路'往往是最短的路径,如上一示例中的'Switch 6→Switch 3→Switch 1'这条路径。但是,STP并不是全部禁用这些冗余链路,而只是在正常工作中让它们处于侦听状态,当活跃链路失效时才接替活跃链路的工作。这样就可以达到既不会因为冗余链路而形成广播风暴,也不会因为没有冗余链路而造成网络循环,降低网络的可用性。

现在的二层以太网交换机和三层以太网交换机采用了硬件电路的设计,保证了每个端口的独享带宽。这样一来,每个交换机都可以看成是一个多个拥有独立带宽端口的网桥,用户可以将它的每一个端口看作是一个独立的网桥端口,其二层的工作原理与网桥类似。为了实现在用户接入层、汇聚层甚至骨干层范围内的高可靠性,网络中关键的拓扑设计往往采用冗余链路的设计(参见图9-5),虽然也有其他的技术可以实现高效的网络收敛,但是大多数网络设计者还是采用了IEEE 802.1D 的方法,原因是生成树协议是一项简单而又成熟的网络自愈技术。

9.3.2 STP的基本功能和工作原理

9.3.2  STP的基本功能和工作原理

在网桥或交换机上运行的STP是与IEEE 802.1D标准具有类似功能的,但是它们是两种不同的链路层协议。因为IEEE 802.1D是以标准形式颁布的,所以应用更广,所有品牌的网络设备都可以支持,而STP是由思科开发的,所以仅在思科自身以及授权使用的品牌设备上使用。但就目前来看,两者几乎是一个统一体,没什么区分了,因为IEEE 802.1D几乎是等同采用思科STP的。

在网桥和交换机上部署STP的目的就是在你既想要有冗余链路,又要阻止环路的情形下阻止在网络中出现环路,最终达到降低广播风暴产生的可能(只能是可能,因为广播风暴不仅只有网络环路才能发生,还可能是因为专门的广播包引起的),消除网络循环。有时,在网络设计中,特别是一些比较大型,同时可用性要求高的网络系统设计时,冗余的链路与网络中故障转移所需的备份同等重要。在主链路失效时,通过激活备份链路可以使得用户继续连接到网络。在网桥和交换机上不部署STP,这样的部署又可能造成网络环路出现。如果两个连接的交换机一个运行STP,另一个运行IEEE 802.1D,则它们需要不同的收敛计时器。

在如图9-6所示的网络示例中,在Switch A和Switch B之间存在一条冗余链路。但是这种部署可能会创建一个桥接环路。例如,从Station M(站点M)发出的一个到Station N(站点N)的广播或者多播包可能会在两个交换机之间循环。


但是,如果在两个交换机上运行了STP,则网络的逻辑结构就可看成图9-7所示。这时在Switch A和Switch B之间就只有一条路径,从Station M发出的一个到Station N的广播或者多播包就不会在两个交换机之间循环了,消除了网络环路。

为了提供所需的路径冗余,同时又可以避免环路发生,STP定义了一个延伸到网络中所有交换机的'树'(只是一种比喻说法,既表示了网络中各交换机的层次结构,又暗示网络中没有环路)。STP强迫冗余数据路径处于备用的阻塞状态,而使其他路径处于转发状态。如果处于转发状态的一条链路不可用,STP重新配置网络,并变更数据路径为备用路径
  

9.3.3 STP运作规则

9.3.3  STP运作规则

在STP中,网络中所有交换机的关键就是选择根网桥。网络中的其他确定,如哪个端口置于阻塞模式,哪个端口置于转发模式,都是需要依据根网桥才能确定的。在交换网络中,不同于桥接环境,更像多VLAN处理。一个交换网络中,在你执行根网桥时,通常是指定根网桥作为根交换机。每个VLAN必须有它自己的根网桥,因为每个VLAN是一个独立的广播域。不同VLAN的根网桥可以都是在一台交换机上,当然也可以在不同交换机上。

【说明】为特定VLAN进行根交换机选举非常重要。你可以选择根交换机,或者可以由网络中的交换机自己决定。如果不控制根交换机选举过程,可能在你的网络中会存在不适宜的路径。

所有交换机交换用于根交换机选举和以后网络配置的信息。BPDU承载了这些信息。每个交换机会比较本机发送到邻居交换机的BPDU和从邻居中接收到的BPDU中的参数。在STP根交换机选举过程中,参数值越小越好(优先级越高)。如果Switch A通告的根ID比Switch B通告的根ID小,则来自Switch A的信息就越好。Switch B停止它的根ID通告,接受Switch A的根ID通告。

生成树(ST)的工作方式是为交换机和端口分配角色,以确保在任何时刻交换网络中点与点之间只有一条路径。它所分配的端口角色包括根网桥(Root Bridge,RB)、指定网桥(Designated Bridge,DB)、根端口(Root Port,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角色选举

9.3.4  STP角色选举

当交换机第一次启动,开始了根交换机的选举过程。每个交换机基于每VLAN方式传递一个BPDU到直接连接的交换机上。因为BPDU是通过网络传递的,所以每个交换机会比较该交换机会把自己的BPDU与接收到的BPDU进行比较。然后交换机对哪台机成为根交换机达成一致意见。在网络中具有更低网桥ID的交换机将成为根交换机,赢得选举。

以上STP角色的选举基本过程如下:

(1)首先在整个交换网络中选举一个'根网桥'(RB),即选举一个根交换机。

每个交换网络中只能有一个网桥担当'根网桥'。它是通过比较网桥的BPDU(Bridge Protocol Data Unit,桥接协议数据单元)信息来选举的。在BPDU中包括了'网桥ID'(Bridge ID)。网桥ID包含2个字节的网桥优先级(Bridge Priority)和6个字节的MAC地址。'网桥ID'的数值越低,成为'根网桥'的概率也就越高。

(2)确定了'根网桥'后,网络中的其他交换机就为非根网桥了。此时再为所有'非根网桥'选举'根端口'(RP)。'根端口'可以发送和接收'配置BPDU',或者接收BPDU消息包。

'根端口'是'非根网桥'到'根网桥'的最佳路径所在端口,也即最低开销的路径(当然,直接连接的路径开销最小)。在每个'非根网桥'上选举一个'根端口',也就是'根端口'是针对'非根网桥'而言的,而不是在'根网桥'上,这一点最容易引起误会。

如果有多条等价路径(也就是此交换机到根网桥的路径中所经过的交换机跃点数是一样,也就是经过了相同数量的交换机),那么'非根网桥'先根据所直接连接的网桥的'网桥ID'来选择(不同交换机的'网桥ID'是不一样的),选择连接'网桥ID'最低的网桥的端口作为根端口;如果所连接的网桥的'网桥ID'都一样(也就是一个交换机与另一台交换机之间有两个或以上端口直接连接),则再根据所连网桥的'端口ID'(也就是端口号,每个端口的'端口ID'是不一样的)最低的那个端口作为'根端口'。

【说明】要显示交换机上各VLAN中网桥ID中的网桥优先级和MAC地址值,可以使用show spanning-tree命令查看。它是用来查看交换机上生成树配置的。

(3)在各个网段(星型网络对应于一个交换机端口,而总线型网络则对应于一条总线)中选举一个'指定端口'(DP)。'指定端口'所在的交换机就是'指定网桥'(Designated Bridge,DB,也即'指定交换机')。

'指定端口'是相应网段所有端口中到达'根网桥'的路径开销最低的端口。在'根网桥'上,所有的端口都为'指定端口',因为它们各自所代表的网段中,到达'根网桥'的路径为0(就在'根网桥'交换机上),当然最小了。但是并不是说'指定端口'只是在'根网桥'上,'非根网桥'上也有,只是在一个网段中只能有一个'指定端口'。'指定端口'不仅能够发送和接收流量,还可以发送和接收配置消息或BPDU(BPDU的发送仅针对'根网桥'之上的'指定端口')。

(4)最后,STP封堵所有'非指定端口'。

在STP中,除了'根端口'和'指定端口'外的交换端口都属于'非指定端口'。'非指定端口'是处于阻塞状态的,不能接收和发送配置信息和BPDU。

【说明】'网桥'连接的是不同网段的设备,而早期的'集线器',或者'中继器'所连接的不是不同网段,而同一网段(或者说是同一冲突域)的设备,因为网桥的两个端口不是共享介质的,而集线器或者中继器各端口是共享介质的。而交换机可以看成是一个具有多个端口的网桥,每个端口都具有桥接功能。这样一来,也就可以这么理解,由同一网桥或者交换机端口(其实路由器中的LAN端口也一样)连接的设备就属于一个网段。在星型以太网中,最常见的就是按交换机来划分网段的,一个交换机(根交换机除外)代表一个网段,因为它上面各端口所连接设备到根交换机的通信都是共享一条介质的。但它与下级交换机的连接又可根据不同端口划分不同的网段,因为它可以连接多个下级交换机。在总线型网络中,一条总线上连接的设备都属于一个网段,HUB上连接的也属同一个网段,但HUB的各端口不能再分网段,因为它们是共享介质的。

通过以上端口角色的分配,就可以确保在同一时刻,只能一条性能最佳的链路(最佳路径)为活跃的(每个网络中只有一个根网桥,每个网段上只有一个指定端口,而每个非根网桥只有一个根端口),其他冗余路径都处于阻塞状态。

也可以这么简单理解,就是在STP算法中,活跃链路只包括:根网桥上的'指定端口'--网段中的'指定端口'--非根网桥的'根端口'。所有包括非指定端口的链路都是阻塞的。在如图9-8所示的示例中,根网桥(Switch X)上的两个端口都是'指定端口',非根网桥(Switch Y)的一个端口为'根端口',另一个端口为'非指定端口',因为在网段1和网段2中已有一个指定端口了,所以不能再在连接同一个网段的交换机上指定某个端口为'指定端口'。

  (点击查看大图)图9-8  端口角色选举示例


  

9.4.1 STP端口状态概述

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个状态转变的。

当你启用了STP,在设备开启电源后,每个端口和网络都要经历阻塞、侦听、学习这类的过渡状态。如果有适当的配置,每个二层LAN端口最终会稳定到转发或者禁用状态。图中的实线流程表示一个基本的状态转变过程,虚线流程表示在实际的端口状态转变过程中可能发生的状态转变过程。

当STP算法把一个二层LAN端口置于转发状态,将发生以下过程:

(1)当二层LAN端口等待协议信息时置于侦听状态,建议置于阻塞状态。

(2)二层LAN端口等待转发延时(Forward delay,此步包括由侦听状态到学习状态所需经历的等待时间)到期,转变这个二层LAN端口为学习状态,并重置转发延时计数器(Forward delay timer)。

(3)在学习状态下,这个二层LAN端口继续阻止帧转发,以便它可以从转发数据库中学习到终端位置信息。

(4)这个二层LAN端口再次等待转发延时(此步是由学习状态到转发状态所需经历的等待时间)到期,然后转变为转发状态,此时,学习和转发这两种状态是同时启用的。

从以上流程可以看出,在整个端口状态转变中,一个端口由初始的阻塞状态到转发状态是需要经过两个转发延时周期的,效率比较低。这是STP最大的不足,也就是它最终被RSTP(快速生成树协议)取代的一个重要原因。

以下各节会具体介绍以上5种端口状态。


9.4.2 阻塞状态

9.4.2  阻塞状态

处于阻塞状态的二层LAN端口不参与帧的转发,图9-10显示了一个处于阻塞状态的二层LAN端口(Port 2)。初始化后,会有一个CBPDU发送到每个二层LAN端口上的。网络设备在与其他网络设备交换CBPDU之前,最初都是假设自己为根的。交换CBPDU后就可以确定网络中哪个设备可作为根或根网桥。如果在网络中仅有一个设备,则不会有CBPDU交换过程,在转发延时到期后,端口就会转变为侦听状态。一个端口在初始化时,总是先置于阻塞状态的。

一个处于阻塞状态的二层LAN端口可以执行以下任务:

丢弃从所在网段中接收到的帧。

丢弃与其他转发端口交换的帧。

不把终端站点位置信息添加到地址数据库中(因为在阻塞状态的二层LAN端口中不具备学习功能,所以不能进行数据库更新)。

接收BPDU,并把它们直接传到系统模块(System Module)中。

不传输从系统模块中接收到的BPDU。

接收和响应网络管理消息。




9.4.3 侦听状态

9.4.3  侦听状态侦听状态是二层LAN端口自阻塞状态后进入的一个过渡状态。当STP确定这个二层LAN端口应当参与帧转发时,就进入到侦听状态。图9-11显示了一个处于侦听状态的二层LAN端口(Port 2)。 图9-11  处于侦听状态的端口可执行任务示意图一个处于侦听状态的二层LAN端口可以执行以下任务:丢弃从所在网段中接收到的帧。丢弃与其他转发端口交换的帧。不把终端站点位置信息添加到地址数据库中(因为在侦听状态的二层LAN端口中不具备学习功能,所以不能进行数据库更新)。接收BPDU,并把它们直接传到系统模块中。接收、处理和传输从系统模块中接收到的BPDU。接收和响应网络管理消息。

9.4.4 学习状态

9.4.4  学习状态处于学习状态的二层LAN端口准备参与帧转发。它是从侦听状态进入到这个学习状态的,图9-12显示了一个处于学习状态的二层LAN端口(Port 2)。一个处于学习状态的二层LAN端口可以执行以下任务:丢弃从所在网段中接收到的帧。丢弃与其他转发端口交换的帧。把终端站点位置信息添加到地址数据库中。接收BPDU,并把它们直接传到系统模块中。接收、处理和传输从系统模块中接收到的BPDU。接收和响应网络管理消息。 图9-12  处于学习状态的端口可执行任务示意图

9.4.5 转发状态

9.4.5  转发状态处于转发状态的二层LAN端口可以正式转发帧了,如图9-13显示了一个处于转发状态的二层LAN端口(Port 2)。二层LAN端口是从学习状态进入到转发状态的。 图9-13  处于转发状态的端口可执行任务示意图一个处于转发状态的二层LAN端口可以执行以下任务:转发从所在网段中接收到的帧。转发与其他转发端口交换的帧。把终端站点位置信息添加到地址数据库中。接收BPDU,并把它们直接传到系统模块中。处理从系统模块中传递的BPDU。接收和响应网络管理消息。

9.4.6 禁用状态

9.4.6  禁用状态

处于禁用状态的二层LAN端口不参与帧转发或者STP,如图9-14所示显示了一个处于禁用状态的二层LAN端口(Port 2)。事实上,这种把二层端口置于禁用状态的行为是不建议的,因为这相当于一种浪费。

一个处于禁用状态的二层LAN端口会执行以下任务:

丢弃从所在网段中接收到的帧。

丢弃与其他转发端口交换的帧。

不把终端站点位置信息添加到地址数据库中(因为在禁用状态的二层LAN端口中不具备学习功能,所以不能进行数据库更新)。

不接收BPDU。

不接收系统模块中传递的BPDU。


 

9.5.1 RSTP概述

9.5  理解RSTP

RSTP(Rapid Spanning Tree Protocol,快速生成树协议)是在IEEE 802.1W标准中定义的,是基于IEEE 802.1D的STP技术而提出的。它解决的就是STP技术中网络收敛速度不够快的不足。但基本工作原理与STP还是基本一样的,只是在端口角色和状态定义上有所改变,以便加速网络收敛速度。

9.5.1  RSTP概述

RSTP与前面介绍的STP类似,是通过快速生成树算法在交换网络中阻断部分冗余路径,建立起无环路的树状网络RSTP所采用的快速生成树算法与生成树算法一样,也是一个分布式算法。RSTP运行在一个桥接网络中的所有网桥(或者交换机)上,负责为该桥接网络计算出简单连通的树形活跃拓扑结构(Active Topology)。计算时也是先选择一个网桥作为树根(即'根网桥'),同时为所有网桥的所有端口指定角色。

与STP相比,RSTP算法基本和IEEE 802.1D标准中定义的STP算法一致,唯一不同的是RSTP解决了STP算法对任何端口只要从Blocking(阻塞)状态迁移到Forwarding(转发)状态必须经过2倍Forward-Delay(包括由侦听状态到学习状态的等待时间和由学习状态到转发状态的等待时间)时间的缺点。它利用点对点连接,针对各种端口在拓扑结构中角色的不同,对某些端口实现了从Blocking状态到Forwarding状态的瞬间迁移或快速迁移,提供快速地生成树收敛,可以少于1秒的时间内重新配置生成树(在802.1D生成树中默认是50秒)。

RSTP在STP基础上做了以下3个重要改进(也是RSTP的主要优势),使得收敛速度快得多(最快1秒以内)。

(1)为'根端口'和'指定端口'设置了快速切换用的'替换端口'(Alternate Port)和'备份端口'(Backup Port)两种角色。当'根端口'和'指定端口'失效时,'替换端口'和'备份端口'就会无时延地进入转发状态。有关RSTP的端口状态将在下节具体介绍。

(2)在只连接了两个交换端口的点对点链路中,'指定端口'只需与下级网桥进行一次握手就可以无时延地进入转发状态。但如果是连接了三个以上网桥的共享链路,下级网桥是不会响应上级'指定端口'发出的握手请求的,也只能像STP一样等待两倍'Forward Delay'时间才能进入转发状态。

(3)把直接与终端相连而不是与其他网桥相连的端口定义为'边缘端口'(Edge Port)。'边缘端口'可以直接进入转发状态,不需要任何延时。但由于网桥无法知道端口是否是直接与终端相连,所以需要人工配置。

由上可见,RSTP协议相对于STP协议的改进主要体现在端口状态上。为了支持这些改进,BPDU的格式做了一些修改,但RSTP协议仍然向下兼容STP协议,可以混合组网。虽然如此,RSTP和STP一样同属于单生成树SST(Single Spanning-Tree),所以它仍具有它自身的以下不足:

(1)由于整个交换网络只有一棵生成树,在网络规模比较大的时候会导致较长的收敛时间,拓扑改变的影响面也较大。

(2)在网络结构不对称的时候,单生成树就会影响网络的连通性。

(3)当链路被阻塞后将不承载任何流量,造成了带宽的极大浪费,这在环形城域网的情况下比较明显。

这些缺陷都是单生成树SST无法克服的,于是支持VLAN的多生成树(MST)协议出现了。



9.5.2 RSTP端口角色和拓扑结构

9.5.2  RSTP端口角色和拓扑结构

RSTP通过分配端口角色和学习动态拓扑结构提供快速生成树收敛。RSTP依赖802.1D STP选举具有最高优先权(优先权数字最小的那个)的交换机担当'根网桥'。RSTP根据端口在活动拓扑中的作用,定义了5种端口角色(STP只有3种角色):禁用端口(Disabled Port)、根端口(Root Port)、指定端口(Designated Port)、为支持RSTP的快速特性规定的替代端口(Alternate Port)和备份端口(Backup Port)。具体如下:

根端口(Root Port):这是STP中就有的一种端口角色。当交换机转发包到根网桥时,'根端口'可以提供最小的路径开销(Path Cost)。

指定端口(Designated Port):这也是STP中就有的一种端口角色。该类端口连接到指定的交换机,在从该交换机上转发来自LAN中的包到'根网桥'时,该端口可以提供最小的路径开销。通过指定交换机与LAN连接的端口称之为'指定端口'。与STP一样,每个网段内必须有一个指定端口。'根网桥'上的端口都是'指定端口',但非根网帮中也可以有指定端口,这与STP中的'指定端口'是一样的。

替代端口(Alternate Port):这是RSTP特有的一种端口角色。该类端口为当前'根端口'到'根网桥'提供一条替代路径。

备份端口(Backup Port):这是RSTP特有的一种端口角色。该类端口为'指定端口'到达生成树叶提供一条备份路径。'备份端口'仅当两个端口在一个由一个点对点链路组成的环路上连接时,或者当交换机有两个或多个到达共享LAN网段的连接时可以存在。

禁用端口(Disabled Port):这也是STP中就有的一种端口角色。该类端口在生成树操作中没有担当任何角色,不参与RSTP运算。

一个具有根或指定角色的端口是包括在活跃拓扑结构中的,而一个具有交替或备份角色的端口是不在活跃拓扑结构之中的。

在一个有一致端口角色的稳定拓扑结构中,RSTP会确保根和指定端口立即转变为转发状态,而同时交替和备份端口总是处于丢弃状态(相当于802.1D中的阻塞状态)。端口状态控制了转发和学习进程的控制。表9-1提供了802.1D STP和RSTP所包含的端口状态比较。

表9-1  STP和RSTP所包含的端口状态比较

运作情形

STP端口状态
IEEE 802.1D

端口状态)

RSTP端口状态
IEEE 802.1W

端口状态)

是否包括在活跃
拓扑结构中

Enabled(启用)

Blocking(阻塞)

Discarding(丢弃)

No

Enabled(启用)

Listening(侦听)

Discarding(丢弃)

No

Enabled(启用)

Learning(学习)

Learning(学习)

Yes

Enabled(启用)

Forwarding(转发)

Forwarding(转发)

Yes

Disabled(禁止)

Disabled(禁用)

Discarding(丢弃)

No

运作情形

STP端口状态
IEEE 802.1D

端口状态)

RSTP端口状态
IEEE 802.1W

端口状态)

是否包括在活跃
拓扑结构中

Enabled(启用)

Blocking(阻塞)

Discarding(丢弃)

No

Enabled(启用)

Listening(侦听)

Discarding(丢弃)

No

Enabled(启用)

Learning(学习)

Learning(学习)

Yes

Enabled(启用)

Forwarding(转发)

Forwarding(转发)

Yes

Disabled(禁止)

Disabled(禁用)

Discarding(丢弃)

No

由以上可以看出,RSTP只有3种端口状态:Discarding(丢弃)、Leaning(学习)和Forwarding(转发),它把STP中的Blocking(阻塞)、Listening(侦听)和Disabled(禁用)统一用一种状态--Discarding(丢弃)替代。这样一来的好处就是一个端口从初始状态转变为转发状态只需要一个转发延时周期时间,也就是从学习状态到转发状态所需等待的时间。在活跃拓扑结构中,只有'学习'和'转发'这两种状态的端口。

9.5.3 RSTP的快速收敛原理

9.5.3  RSTP的快速收敛原理

RSTP可以在一个交换机,或者一个交换端口,甚至一个VLAN失效时快速恢复网络的连通性。所采用的机制就是'建议-同意握手'(proposal-agreement handshake)机制。它为以下边缘端口、新的根端口,以及通过点到点链路而连接的端口提供了快速收敛:

边缘端口(Edge port):'边缘端口'是直接连接终端站点的网桥端口。如果在一个RSTP交换机上通过使用spanning-tree portfast接口配置命令把一个端口配置为边缘端口,则这个边缘端口会立即转变为转发状态。一个边缘端口同时作为一个启用了端口快速(PortFast)功能的端口,应当在它仅与单一终端站点连接时启用它。

根端口(Root Port):如果RSTP选举一个新的根端口,它将阻塞旧的根端口,并且立即转变这个新的根端口为转发状态。

点对点链接(Point-to-point Link):如果你通过一个点对点链路把一个端口与另一个端口连接起来,并且本地端口成为指定端口,则该端口将使用'建议-同意握手'机制与其他端口进行协商,以确保有一个可用的环路。

图9-15是一个RSTP端口角色转换示例,在图中的DP为'指定端口',RP为'根端口',F代表相应端口处于转发状态。

在图(1)中,Switch A是通过一个点对点链路与Switch B连接的,并且所有端口是处于阻塞状态的。假设Switch A的优先权高于Switch B,所以Switch A成为'根网桥'。Switch A先通过它的一个'指定端口'(根网桥上的端口都是'指定端口')发送一个建议消息(一个配置有建议标记设置的BPDU)到Switch B,建议由它自己作为指定交换机。

在Switch B收到这条建议消息(Proposal Message)后,它就会选举接收这条建议消息的端口作为它的新根端口(如图(2)所示),强迫所有非边缘端口置于阻塞状态,并通过这个新的根端口发送一个同意消息(Agreement Message,一个配置有同意标记设置的BPDU),如图(2)所示。

在Switch A接收到了Switch B发来的同意消息后,立即转变连接的两个端口为转发状态。因为Switch B阻止了它上面的所有非边缘端口,在Switch A和Switch B之间就成了一条点对点链路,这样一来在网络中不会形成环路。

当Switch C再与Switch B连接时,同样会存在像Switch A与Switch B之间的握手消息交换。Switch C首先通过接收从中得来的建议消息,选举与Switch B连接的端口作为它的根端口,如图(3)所示。然后Switch C向Switch B发送一条同意消息,在Switch B收到这条同意消息后,就把连接Switch C与Switch B的这两个端口立即转变为转发状态。

在新交换机加入到这个活跃的拓扑结构中时,会重复以上的握手过程。作为网络汇聚,这个'建议-同意'握手进程是从根网桥指向生成树叶(也是生成树的最末端)的,一级级进行。

交换机从端口双工模式中学习到链路类型:一个全双工模式端口被认为具有一个点对点连接,半双工模式的端口被认为具有一个共享的连接。可以通过使用spanning-tree link-type接口配置命令进行的默认双工设置。


9.5.4 RSTP端口角色同步原理

9.5.4  RSTP端口角色同步原理

这里同样以一个示例进行介绍,如图9-16所示。当一个交换机一个端口上接收到一个建议消息(Proposal Message)时,这个端口就被选举为新的'根端口',如图9-16中的1、6、7。RSTP强迫所有其他端口与这个新的'根端口'信息同步(本节所讲的'同步'是指'根端口'信息的同步,因为一台交换机上只能有一个'根端口')。如果所有其他端口是同步的,则交换机使用在'根端口'上接收到的上级根信息进行同步,但以下类型端口是不在同步之列的:

处于阻塞状态的端口

边缘端口(配置在边缘网络中)

如果一个'指定端口'是在转发状态,而不是配置为'边缘端口',在RSTP强迫与新的根信息同步时,同时转变该端口将为阻塞状态,如图中的2和3。通常,在RSTP强迫一个端口去与根信息同步,而端口并不信任根信息中的环境时,该端口将转变为阻塞状态。

在确保所有端口(除阻塞端口状态端口和边缘端口外)同步后,交换机会在其'根端口'上发送一个建议消息(Agreement Message)到与之相连的交换机上的'指定端口'上,如图中的4、8、10。当通过点对点链路进行连接的交换机在端口角色方面达成一致时,RSTP立即转变点对点链路上的交换机端口为转发状态,如图中的5、9、11。也就是原来是阻塞状态的端口可以通过一次握手协商立即转变为转发状态,不要再经过由阻塞状态到侦听状态,再由侦听状态到学习状态,最后由学习状态到转发状态这三次握手过程。整个过程由STP中的两倍转发延时变为一个转发延时了。这也就是'快速生成树协议'中'快速'的真正含义了。

9.6.1 MST概述

9.6  理解MSTP

前面介绍的STP和RSTP都是针对单一生成树实例进行应用的。由于单生成树实例是每个实例对应一个VLAN,这样一来不仅生成树实例可能会非常多,难以管理,还没有一个容错机制,容易出现单点失效。

按照PVST、PVST+等协议的规则,就应该每个VLAN一个生成树,而且是每隔2秒就会发送一个BPDU。这对于一个有着上千个VLAN的网络来说,一方面这么多生成树维护起来比较困难,另一方面,为每个VLAN每隔2秒就发送一个BPDU,交换机也是难以承受的。为了解决这一问题,Cisco就开发新的生成树技术--MST。

MSTP(Multiple Spanning Tree Protocol,多生成树协议)就是对网络中众多的VLAN进行分组,一些VLAN分到一个组里,另外一些VLAN分到另外一个组里。这里的'组'就是后面讲的MST实例(Instance)。每个实例一个生成树,BPDU是只对实例进行发送的,这样就可以既达到了负载均衡,又没有浪费带宽,因为不是每个VLAN一个生成树,这样所发送的BPDU数量明显减少了。

9.6.1  MST概述

【注意】并不是所有的Cisco以太网交换机都支持MSTP,如运行Cisco IOS 12.1(14)EA1以前版本的Catalyst 3750、Catalyst 2950等早期系列交换机就不支持MST。

MSTP对应的标准是IEEE 802.1S。MSTP把IEEE 802.1W标准中的RSTP(Rapid Spanning Tree  Protocol,快速生成树协议)算法扩展到多生成树,在为多VLAN环境提供了快速收敛的同时也实现了负载均衡的功能。MST比PVST+(对应IEEE 802.1D标准)收敛快,并且和802.1D、802.1W生成树,以及PVST+结构兼容。

MSTP允许通过中继来构建多个生成树,可以组合和关联多个VLAN到生成树实例(Spanning Tree Instance,SPI)。每个实例可以有一个独立于其他生成树实例的拓扑结构。这种新的架构为数据通信和负载均衡提供了多个转发路径。也提供了网络容错机制,因为一个实例(也就是一个转发路径)的失效不会影响其他实例。

在大型的网络中,你可以轻易地管理网络,并且通过定位于不同VLAN的冗余路径使用冗余路径,为网络中的不同部分分配生成树实例。生成树实例仅可以在兼容VLAN实例的网桥设备中存在。你必须为网络中的网桥设备配置相同的MST配置信息,以使它们参与到指定的的生成树实例中。具有相同MST配置,相互连接的网桥是指MST区域。

MSTP具有如下特性:

(1)MSTP运行的生成树变量称之为IST(Internal Spanning Tree,内部生成树)。

IST通过添加MST区域中的内部信息而增加了CST(Common Spanning Tree,公共生成树)信息。MST表现为一个单一网桥到邻接的单生成树(Single Spanning Tree,SST)和MST区域。有关IST、CIST、CST的关系将在后面小节中介绍。

(2)一个运行MSTP的网桥会按照以下方式提供与单生成树桥的互操作性:

MST网桥运行IST,IST用有关MST区域的内部信息来增加CST的信息。

IST连接区域中的所有MST网桥,并且是表现为包括整个桥接域的CST中的一个子树。MST区域表现为与邻接的SST网桥和MST区域的虚拟桥接。

CIST(Common and Internal Spanning Tree,公共和内部生成树)是每个MST区域中的内部生成树(IST)、互连MST区域的CST和SST桥接的集合。STP、RSTP和MSTP共同选举一个单独网桥来做为CIST的根网桥。

(3)MSTP在每个MST区域内部建立和维护额外的生成树。

这些生成树就是指MST实例(MST Instance,MSTI)。IST的实例号为0,MSTI的实例号为1、2、3等。任何MSTI都是位于MST区域内部,与另一个MST区域的MSTI无关,即使这两个MST区域是相互连接的MSTI的生成树信息包含在MSTP记录(M-record)中。MSTP记录总是封装在MST的BPDU中。由MSTP计算的原始生成树叫做M树(M-tree),M树只在MST区域内部活跃。M树和位于MST区域边界IST合并形成CST。

(4)通过为非CST VLAN产生的PVST+ BPDU,MST提供与PVST+的互操作性。

(5)MST支持PVST+的以下一些扩展:

在MST模式中UplinkFast和BackboneFast特性无效,但在RSTP中支持这些特性。

支持PortFast特性。

在MST模式中支持BPDU过滤(BPDUFilter)和BPDU保护(BPDU Guard)。

在MST模式中支持环路保护(Loop Guard)和根保护(Root Guard)特性。

对于私有VLAN(Private VLAN),从VLAN必须和主VLAN映射到同一个实例。

MSTP常应用于骨干和分布式的二层交换网络中。这种部署在服务提供商环境中提供了一种高可用性。MSTP通过消除802.1D协议中的转发延时,快速转变根网桥端口和指定端口成为转发状态的这种内在握手机制来加快生成树的收敛。

MSTP改善了生成树操作,并保持与以下STP版本兼容:

以前的802.1D生成树

现存的Cisco专用的MISTP(Multiple Instance STP,多实例生成树协议)

现存的增强型Cisco每VLAN生成树协议(PVST+)

增强型快速每VLAN生成树(Rapid-PVST+)

【说明】在MST中涉及许多术语,如MST区域、IST、CIST、CST、MSTI等。理解并区分这些术语对于理解MST工作原理非常重要。所以下面分别对以上这些术语进行具体解释。



9.6.2 MST区域

9.6.2  MST区域

为了使交换机参与MST实例,必须在交换机中始终配置相同的MST配置信息。相同MST配置的互联交换机包含一个MST区域(MST region),如图9-17所示。

MST配置控制每个交换机属于哪个MST区域。其配置包括区域名称、版本号和MST VLAN到实例的分配映射。

一个区域有一个或多个具有相同MST配置的成员,每个成员都必须能处理RSTP BPDU。一个网络的MST区域中的成员数是没有限制的,但是每个区域最多只支持65个生成树实例(是在IOS 12.25XH及以上版本时),也就是说最多有65个VLAN组。实例可以由一个0~4094范围中的任一数字标识。你可以分配一个VLAN在同一时刻仅属于一个生成树实例中。

要形成一个MST区域,网桥可以是以下任意一种情形:

一个MST网桥仅是一个MST区域成员。

通过一个局域网互联MST网桥。一个局域网中的'指定网桥'具有与MST网桥相同的MST配置。局域网中的所有网桥都可以处理MST BPDU。

如果你连接两个具有不同MST配置的MST区域,MST区域进行如下操作:

通过网络中的冗余路径提供负载均衡。如果两个MST区域是冗余连接的,但在同一时刻,在网络MST区域中的所有通信流都在单一连接上传输。

提供RSTP握手,以启用在MST区域间的快速收敛。但是这种握手机制不及两个网桥间的收敛速度快。为了阻止环路,所有区域中的网桥必须统一与其他区域中的连接,这样就可以减少延时。不建议分割网络为多个区域。

1.边界端口

一个边界端口(Boundary Port)就是连接一个局域网、一个SST网桥,或者一个不同MST区域中的一个'指定网桥'的端口。如果检测到一个STP网桥,或者接收到一个来自一个RST或者具有不同配置的MST网桥上的同意消息,则可识别该端口为'指定端口'。

在边界端口中,与MST端口角色无关。它们的状态强制与IST端口状态一致。如果端口设置了边界标记,MSTP端口角色选择一种方法为边界分配端口角色,并且分配与IST端口相同的状态。在边界中的IST端口可以是除了备份端口角色外的任何角色。

在Cisco预标准中,一个边界端口是连接一个MST区域到以下这些STP区域之一:

一个运行RSTP的单生成树区域

一个运行PVST+或者PVST+的单生成树区域

另一个具有不同MST配置的MST区域

一个边缘端口也可以连接一个局域网,指定的交换机可以是一个单生成树交换机,或者是一个具有不同MST配置的交换机。

在802.1S标准中没有定义边界端口。802.1Q-2002标准定义了一个端口可以接收的两种消息类型:内部消息(来自同一个区域中的消息)和外部消息。当是外部消息时,仅可以由CIST接收。如果这个CIST角色或根或者交替交换机,或者外部BPDU是拓扑结构改变消息,则可能会在MST实例中出现冲突。当是内部消息时,属于CIST部分的则由CIST接收,每个MST实例接收它自己的M记录(M-record)。

2.IST主

这是IEEE 802.1S预标准中的概念。注意:在最后的版本中是没有'IST主'这个说法的。在最后版本中,是以'CIST区域根'替代的。

一个MST区域的IST主是具有最低网桥ID和具有到达CST根网桥的最低路径开销的网桥。如果MST网桥是CST根网桥,则就是MST区域的IST主。如果CST根网桥在MST区域外部,则位于边界的一个MST网桥被选举为IST主。其他位于边界的网桥属于同一个区域,以阻止这些指向CST根网桥的边界端口的通信。

如果区域边界中的两个或多个网桥具有相同的路径到达CST根网桥,可以设置一个更低网桥优先级值的网桥作为IST主。

 



9.6.3 IST、CST和CIST

9.6.3  IST、CST和CIST

本节将介绍的IST、CIST和CST这几个术语。

1.IST、CST和CIST概述

与其他生成树协议中所有生成树实例都是独立的不同,MST建立和维护如IST、CST和CIST这样既有独立性一面,又可以有相互关联的多种生成树实例。

IST(Internal Spanning Tree,内部生成树)是MST区域中的一个生成树实例。在每个MST区域内部,MST维护着多个生成树实例。实例0是一个特殊的实例(其实可以与VLAN 1类比,VLAN 1是交换机默认的管理VLAN,也是交换机默认的本地VLAN),那就是此处所说的IST。所有其他MST实例号只能在1~4094之间,也可以把IST看成是每个MST区域的外在表现。默认情况下,所有VLAN是分配到IST实例中的。

IST是仅发送和接收BPDU的生成树实例,所有其他生成树实例信息是包含在MST记录(MSTP record,又称'M记录')中,是用MST BPDU进行封装的。因为MST BPDU携带了所有实例信息,这样在支持多个生成树实例时所需要处理的BPDU数量就会大大减少。

在同一个MST区域中的所有MST实例共享相同的协议计时器,但是每个MST实例有它们自己的拓扑结构参数,例如根网桥ID、根路径开销等。但是,一个MST实例是与所在区域相关的,例如,区域A中的MST实例1与在区域B中的MST实例1是无关的,即使区域A和区域B是互联的。

CST(Common Spanning Tree,公共生成树)是用来互联MST区域的单生成树。如果把每个MST区域看作是一个'设备',CST就是这些'设备'通过STP协议、RSTP协议计算生成的一棵生成树。在每个MST区域中计算出的生成树都是作为包含整个交换域的CST的子树出现的。

CIST(Common and Internal Spanning Tree,公共和内部生成树)是连接一个交换网络内所有设备的单生成树,由IST和CST共同构成。

由上可知,从包含的范围来看,IST是最小的,仅属于一个MST区域内部,CST次之,则是MST区域间的互联生成树实例,而CIST则最大,包括了IST和CST。

除了IST、CST和CIST外,还有以下几个术语:

MSTI:一个MST域内可以通过MSTP算法生成多棵生成树,各棵生成树之间彼此独立。每棵生成树都称为一个MSTI(Multiple Spanning Tree Instance,多生成树实例)。

区域根网桥(Region Root Bridge):MST域内MSTI的根桥就是域根。MST域内各棵生成树的拓扑不同,区域根也可能不同,也称之为'MST区域根'。

公共根网桥(Common Root Bridge):是指CIST的根桥,也就是整个网络中的根网桥,也称为'CIST区域根'。

2.在一个MST区域内的生成树操作

当IST时,IST的根成为CIST最初的根(称为执行IEEE 802.1S 预标准中的'IST主'),如图9-17所示。如果在网络中只有一个区域的话,'CIST区域根'也称为'CST根'。如果CIST中超出了某个区域,则在这个区域中的一台骨干MST交换机会被选举成为CIST区域根。

当一个MST交换机初始化时,它发送标识自己为CIST根和CIST区域根的BPDU,BPDU中到达CIST根和CIST区域根的路径开销为0。交换机也初始化所有它自己的MST实例和作为根的主张。如果交换机接收到一个比当前端口上存储的具有更高级的MST根信息(也就是具有更低交换机ID、更低路径开销等)时,该交换机就会放弃作为CIST区域根的主张。

在初始化过程中,一个区域可能有多个子区域,每个子区域拥有它自己的CIST区域根。当交换机接收到来自同一个区域中的邻居交换机的更高IST信息时,它们会离开其原来的子区域,加入到新的包含真正CIST区域根的子区域中。这样一来就会导致所有子区域会缩减,除了那个包含真正CIST区域根的子区域。

正确的操作是所有在MST区域中的交换机必须与同一CIST区域根保持一致。这样一来,区域中的任何两台交换机,如果要聚合成一个公用CIST区域根,则仅需要对一个MST实例同步它们的端口角色。

3.在MST区域间的生成树操作

如果在一个网络中有多个MST区域,或者802.1D交换机,MST建立和维护着网络中包括所有MST区域和所有802.1D STP交换机的CST。MST实例是与区域边界的IST组合,形成CST。

IST连接着一个区域中的所有MST交换机,并且是作为整个交换域中CIST的子树表现的。子树的根是CIST区域根。MST区域的表现形式就是作为邻接STP交换机和MST区域的虚拟网桥,也就是一个虚拟的网桥设备。

图5-25显示了一个具有三个MST区域(A、B、C结点)和一个802.1D交换机(D结点)的网络。MST区域1的CIST区域根也是CST根,MST区域2和MST区域3中的CIST区域根是CIST内各自子树的根。

只有CST实例发送和接收BPDU,MST实例添加它们的生成树信息到BPDU中,以便与邻居交换机连接,并计算出最后的生成树拓扑结构。这样一来,凡是涉及BPDU传播的生成树参数(如hello时间、转发时间、最长寿命、最大跳数等)仅在CST实例上配置,但是会影响到所有MST实例。涉及生成树拓扑结构的参数(如交换机优先权、端口VLAN开销和端口VLAN优先权等)则可以在CST实例和MST实例中配置。

MST交换机使用版本3的BPDU或者802.1D STP BPDU来与802.1D交换机通信。MST交换机使用MST BPDU与MST交换机通信。

4.IEEE 802.1S术语

在以前执行的标准中有一些命名协定已更改,包括一些internal和regional参数。这些参数仅用于MST区域内部,区别于应用于跨越整个网络中的那些参数。因为CIST仅是整个网络的生成树实例,仅CIST参数需要外部限定,而不是内部或区域限定。

CIST根(CIST root)是CIST的根网桥,它是跨越整个网络的唯一实例。

CIST外部根路径开销(CIST external root path cost)是到CIST根的开销。这个开销在一个MST区域中是保持不变的。MST中的成员,对CIST看来像单一交换机。CIST外部根路径开销是根据这些虚拟交换机和不属于任何区域的交换机之间的根路径开销计算的。

CIST区域根(CIST regional root)在IEEE 802.1s预标准中被称之为'IST主'(IST master)。如果CST根是在区域中,'CIST区域根'就是'CIST根'。否则,'CIST区域根'是到达'CIST根'最近的交换机。'CIST区域根'是作为IST的根交换机。

CIST内部根路径开销(CIST internal root path cost)是一个区域中交换机到达CIST区域根的开销。这个开销仅与IST(实例0)有关。

表9-2是IEEE标准和Cisco预标准术语的比较。

表9-2  预标准与正式标准的术语比较