STP 技术
 
当前在Catalyst交换机上广泛应用的STP技术是RPVST+,RPVST是为每一个Vlan生成一棵RSTP实例,+是指cisco为STP增加的安全特性。可以看出,STP是基础,所以我们单独拿出来研究。
 
而一些新型交换机还支持MST,即基于实例(instance)的生成树,不再为每个vlan维护一棵RSTP,因为考虑到很多vlan形成的RSTP是一样的,所以只是以最终形成的逻辑拓扑,建立一些生成树实例并加以维护,这个技术很节省资源,但是复杂度高,仅有部分较新的设备支持。
 
STP是针对多台交换机互联产生的广播风暴,多重帧和Mac地址不稳定这一系列问题的二层破环技术,后来出现的RSTP技术是它的一个升级版,我们就二者进行以下分析。
 
802.1D STP有Disabled , Blocking , Listening , Learning , Forwarding五种状态,其中Disabled是管理性质的禁用,在Blocking状态时只侦听BPDU,到了Listening状态开始转发BPDU,在Learning状态形成CAM表,最终到达Forwarding状态,开始真正转发数据。
 
在STP中,如果一个端口down掉,到重新转发需要50s时间,即20s的BPDU最大生存时间加上15s的listening状态以及15s的learning状态。
 
802.1W RSTP只有Discarding,learning,Forwarding三种状态,其中discarding对应了STP的前三项,这样提高了收敛速度,也从另一个侧面显示出STP的Blocking和Listening状态其实区分度并不大。
 
STP中定义了根端口(Root Port)和指定端口(Desinated Port),在此基础上RSTP 新定义了备份端口(Backup Port),备选端口(Alternative Port)和边界端口(Edge Port)这三种端口概念。
 
在RSTP中,只有非边缘端口进入转发状态才会引起拓扑变化。不过在这之前我们先来看看STP的三种补丁技术BackboneFast ,UplinkFast 和 Port Fast 。
 
Uplink Fast 是为本SW提供一个备份的RP端口(Root Port),一旦原RP down掉,备份RP马上进入Forwarding状态。备份RP口在RSTP中就是Alternative Port。
 
Backbone Fast 是别的SW的RP口坏了,而恰好他要开启的新RP口与我直连的口是Block的,我就开启这个接口(显然的,这个口会成为指定端口),让他能和根桥通信,开启条件:收到他的BPDU,显示BID=RID,且至少见过一次。
 
事实上RSTP中Backbone技术也是独立出来的,并没有通过Backup Port实现,Backup Port是指定端口的备份,而Alternative Port是根端口的备份,仅此而已。
 
Port Fast 是用来接终端设备,这样的接口不参与STP破环,所以可以回避Listening和Learning状态,直接进行转发。
 
 
 
PS: STP中的BPDU有两种,Configuration BPDU 和 TCN (Topology Change Notification)BPDU,其中配置BPDU由根桥始发,直到STP收敛。TCN BPDU是第一时间发现网络拓扑有变的SW始发,先通过单播到达根桥(途中收到该TCN BPDU的SW会回传一个Hello并在其中的TCA位(Topology Change Ack)中做标记),再通过组播由根桥通告所有SW,后来RSTP对此做了改进,在RSTP中,TCN BPDU是以始发SW作为根,即时通告,离得越近的就越早知道,从而提高了收敛速度。
 
 
STP破环要点
 
 
1.STP破环流程:    1)选举根桥
 
                             2)在非根桥上选举根端口
 
                             3)在每个网段上选举指定端口
 
 
2.STP破环价值观(均为比小,依次比较):
 
                             1)根桥ID(BID优先级+Mac) 
 
                             2)Cost(以BW为参考)  
    
                             3)发送者BID(BID优先级+Mac)
 
                             4)发送者端口ID(优先级+端口号)
 
 
PS:BID(Bridge ID)优先级范围为0~65535,默认为32768;Port ID优先级范围0~255,默认为128。当用命令指定根桥的时候,效果是让该SW的BID优先级降到8192。
 
3.根端口针对SW本身,是SW以非根桥的身份通过根端口和根桥通信。
 
4.指定端口针对一个网段(segment),到达该网段任意接口即为进入该网段。
                        |---------------------------SW1 -------------------------|
                      Fa1/0                                                                Fa1/0
                        |                                                                         |
                       SW2 -Fa2/0------------------------------------Fa3/0-SW3
 
以上图为例,SW1为根桥,现在要在SW2和SW3之间的网段选举出一个指定端口,SW2的BID为2,SW3的BID为3,链路带宽均为100M,过程如下:
 
1)SW2和SW3的根桥相同,均为SW1,进入一个流程。
 
2)比较Cost,根桥发出BPDU,SW2从自己的Fa1/0接收到,加上该端口的Cost 19,改写发送者BID为自己(还有发送端口字段,在此不做讨论),然后从自己的Fa2/0端口发出,注意,从Fa2/0发出来的那一刻,即进入该网段
 
SW3的过程也是如此,BPDU改写后从自己的Fa3/0发出,即进入该网段。因为Cost在发送端并不加,所以进入该网段的两个BPDU在进行比较的时候,Cost相同,均为19,进入下一流程。
 
3)依然是比较进入该网段的这两个BPDU,SW2的Fa2/0收到的BPDU所写的发送者BID为2,而SW3的Fa3/0收到的BPDU的发送者BID为3,所以Fa2/0端口胜出,成为该网段的指定端口
 
最后再强调一下,选指定端口是站在网段的高度上宏观考虑,BPDU无论通过该网段的哪个接口进入,一旦进入,就卡在那里,作为该端口的评判,不要想象BPDU穿过网段中链路再比较,那样会造成字段改动,引起判断失误。
 
PS:所谓网段,就是用网络设备分隔开来形成的网络分段。
 
5.STP的Cost是和端口本身相关的,而不是网段,接受时加上该接收端口的Cost,发送时并不加。PS:在STP中修订后的Cost与BW的对应为:10Mbps~100 100Mbps~19 1Gbps~4 10Gbps~2。
 
6.在选举根桥时,每个SW都宣称(declare)自己是根桥,发送的Hello中RID字段为自己的BID(每2s发一次),知道收到一个有更低BID的Hello,就开始转发这个Hello,最终,所有的SW都在期待那台有最佳BID的SW不断的产生hello,那么这台SW就成为根桥。
 
7.在选举出根桥后,配置BPDU都是由根桥始发,非根桥根据接收情况加以判决选举出根端口和指定端口,这里要明确为什么要根据根桥发的BPDU判决,因为选举的目的就是让每个SW和每个网段以最佳的方式和根桥通信,所以要重视根桥的信息。
 
8.发送者ID含义:这个BPDU是哪个SW发过来的,他的BID是多少?
 
9.发送者端口ID含义:这个BPDU是从哪一个端口发过来的,ID是多少?
 
10.没有一个BPDU能原封不动的穿越SW,SW会在接收BPDU后改写四处字段然后发送:Cost(加上接收端口的开销),发送者的BID(改为自己的BID),端口优先级(改为自己发送端口的优先级),端口号(改为自己发送端口的端口号)。
 
11.根桥的所有端口均为指定端口,根据Cost出口加,入口不加的原则,根桥的所有端口的根路径开销均为0。
 
12.BPDU(Bridge Protocol Data Unit,网桥协议数据单元)是SW的Hello,包含四个字段:根BID、根路径开销、发送者BID,发送者端口ID。
 
13.BID在STP中用来标识一台SW,可以填充在BPDU的“根BID”和“发送者BID”两个字段中,原始的BID包括2 Bytes的优先级和6 Bytes的System ID(即Mac地址)。
 
后来为了支持MST和PVST+进行了扩展,将原先2 Bytes的Priority字段分为了4 bit的 “Priority Multiple of 4096 ”字段,依然代表优先级,12 bit的“System ID Extension”字段,填充的内容是VLAN ID,作为System ID(Mac地址)的扩展,使得SW在每个Vlan中都有唯一的BID。