生成树Spanning Tree Protocol.docx
《生成树Spanning Tree Protocol.docx》由会员分享,可在线阅读,更多相关《生成树Spanning Tree Protocol.docx(11页珍藏版)》请在冰豆网上搜索。
生成树SpanningTreeProtocol
生成树(SpanningTreeProtocol)
1.STP的用途
STP(SpanningTreeProtocol,生成树协议)是根据IEEE协会制定的802.1D标准建立的,用于在局域网中消除数据链路层物理环路的协议。
运行该协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某些端口进行阻塞,最终将环路网络结构修剪成无环路的树型网络结构,从而防止报文在环路网络中不断增生和无限循环,避免设备由于重复接收相同的报文造成的报文处理能力下降的问题发生。
STP包含了两个含义,狭义的STP是指IEEE802.1D中定义的STP协议,广义的STP是指包括IEEE802.1D定义的STP协议以及各种在它的基础上经过改进的生成树协议。
2.STP的协议报文
STP采用的协议报文是BPDU(BridgeProtocolDataUnit,桥协议数据单元),也称为配置消息。
STP通过在设备之间传递BPDU来确定网络的拓扑结构。
BPDU中包含了足够的信息来保证设备完成生成树的计算过程。
BPDU在STP协议中分为两类:
◆ 配置BPDU(ConfigurationBPDU):
用来进行生成树计算和维护生成树拓扑的报文。
◆ TCNBPDU(TopologyChangeNotificationBPDU):
当拓扑结构发生变化时,用来通知相关设备网络拓扑结构发生变化的报文。
3.STP的基本概念
(1) 根桥
树形的网络结构,必须要有树根,于是STP引入了根桥(RootBridge)的概念。
根桥在全网中只有一个,而且根桥会根据网络拓扑的变化而改变,因此根桥并不是固定的。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其它的设备对该配置BPDU进行转发,从而保证拓扑的稳定。
(2) 根端口
所谓根端口,是指一个非根桥的设备上离根桥最近的端口。
根端口负责与根桥进行通信。
非根桥设备上有且只有一个根端口。
根桥上没有根端口。
(3) 指定桥与指定端口
指定桥与指定端口的含义,请参见表1的说明。
分类
指定桥
指定端口
对于一台设备而言
与本机直接相连并且负责向本机转发配置消息的设备
指定桥向本机转发配置消息的端口
对于一个局域网而言
负责向本网段转发配置消息的设备
指定桥向本网段转发配置消息的端口
表1指定桥与指定端口的含义
指定桥与指定端口如图1所示,AP1、AP2、BP1、BP2、CP1、CP2分别表示设备DeviceA、DeviceB、DeviceC的端口。
◆ DeviceA通过端口AP1向DeviceB转发配置消息,则DeviceB的指定桥就是DeviceA,指定端口就是DeviceA的端口AP1;
◆ 与局域网LAN相连的有两台设备:
DeviceB和DeviceC,如果DeviceB负责向LAN转发配置消息,则LAN的指定桥就是DeviceB,指定端口就是DeviceB的BP2。
图1指定桥与指定端口示意图
说明:
根桥上的所有端口都是指定端口。
(4) 路径开销
路径开销是STP协议用于选择链路的参考值。
STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树型网络结构。
4.STP的基本原理
STP通过在设备之间传递BPDU来确定网络的拓扑结构。
配置消息中包含了足够的信息来保证设备完成生成树的计算过程,其中包含的几个重要信息如下:
◆ 根桥ID:
由根桥的优先级和MAC地址组成;
◆ 根路径开销:
到根桥的最短路径开销;
◆ 指定桥ID:
由指定桥的优先级和MAC地址组成;
◆ 指定端口ID:
由指定端口的优先级和端口名称组成;
◆ 配置消息在网络中传播的生存期:
MessageAge;
◆ 配置消息在设备中能够保存的最大生存期:
MaxAge;
◆ 配置消息发送的周期:
HelloTime;
◆ 端口状态迁移的延时:
ForwardDelay。
说明:
为描述方便,在下面的描述及举例中仅考虑配置消息的其中四项内容:
◆ 根桥ID(以设备的优先级表示);
◆ 根路径开销;
◆ 指定桥ID(以设备的优先级表示);
◆ 指定端口ID(以端口名称表示)。
(1) STP算法实现的具体过程
◆ 初始状态
各台设备的各个端口在初始时会生成以自己为根桥的配置消息,根路径开销为0,指定桥ID为自身设备ID,指定端口为本端口。
◆ 最优配置消息的选择
各台设备都向外发送自己的配置消息,同时也会收到其它设备发送的配置消息。
最优配置消息的选择过程如表2所示。
表2最优配置消息的选择过程
步骤
内容
1
每个端口收到配置消息后的处理过程如下:
◆ 当端口收到的配置消息比本端口配置消息的优先级低时,设备会将接收到的配置消息丢弃,对该端口的配置消息不作任何处理。
◆ 当端口收到的配置消息比本端口配置消息的优先级高时,设备就用接收到的配置消息中的内容替换该端口的配置消息中的内容。
2
设备将所有端口的配置消息进行比较,选出最优的配置消息。
说明:
配置消息的比较原则如下:
◆ 根桥ID较小的配置消息优先级高;
◆ 若根桥ID相同,则比较根路径开销,比较方法为:
用配置消息中的根路径开销加上本端口对应的路径开销,假设两者之和为S,则S较小的配置消息优先级较高;
◆ 若根路径开销也相同,则依次比较指定桥ID、指定端口ID、接收该配置消息的端口ID等,上述值较小的配置消息优先级较高。
◆ 根桥的选择
网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。
通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
◆ 根端口、指定端口的选择
根端口、指定端口的选择过程如表3所示。
表3根端口和指定端口的选择过程
步骤
内容
1
非根桥设备将接收最优配置消息的那个端口定为根端口
2
设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:
◆ 根桥ID替换为根端口的配置消息的根桥ID;
◆ 根路径开销替换为根端口配置消息的根路径开销加上根端口对应的路径开销;
◆ 指定桥ID替换为自身设备的ID;
◆ 指定端口ID替换为自身端口ID。
3
设备使用计算出来的配置消息和需要确定端口角色的端口上的配置消息进行比较,并根据比较结果进行不同的处理:
◆ 如果计算出来的配置消息优,则设备就将该端口定为指定端口,端口上的配置消息被计算出来的配置消息替换,并周期性向外发送;
◆ 如果端口上的配置消息优,则设备不更新该端口的配置消息并将此端口阻塞,此端口将不再转发数据,只接收但不发送配置消息。
说明:
在拓扑稳定状态,只有根端口和指定端口转发流量,其它的端口都处于阻塞状态,它们只接收STP协议报文而不转发用户流量。
一旦根桥、根端口、指定端口选举成功,则整个树形拓扑就建立完毕了。
下面结合例子说明STP算法实现的计算过程。
具体的组网如图2所示,DeviceA的优先级为0,DeviceB的优先级为1,DeviceC的优先级为2,各个链路的路径开销分别为5、10、4。
图2STP算法计算过程组网图
◆ 各台设备的初始状态
各台设备的初始状态如表4所示。
表4各台设备的初始状态
设备
端口名称
端口的配置消息
DeviceA
AP1
{0,0,0,AP1}
AP2
{0,0,0,AP2}
DeviceB
BP1
{1,0,1,BP1}
BP2
{1,0,1,BP2}
DeviceC
CP1
{2,0,2,CP1}
CP2
{2,0,2,CP2}
◆ 各台设备的比较过程及结果
各台设备的比较过程及结果如表5所示。
表5各台设备的比较过程及结果
设备
比较过程
比较后端口的配置消息
DeviceA
◆ 端口AP1收到DeviceB的配置消息{1,0,1,BP1},DeviceA发现本端口的配置消息{0,0,0,AP1}优于接收到的配置消息,就把接收到的配置消息丢弃。
◆ 端口AP2收到DeviceC的配置消息{2,0,2,CP1},DeviceA发现本端口的配置消息{0,0,0,AP2}优于接收到的配置消息,就把接收到的配置消息丢弃。
◆ DeviceA发现自己各个端口的配置消息中根桥和指定桥都是自己,则认为自己是根桥,各个端口的配置消息都不作任何修改,以后周期性的向外发送配置消息。
AP1:
{0,0,0,AP1}
AP2:
{0,0,0,AP2}
DeviceB
◆ 端口BP1收到来自DeviceA的配置消息{0,0,0,AP1},DeviceB发现接收到的配置消息优于本端口的配置消息{1,0,1,BP1},于是更新端口BP1的配置消息。
◆ 端口BP2收到来自DeviceC的配置消息{2,0,2,CP2},DeviceB发现本端口的配置消息{1,0,1,BP2}优于接收到的配置消息,就把接收到的配置消息丢弃。
BP1:
{0,0,0,AP1}
BP2:
{1,0,1,BP2}
◆ DeviceB对各个端口的配置消息进行比较,选出端口BP1的配置消息为最优配置消息,然后将端口BP1定为根端口,它的配置消息不作改变。
◆ DeviceB根据根端口BP1的配置消息和根端口的路径开销5,为BP2端口计算一个指定端口配置消息{0,5,1,BP2}。
◆ DeviceB使用计算出来的配置消息{0,5,1,BP2}和端口BP2上的配置消息进行比较,比较的结果是计算出来的配置消息较优,则DeviceB将端口BP2定为指定端口,它的配置消息被计算出来的配置消息替换,并周期性向外发送。
根端口BP1:
{0,0,0,AP1}
指定端口BP2:
{0,5,1,BP2}
DeviceC
◆ 端口CP1收到来自DeviceA的配置消息{0,0,0,AP2},DeviceC发现接收到的配置消息优于本端口的配置消息{2,0,2,CP1},于是更新端口CP1的配置消息。
◆ 端口CP2收到来自DeviceB端口BP2更新前的配置消息{1,0,1,BP2},DeviceC发现接收到的配置消息优于本端口的配置消息{2,0,2,CP2},于是更新端口CP2的配置消息。
CP1:
{0,0,0,AP2}
CP2:
{1,0,1,BP2}
经过比较:
◆ 端口CP1的配置消息被选为最优的配置消息,端口CP1就被定为根端口,它的配置消息不作改变。
◆ 将计算出来的指定端口配置消息{0,10,2,CP2}和端口CP2的配置消息进行比较后,端口CP2转为指定端口,它的配置消息被计算出来的配置消息替换。
根端口CP1:
{0,0,0,AP2}
指定端口CP2:
{0,10,2,CP2}
◆ 接着端口CP2会收到DeviceB更新后的配置消息{0,5,1,BP2},由于收到的配置消息比原配置消息优,则DeviceC触发更新过程。
◆ 同时端口CP1收到DeviceA周期性发送来的配置消息,比较后DeviceC不会触发更新过程。
CP1:
{0,0,0,AP2}
CP2:
{0,5,1,BP2}
经过比较:
◆ 端口CP2的根路径开销9(配置消息的根路径开销5+端口CP2对应的路径开销4)小于端口CP1的根路径开销10(配置消息的根路径开销0+端口CP1对应的路径开销10),所以端口CP2的配置消息被选为最优的配置消息,端口CP2就被定为根端口,它的配置消息就不作改变。
◆ 将端口CP1的配置消息和计算出来的指定端口配置消息比较后,端口CP1被阻塞,端口配置消息不变,同时不接收从DeviceA转发的数据,直到新的情况触发生成树的计算,比如从DeviceB到DeviceC的链路down掉。
阻塞端口CP1:
{0,0,0,AP2}
根端口CP2:
{0,5,1,BP2}
经过上表的比较过程,此时以DeviceA为根桥的生成树就确定下来了,形状如图3所示。
图3计算得到的生成树
说明:
为了便于描述,本例简化了生成树的计算过程,实际的过程要更加复杂。
(2) STP的配置消息传递机制
◆ 当网络初始化时,所有的设备都将自己作为根桥,生成以自己为根的配置消息,并以HelloTime为周期定时向外发送。
◆ 接收到配置消息的端口如果是根端口,且接收的配置消息比该端口的配置消息优,则设备将配置消息中携带的MessageAge按照一定的原则递增,并启动定时器为这条配置消息计时,同时将此配置消息从设备的指定端口转发出去。
◆ 如果指定端口收到的配置消息比本端口的配置消息优先级低时,会立刻发出自己的更好的配置消息进行回应。
◆ 如果某条路径发生故障,则这条路径上的根端口不会再收到新的配置消息,旧的配置消息将会因为超时而被丢弃,设备重新生成以自己为根的配置消息并向外发送,从而引发生成树的重新计算,得到一条新的通路替代发生故障的链路,恢复网络连通性。
不过,重新计算得到的新配置消息不会立刻就传遍整个网络,因此旧的根端口和指定端口由于没有发现网络拓扑变化,将仍按原来的路径继续转发数据。
如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。
(3) STP定时器
STP计算中,需要使用三个重要的时间参数:
ForwardDelay、HelloTime和MaxAge。
◆ ForwardDelay为设备状态迁移的延迟时间。
链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。
不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。
为此,STP采用了一种状态迁移的机制,新选出的根端口和指定端口要经过2倍的ForwardDelay延时后才能进入转发状态,这个延时保证了新的配置消息已经传遍整个网络。
◆ HelloTime用于设备检测链路是否存在故障。
设备每隔HelloTime时间会向周围的设备发送hello报文,以确认链路是否存在故障。
◆ MaxAge是用来判断配置消息在设备内保存时间是否“过时”的参数,设备会将过时的配置消息丢弃。
◆ RSTP中,根端口的端口状态快速迁移的条件是:
本设备上旧的根端口已经停止转发数据,而且上游指定端口已经开始转发数据。
◆ RSTP中,指定端口的端口状态快速迁移的条件是:
指定端口是边缘端口或者指定端口与点对点链路相连。
如果指定端口是边缘端口,则指定端口可以直接进入转发状态;如果指定端口连接着点对点链路,则设备可以通过与下游设备握手,得到响应后即刻进入转发状态。