STP(802.1d)
Tuesday, May 01, 2012
10:41 PM
在网络中,为了防止单点的故障,设计了冗余的网络结构,但这种网络冗余结构可能会造成广播风暴和MAC地址表不稳定。
当某台设备收到同一个帧的多个复制品,因为那个帧可能通过不同的网段同时到达。也许你会这样想:MAC地址过滤表将被设备的位置完全弄糊涂了,因为交换机可能从多条链路接收帧。更严重的是,交换机会不断地用源硬件地址位置更新MAC过滤表,这样它就没有时间来转发帧了。这被称为MAC地址表不稳定。
生成树协议(Spanning Tree Protocol)
STP的主要任务是阻止在第2层网络上产生网络环路。它警惕地监视着网络中的所有链路,通过关闭任何冗余的接口来确保在网络中不会产生环路。STP采用生成树算法(Spanning-Tree Algorithm,STA),它首先创建一个拓扑数据库,然后搜索并破坏掉冗余的链路。运行了STP算法之后,帧就只能被转发到保险的有STP挑选出来的链路上。
STP是第2层的协议,用来维护一个无环路的交换式网络。
生成树术语
根桥(Root bridge)
根桥是桥ID最低的网桥。对于STP来说,关键的问题是为网络中所有的交换机推选一个根桥,并让根桥成为网络中的焦点。在网络中,所有其他的决定-比如哪一个端口要被阻塞,哪一个端口要被置为转发模式--都是根据根桥的判断来做出选择的。
BPDU(Bridge Protocol Data Unit桥协议数据单元)
所有的交换机相互之间都交换信息(默认每2秒发送一次BPDU),并利用这些信息来选出根交换机,也根据这些信息来进行网络的后续配置。每台交换机都对BPDU中的参数进行比较,他们将BPDU传送给某个邻居,并在其中放入他们从其他邻居那里收到的BPDU。
桥ID(Bridge ID)
STP利用桥ID来跟踪网络中的所有交换机。桥ID是由桥优先级(在所有的Cisco交换机上,默认的优先级为32768)和MAC地址的组合来决定的。在网络中,桥ID最小的网桥就成为根桥。
非根桥(Nonroot bridges)
除了根桥外,其他所有的网桥都是非根桥。他们相互之间都交换BPDU,并在所有交换机上更新STP拓扑数据库,以防止环路并对链路失效采取补救措施。
端口开销(Port cost)
当两台交换机之间有多余链路且都不是根端口时,就根据端口开销来决定最佳路径,链路的开销取决于链路的带宽。
根端口(Root port)
根端口是指直接连到根桥的链路所在的端口,或者到根桥的路径最短的端口。如果有多条链路连接到根桥,就通过检查每条链路的带宽来决定端口的开销,开销最低的端口就成为根端口。如果多条链路的开销相同,就使用桥ID小一些的那个桥。如果多条链路来自同一个设备,就使用端口号最低的那条链路。
指定端口(Designated port)
有最低开销的端口就是指定端口,指定端口被标记为转发端口。
非指定端口(Nondesignated port)
非指定端口是指开销比指定端口高的端口,非指定端口将被置为阻塞状态,它不是转发端口。
转发端口(Forwarding port)
只能够转发帧的端口。
阻塞端口(Blocked port)
阻塞端口是指不能转发帧的端口,这样做是为了防止产生环路。然而,被阻塞的端口将始终监听(Listen)帧。
生成树的操作
・STP首先选举一个根桥,由根桥来负责决定网络拓扑。一旦所有的交换机都同意将某台交换机选举为根桥,其余的每台交换机就必须找到其唯一的根端口。
・在两台交换机之间的每一条链路必须有唯一的指定端口----在那条链路上的端口提供到根桥最大的带宽。重要的是记住,一个网桥到达根桥可能通过许多其他网桥,即它不总是最短路径,但它是将被使用的最快(最大带宽)的路径。
・显然,在根交换机上的每个端口都是指定端口,因为根桥离自己总是最近的。在执行STP算法之后,任何既不是根端口也不是指定端口的端口(这意味着它是非根端口、非指定端口)就被置为阻塞状态,这样就打破了交换环路。
如何选举根桥
在网络中,桥ID用来选举根桥,并决定根端口。桥ID为8个字节长(包括2个字节的BridgePriority和6个字节的Bridge MAC),其中包括了设备优先级和MAC地址,在运行IEEE STP版本的所有设备上,默认时的优先级都为32768.
选举根桥
先比较优先级,优先级的数值越小,优先级越高。如果优先级相同,则比较MAC地址,MAC地址小的成为跟桥。
在非根桥交换机上选举根端口
各个非根桥交换机根据到达根交换机的路径开销的大小选出根端口,根端口工作在转发状态。端口开销是一个可以累加的基于带宽的值。多段路径的开销进行累加,开销较小的成为根端口。下面是一些典型的开销标准:
10Gbps |
2 |
1Gbps |
4 |
100Mbps |
19 |
10Mbps |
100 |
选举指定端口
首先根据到根桥的端口开销,如果相同,再比较经过的交换机的Bridge ID,较低的成为指定端口。
查看STP状态的命令为 |
Switch(config)#show spanning tree |
查看STP主要状态的命令为 |
Switch(config)#show spanning tree brief |
改动交换机vlan下优先级的命令(例) |
Switch(config)#spanning-tree vlan 1 priority 4096 |
桥优先级以数值4096递增。
修改交换机STP优先级命令 |
Switch(config)#spanning tree priority |
生成树端口状态:
对于运行STP的网桥或交换机来说,其端口状态会在下列5种状态之间转变:
阻塞(Blocking)
当交换机加电时,默认情况下所有端口都处于阻塞状态。
Blocking状态下,丢弃所有收到的数据帧,不学习MAC地址,能收BPDU但不发送BPDU。
侦听(Listening)
端口都侦听和处理BPDU以确信在传送数据帧之前,在网络上没有环路产生,并进行STP计算,不学习MAC地址。
学习(Learning)
交换机端口侦听BPDU,并学习交换式网络中的所有路径。处在学习状态的端口形成了MAC地址表,但不能转发数据帧。转发延迟意味着将端口从侦听状态转换到学习状态所花费的时间,默认时设置为15秒,可以用命令show spanning tree显示出来。
转发(Forwarding)
在桥接的端口上,处在转发状态的端口发送并接收所有的数据帧。如果再学习状态结束时,端口仍然是指定端口或根端口,它就进入转发状态。
禁用(Disabled)
从管理上讲,处于禁用状态的端口不能参与帧的转发或形成STP。处于禁用状态下,端口实质上是不工作的,但是能接收BPDU.
说明:只有在学习状态或转发状态下,交换机才能填写MAC地址表。
大多数情况下,交换机端口都处在阻塞或转发状态,转发端口是指到根桥的开销最低的端口,但如果网络的拓扑改变了,交换机上的端口就会处于侦听或学习状态。
收敛
当网桥或交换机上的所有端口都转变到转发或阻塞状态时,就产生了收敛。在收敛完成之前,交换机不能转发任何数据。在重新转发数据之前,所有的设备都必须更新。是的,STP正在收敛时,所有主机的数据都会停止发送!因此,如果你想让网络中的用户能够继续发送数据(或者保持他们在任何时候都有可用链路),就必须保证交换式网络的实际设计确实很好,以便STP能够快速收敛。从阻塞状态转变到转发状态通常要花50秒。
当交换机启动后,都认为自己是根交换机,然后从所有接口向网络中发送BPDU,称为configuration BPDU,所以configuration BPDU是根交换机发出的。当交换机收到更优Bridge-ID的configuration BPDU,会将它从自己所有接口转发出去,并保存在接口,如果收到差的configuration BPDU,则全部丢掉,所以在交换网络中,只有根交换机的BPDU在转发,其它普通交换机的BPDU不会出现在网络中。
根交换机的BPDU会在每个hello时间往网络中发送一次,hello时间默认为2秒钟,也就是交换机的BPDU会在每2秒钟往网络中发送一次,如果普通交换机在max-age时间内没有收到根交换机的BPDU,则认为根交换机已经失效,便开始重新选举BPDU,默认max-age时间为20秒,即10倍hello时间。
除了hello时间和max-age时间外,还有一个forward delay时间,默认为15秒,接口在经过Listening 和Learning状态时,都会分别停留一个 forward delay时间,也就是说接口从Listening状态到Learning状态,最后变成转发状态,需要经过两个forward delay时间共计30秒。
本文出自 “活着是一种修行” 博客,谢绝转载!