您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > STP(SpanningTreeProtocol,生成树协议)
STP(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)指定桥与指定端口指定桥与指定端口的含义分类指定桥指定端口对于一台设备而言与交换机直接相连并且负责向交换机转发BPDU报文的设备指定桥向本机转发BPDU报文的端口对于一个局域网而言负责向本网段转发BPDU报文的设备指定桥向本网段转发BPDU报文的端口(4)路径开销路径开销是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树型网络结构。4.STP的基本原理STP通过在设备之间传递BPDU来确定网络的拓扑结构。配置消息中包含了足够的信息来保证设备完成生成树的计算过程,其中包含的几个重要信息如下:根桥ID:由根桥的优先级和MAC地址组成;根路径开销:到根桥的最短路径开销;指定桥ID:由指定桥的优先级和MAC地址组成;指定端口ID:由指定端口的优先级和端口名称组成;配置消息在网络中传播的生存期:MessageAge;配置消息在交换机中能够保存的最大生存期:MaxAge;配置消息发送的周期:HelloTime;端口状态迁移的延时:ForwardDelay。(1)STP算法实现的具体过程初始状态各台设备在初始时会生成以自己为根桥的BPDU报文消息,根路径开销为0,指定桥ID为自身设备ID,指定端口为本端口。最优配置消息的选择各台设备都向外发送自己的配置消息,同时也会收到其他设备发送的配置消息。最优配置消息的选择过程如下:1、每个端口收到配置消息后的处理过程如下:当端口收到的配置消息比本端口配置消息的优先级低时,设备会将接收到的配置消息丢弃,对该端口的配置消息不作任何处理。当端口收到的配置消息比本端口配置消息的优先级高时,设备就用接收到的配置消息中的内容替换该端口的配置消息中的内容。2、设备将所有端口的配置消息进行比较,选出最优的配置消息。配置消息的比较原则如下:根桥ID较小的配置消息优先级高;若根桥ID相同,则比较根路径开销,比较方法为:用配置消息中的根路径开销加上本端口对应的路径开销,假设两者之和为S,则S较小的配置消息优先级较高;若根路径开销也相同,则比较以下的配置消息优先级,优先级较高的为根桥:指定桥ID、指定端口ID、接收该配置消息的端口ID等,。根桥的选择网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的桥ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。根端口、指定端口的选择根端口、指定端口的选择过程如下。1、非根桥设备将接收最优配置消息的那个端口定为根端口。2、设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:根桥ID替换为根端口的配置消息的根桥ID;根路径开销替换为根端口配置消息的根路径开销加上根端口对应的路径开销;指定桥ID替换为自身设备的ID;指定端口ID替换为自身端口ID。3、设备使用计算出来的配置消息和需要确定端口角色的端口上的配置消息进行比较,并根据比较结果进行不同的处理:如果计算出来的配置消息优,则设备就将该端口定为指定端口,端口上的配置消息被计算出来的配置消息替换,并周期性向外发送。如果端口上的配置消息优,则设备不更新该端口配置消息并将此端口阻塞,该端口将不再转发数据,只接收但不发送配置消息;说明:在拓扑稳定状态,只有根端口和指定端口转发流量,其他的端口都处于阻塞状态,它们只接收STP协议报文而不转发用户流量。一旦根桥、根端口、指定端口选举成功,则整个树形拓扑就建立完毕了。下面结合例子说明STP算法实现的计算过程。具体的组网如图1-2所示,DeviceA的优先级为0,DeviceB的优先级为1,DeviceC的优先级为2,各个链路的路径开销分别为5、10、4。各台设备的初始状态各台设备的初始状态如表1-4所示。各台设备的比较过程及结果如表1-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:{0,0,0,AP2}根端口CP2:{0,5,1,BP2}将端口CP1的配置消息和计算出来的指定端口配置消息比较后,端口CP1被阻塞,端口配置消息不变,同时不接收从DeviceA转发的数据,直到新的情况触发生成树的计算,比如从DeviceB到DeviceC的链路down掉。经过上表的比较过程,此时以DeviceA为根桥的生成树就确定下来了,形状如图1-3所示。(2)STP的配置消息传递机制当网络初始化时,所有的设备都将自己作为根桥,生成以自己为根的配置消息,并以HelloTime为周期定时向外发送。接收到配置消息的端口如果是根端口,且接收的配置消息比该端口的配置消息优,则设备将配置消息中携带的MessageAge按照一定的原则递增,并启动定时器为这条配置消息计时,同时将此配置消息从设备的指定端口转发出去。如果指定端口收到的配置消息比本端口的配置消息优先级低时,会立刻发出自己的更好的配置消息进行回应。如果某条路径发生故障,则这条路径上的根端口不会再收到新的配置消息,旧的配置消息将会因为超时而被丢弃,设备重新生成以自己为根的配置消息并向外发送BPDU和TCNBPDU,从而引发生成树的重新计算,得到一条新的通路替代发生故障的链路,恢复网络连通性。不过,重新计算得到的新配置消息不会立刻就传遍整个网络,因此旧的根端口和指定端口由于没有发现网络拓扑变化,将仍按原来的路径继续转发数据。如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。(3)STP定时器STP计算中,需要使用三个重要的时间参数:ForwardDelay、HelloTime和MaxAge。ForwardDelay为交换机状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的路径回环。为此,生成树协议采用了一种状态迁移的机制,根端口和指定端口重新开始数据转发之前要经历一个中间状态,中间状态经过2倍的ForwardDelay的延时后才能进入Forwarding状态,这个延时保证了新的配置消息已经传遍整个网络。HelloTime用于交换机检测链路是否存在故障。交换机每隔HelloTime时间会向周围的交换机发送hello报文,以确认链路是否存在故障。MaxAge是用来判断配置消息在交换机内保存时间是否“过时”的参数,交换机会将过时的配置消息丢弃。
本文标题:STP(SpanningTreeProtocol,生成树协议)
链接地址:https://www.777doc.com/doc-2850713 .html