STP剖析(一)
Created by Cappuccino on December 16, 2004
关键字:spanning-treeprotocol;802.1D;生成树
一、 概述
STP是二层的链路管理协议,提供冗余路径并防止网络中的二层环路。在正确的二层以太网网络中,任意两个主机之间仅有一条激活的路径。
生成树强迫网络中的冗余路径进入备份(Blocked)状态。若生成树中某个网段发生故障,并且存在冗余路径,生成树算法(SpanningTree 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报文
一个稳定、活动的生成树拓扑由以下参数控制:
l 每个交换机上每个VLAN的唯一的桥ID(Bridge ID,由交换机优先级+MAC地址组成)。对于交换机堆叠,在同一个生成树实例中所有交换机采用相同的BridgeID
l 到达根桥的生成树路径费用
l 与每个二层接口相关的端口标识符(PortID)(由端口优先级和MAC地址组成,其中6bit的端口优先级+10bit的端口号)
图1 BPDU报文格式
BPDU报文的类型:
1)Configuration BPDU
Configuration BPDU是由Root Switch发送的。
图2 BPDU报文格式
当网络中的交换机启动时,每个交换机都认为自己是根桥(Root Switch)。每个交换机都从所有端口发送出一个Configuration BPDU(配置BPDU报文)。通过BPDU报文的交流来计算生成树拓扑。每个Configuration BPDU包括如下信息:
l 发送交换机认可的Root Switch的桥ID
l 到达根桥的费用
l 发送交换机自身的桥ID
l 消息的年龄
l 发送接口的标识
l 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报文的交换会产生以下结果:
l 网络中的一台交换机被选为Root Switch(即交换网络中生成树拓扑的逻辑中心)。对于每个VLAN来说,拥有最高优先级(优先级的数值最小者)的交换机被选为RootSwitch;若优先级相同,则该VLAN中拥有最小MAC地址的交换机成为Root Switch。
l 除Root Switch之外,每个交换机需要选择一个Root Port。在交换机转发数据到Root Switch时,该端口提供一条最优(最小的费用)路径。
l 每个交换机根据路径费用计算到达Root Switch的最短路径。
l 每个LAN段需要选择一个指派交换机(Designated Switch)。在转发LAN段的数据到达RootSwitch时,指派交换机提供一条费用最小的路径。其中指派交换机连接到LAN段的端口称为指派端口(DesignatedPort)。
2)Topology Change Notification(TCN) BPDU
发生网络拓扑改变的LAN的指派交换机将产生一个TCN BPDU报文,并通过Root Port发送出去,而指派交换机收到TCN BPDU报文后,对该报文进行确认(若没有确认,则该报文的发送源会不断发送该TCNBPDU报文),并重新生成该TCNBPDU报文,同样通过其RootPort发送出去,直至到达RootSwitch,生成树算法(STA)则判断路径是否需要改变。在STP收敛后,网络中不会存在TCN BPDU报文。
在Root Switch收到TCN BPDU报文后,Root Switch将把其Configuration BPDU报文中的TC标志位设置为1),并发送该报文给其他交换机。Root Switch发送这种报文(TC标志位为1)持续的时间为FwdDelay(转发延迟)+MaxAge(最大老化时间)。此时其他交换机在收到这种BPDU报文后,将它们MAC地址表中条目的老化时间缩短为FwdDelay(注:缺省情况下,交换机上MAC地址表中条目的老化时间为300秒)。这种机制的目的是在网络发生变化时,让交换机尽快清除旧的MAC地址条目(由于网络变化,可能有些MAC地址条目是不正确的),而让交换机更快地学习到新的MAC地址条目。
【STP拓扑变化机制】
正常情况下,交换机从根端口接收到来自根桥的Configuration BPDU报文,而不会向根桥发送BPDU报文。如上图,当交换机B需要通知网络变化时,它从其根端口发送一种特殊的称为拓扑变化通知(TCN)的报文。当指派交换机收到TCN时,首先对它进行确认,同时重新生成一个TCN报文,从它的根端口继续发送。TCN报文非常简单,其中没有具体的信息(仅仅包括ConfigurationBPDU报文的前3个字段),它以本地配置的Hello_Time间隔来发送(注意不是Configuration BPDU报文中的Hello_Time间隔);指派交换机以普通的Configuration BPDU报文进行确认,只是其中的Topology Change Acknowledge(TCA)标志位设置为1。只有接收到确认报文后,交换机B才停止发送TCN报文,因此就算指派交换机没有从根桥收到ConfigurationBPDU报文,它也必须回应此TCN报文。在根桥收到TCN报文后的FwdDelay(转发延迟)+MaxAge(最大老化时间)时间内,它所发送的Configuration BPDU报文中的TC位被设置为1,这些报文被网络中的交换机中转,这样每个交换机都可以知道网络发生变化,从而把它们的MAC地址表老化时间缩短为FwdDelay。
三、 BridgeID、交换机优先级和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
|
图3 交换机的桥ID
四、 生成树接口状态及端口角色
由于BPDU报文在网络中的传播有一定的延迟。若一个接口在生成树中的状态从非参与者的角色直接进入转发状态,可能带来短暂的数据环路。因此接口必须等待新的拓扑信息传播到整个交换网络后才可以转发数据帧。
每个参与生成树的2层接口存在如下状态:
l Blocking――在接口启用后,在listening网络之前它首先进入Blocked状态。此时接口丢弃从某网段或者其他端口过来的数据帧,但接收BPDU报文,并提交给STP算法进行处理,不发送BPDU报文,接收并处理网络管理的消息
l Listening――当STP确定该接口应该参与数据转发后,它进入的第一个状态。此时接口丢弃从某网段或者其他端口过来的数据帧、不学习MAC地址,但接收并处理BPDU报文和网络管理的消息。在该过程中交换机完成3项工作:1)选举根桥;2)在非根桥上选举根端口;3)给每个网段选择指派端口。被选择为根端口、指派端口的端口进入Learning状态,而其他角色的端口则返回Blocking状态
l Learning――接口准备参与数据帧的转发。此时接口丢弃从某网段或者其他端口过来的数据帧,但是学习MAC地址;接收并处理BPDU报文和网络管理的消息。在该状态,交换机处理、生成并发送BPDU报文
l Forwarding――接口转发从某网段或者其他端口过来的数据帧,学习MAC地址,接收并处理BPDU报文和网络管理的消息`
l Disabled――接口没有参与到生成树中(原因可能是接口关闭、接口上没有链路、接口上没有运行STP等)
802.1D中为端口定义了4种角色:
l Root Port:根端口存在于非根桥或指派交换机(Nonroot或Designated)上,每个交换机上仅有一个根端口。在该交换机上,从此端口到达根桥(Root Switch)的路径费用是最短的。根端口负责在根桥和其他网段之间转发数据帧,同时学习MAC地址。
l Designated Port:指派端口存在于根桥和非根桥上。在根桥上,所有端口都是指派端口。
l Nondesignated Port:非指派端口阻塞数据帧,而且不学习MAC地址。
l Disabled Port:该端口被关闭。