STP剖析(一)
一、 概述
STP是二层的链路管理协议,提供冗余路径并防止网络中的二层环路。在正确的二层以太网网络中,任意两个主机之间仅有一条激活的路径。
生成树强迫网络中的冗余路径进入备份(Blocked)状态。若生成树中某个网段发生故障,并且存在冗余路径,生成树算法(Spanning Tree Algorithm,STA)重新计算生成树拓扑并激活备份路径。交换机按照一定的时间间隔发送并接收生成树帧(Bridge Protocol Data Unit,BPDU)。交换机不会转发BPDU报文,它用BPDU报文来构建一个无环路(loop-free)的路径。BPDU报文包括的信息:发送交换机及其端口(包括交换机的MAC地址、交换机的优先级、端口优先级以及路径费用)。生成树使用这些信息为交换网络来选举根交换机(root switch)和根端口(root port),为每个交换的网段选择根端口(root port)和指派端口(designated port)。若同一台交换机的2个端口会形成一条环路,生成树的端口优先级和路径费用的设置将用于判断哪个端口处于转发(Forwarding)状态、而哪个处于阻塞(Blocking)状态。
二、 生成树拓扑和BPDU报文
一个稳定、活动的生成树拓扑由以下参数控制:
● 每个交换机上每个VLAN瓶颈什么意思的唯一的桥ID(Bridge ID,由交换机优先级+MAC地址组成)。对于交换机堆叠,在同一个生成树实例中所有交换机采用相同的Bridge ID
● 到达根桥的生成树路径费用
● 与每个二层接口相关的端口标识符(PortID)(由端口优先级和MAC地址组成,其中6bit的端口优先级+10bit的端口号)
图1 BPDU报文格式
BPDU报文的类型:
1)Configuration BPDU
Configuration BPDU是由Root Switch发送的。
图2 BPDU报文格式
当网络中的交换机启动时,每个交换机都认为自己是根桥(Root Switch)。每个交换机都从所有端口发送出一个Configuration BPDU(配置BPDU报文)。通过BPDU报文的交流来计算生成树拓扑。每个Configuration BPDU包括如下信息:
● 发送交换机认可的Root Switch的桥ID
● 到达根桥的费用
● 发送交换机自身的桥ID
● 消息的年龄
● 发送接口的标识
● hello、forward-delay、max-age等计时器的值
STP收敛后,网络中的每个指派端口以Hello_Time的时间间隔发送BPDU报文。
若交换机收到更优质(superior)(BID更小、路径费用更小等)的Configuration BPDU报文,则为该端口保存此信息。若该BPDU报文是从交换机的根端口收到,则交换机将把BPDU报文转发给它直连的并以它为指派交换机的所有LAN。
若交换机从某端口收到更劣质(inferior)的Configuration BPDU报文(与原先该端口收到的信息相比),则丢弃该BPDU报文。若交换机是从以它为指派交换机的LAN中收到此劣质BPDU报文,交换机将把该端口保存的最新的BPDU信息发送到该LAN中。通过这种方式,劣质的BPDU报文被丢弃,而优质的BPDU报文传播到整个网络中。
BPDU报文的交换会产生以下结果:
● 网络中的一台交换机被选为Root Switch(即交换网络中生成树拓扑的逻辑中心)。对于每个VLAN来说,拥有最高优先级(优先级的数值最小者)的交换机被选为Root Switch;若优先级相同,则该VLAN中拥有最小MAC地址的交换机成为Root Switch。
● 除Root Switch之外,每个交换机需要选择一个Root Port。在交换机转发数据到Root Switch时,该端口提供一条最优(最小的费用)路径。
● 每个交换机根据路径费用计算到达Root Switch的最短路径。
● 每个LAN段需要选择一个指派交换机(Designated Switch)。在转发LAN段的数据到达Root Switch时,指派交换机提供一条费用最小的路径。其中指派交换机连接到LAN段的端口称为指派端口(Designated Portfab)。
2)Topology Change Notification(TCN) BPDU
发生网络拓扑改变的LAN的指派交换机将产生一个TCN BPDU报文,并通过Root Port发送出去,而指派交换机收到TCN BPDU报文后,对该报文进行确认(若没有确认,则该报文的发送源会不断发送该TCN BPDU报文),并重新生成该TCN BPDU报文,同样通过其Root Port发送出去,直至到达Root Switch,生成树算法(STAhush hush)则判断路径是否需要改变。在STPxa收敛后,网络中不会存在TCN BPDU报文。
在Root Switch收到TCN BPDU报文后,Root Switch将把其Configuration BPDU报文中的TC标志位设置为1),并发送该报文给其他交换机。Root Switch发送这种报文(TC标志位为1)持续的时间为FwdDelay(转发延迟)+MaxAge(最大老化时间)。此时其他交换
机在收到这种BPDUhandout报文后,将它们MAC地址表中条目的老化时间缩短为FwdDelay(注:缺省情况下,交换机上MAC地址表中条目的老化时间为300秒)。这种机制的目的是在网络发生变化时,让交换机尽快清除旧的MAC地址条目(由于网络变化,可能有些MAC地址条目是不正确的),而让交换机更快地学习到新的MAC地址条目。
【STP拓扑变化机制】
正常情况下,交换机从根端口接收到来自根桥的Configuration BPDU报文,而不会向根桥
发送BPDU报文。如上图,当交换机B需要通知网络变化时,它从其根端口发送一种特殊的称为拓扑变化通知(TCN)的报文。当指派交换机收到TCN时,首先对它进行确认,同时重新生成一个TCN报文,从它的根端口继续发送。love is not blindTCN报文非常简单,其中没有具体的信息(仅仅包括Configuration BPDU报文的前3个字段),它以本地配置的girls on fireHello_Time间隔来发送(注意不是Configuration BPDU报文中的Hello_Time间隔);指派交换机以普通的Configuration BPDU报文进行确认,只是其中的Topology Change Acknowledge(TCA)标志位设置为1。只有接收到确认报文后,交换机B才停止发送TCN报文,因此就算指派交换机没有从根桥收到Configuration BPDU报文,它也必须回应此TCN报文。在根桥收到TCN报文后的FwdDelay(转发延迟)+MaxAge(最大老化时间)时间内,它所发送的Configuration BPDU报文中的TC位被设置为1,这些报文被网络中的交换机中转,这样每个交换机都可以知道网络发生变化,从而把它们的MAC地址表老化时间缩短为FwdDelay。
三、 Bridge ID、交换机优先级和Extended System ID
IEEE 802.1D标准要求每个交换机拥有一个唯一的桥标识符(Bridge ID),用于控制Root Switch的选举。在PVST+和快速PVST+中,每个VLAN被看作一个不同的逻辑桥,因此每个交换机需要拥有和VLAN个数一样多的不同的Bridge ID。交换机上每个VLAN拥有唯一的8字节的Bridge ID;其中前2个字节作为交换机的优先级,后6个字节来自交换机的MAC地址。对于不同VLAN,要满足BridgeID唯一,有两种方法:1)给每个VLAN保留一个不同的MAC地址,这种方式较浪费MAC地址;2)把VLAN ID作为Extended System ID和交换机优先级结合(参见图3)。
交换机优先级以及Extended System ID
installshieldwizard Switch Priority Value | Extended System ID (Set Equal to the VLAN ID) | Bit 16 | Bit 15 | Bit 14 | Bit 13 | Bit 12 | abrasiveBit 11 | Bit 10 | Bit 9 | Bit 8 | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | 32768 | 16384 | 8192 | 4096 | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | | | | | | | | | | | | | | | | |
|
|
图3 交换机的桥ID
四、 生成树接口状态及端口角色
由于BPDU报文在网络中的传播有一定的延迟。若一个接口在生成树中的状态从非参与者的角色直接进入转发状态,可能带来短暂的数据环路。因此接口必须等待新的拓扑信息传播到整个交换网络后才可以转发数据帧。
每个参与生成树的2层接口存在如下状态:
● Blocking――在接口启用后,在listening网络之前它首先进入Blocked状态。此时接口丢弃从某网段或者其他端口过来的数据帧,但接收BPDU报文,并提交给STP算法进行处理,不发送dominantBPDU报文,接收并处理网络管理的消息