学好生成树协议,你就可以尽可能避免因某台交换机的问题造成整个局域网崩溃。
生成树协议是由Sun微系统公司著名工程师拉迪亚•珀尔曼博士(Radia Perlman)发明的。网桥使用珀尔曼博士发明的这种方法能够达到2层路由的理想境界:冗余和无环路运行。你可以把生成树协议设想为一个各网桥设备记在心里的用于进行优化和容错发送数据的过程的树型结构。
我们要介绍的这个问题在图1中进行了描述。
图 1
如果这些交换机不采用生成树协议并且以这种方式连接,每一台交换机将无限地复制它们收到的第一个数据包,直到内存耗尽和系统崩溃为止。在2层,没有任何东西能够阻止这种环路的事情发生。在图1中,管理员必须要手工关闭这个红色连接线路才能让这个以太网网络运行。生成树协议在当前可用连接有效时关闭一个或者更多其它冗余连接,而在当前连接出现故障后,再启用这些被关闭的冗余连接。生成树协议决定使用哪一个连接完全取决于网络的拓扑结构。
生成树协议拓扑结构的思路是,网桥能够自动发现一个没有环路的拓扑结构的子网,也就是一个生成树。生成树协议还能够确定有足够的连接通向这个网络的每一个部分。它将建立整个局域网的生成树。当首次连接网桥或者发生拓扑结构变化时,网桥都将进行生成树拓扑的重新计算。
当一个网桥收到某种类型的“设置信息”(一种特殊类型的桥接协议数据单元,BPDU)时,网桥就开始从头实施生成树算法。这种算法从根网桥的选择开始的。根网桥(root bridge)是整个拓扑结构的核心,所有的数据实际上都要通过根网桥。顺便提示一下,有手工设置根网桥时要特别注意。对于思科设备来言其根网桥的选择过程暴露出一些问题,就是过分简单化。思科硬件通常使用最低的MAC地址,具备这些地址的设备通常是网络中最古老的设备,因而其交换速度常是最慢的,而从根网桥在网络中的位置看,它负荷却最重。生成树构建的下一步是让每一个网桥决定通向根桥的最短路径,这样,各网桥就可以知道如何到达这个“中心”。这一步会在每个局域网进行,它选择指定的网桥,或者与根桥最接近的网桥。指定的网桥将把数据从局域网发送到根桥。最后一步是每个网桥要选择一个根端口。所谓根端口也即“用来向根桥发送数据的端口”。注意,一个网桥上的每一个端口,甚至连接到终端系统(计算机)的端口,都将参加这个这个根端口选择,除非你将一个端口设置为“忽略”。
上面就是生成树算法的过程。但是,这还不能解释生成树在现实世界中实际上在做什么。我们说,这种计算是破坏性的。毫无疑问,它确实是如此。要进行这种计算,网桥必须停止所有的通信。网桥要经过一系列的测试和学习阶段,只有在拓扑结构建立起来之后才开始发送数据。网桥只有在拓扑机构改变的时候或者网桥得到一个BPDP包时才会进行,想起来这种情况应该很少,可事实上,这种计算发生的频度要比你想象的多。
生成树协议思路是,你允许有一个连接错误,因为你在一对网桥之间存在两条物理连接。生成树协议在一个端口需要使用之前将封锁那个端口。因此,我们应该可以拔掉冗余的连接,并且在不中断通信的情况下把它连接到其它的网桥。很可惜,它不是这样工作的。
当一个物理连接的网桥新网桥连线时,它将发送重新设置BPDU,其它连接的设备将遵照施行。当生成树协议开始计算的时候,所有的通信都要停止大约50秒。这些时间可以说是物有所值,因为你仅仅被限制在一个很短的停机时间内。如果交换机被挤暴,或者你缺少多余的路径,将会出现永久的停机。相比之下,停机50秒钟只是非常轻的损失。
另外,很多现代厂商已经实现了快速生成树协议,这是老的生成树协议的一个改进版本,更加注意了在重新计算拓扑时的开销,并且与老版本的协议兼容。在大多数情况下,它可以把以前多达50秒的计算时间缩短到不足3秒,从这点看,任何人都应该使用新的快速生成树协议。
希望上面的介绍已经足够清楚。我们知道,启用生成树功能可以让我们通过多个连接把两个网桥连接在一起,并且不产生环路。如果连接之中的一个网桥坏了,我们可以绕过这个网桥,使用另一个网桥。这个工作原理是虽然现用的交换机封锁其备用的连接,但是,它默默地监听BPDU更新并且仍然知道哪一个连接通向根桥。这就是说,如果你进行了适当的设置。还记得虚拟局域网中的trunk?如果其中一个物理连接碰巧是一条虚拟局域网trunkk线,会出现什么情况呢?如果我们只有一个运行的生成树实例,这个生成树可能会发现trunk中的一个网络不应该使用这个连接(turnk端口汇聚将多条物理连接汇聚为一个带宽更大的逻辑连接)。除了关闭整个连接之外,它没有其它的选择。
现在进入每一个虚拟局域网一个生成树协议(PVST/per-VLAN spanning trees)的话题。当启用这项功能的时候,一个网桥将为该网桥上的每一个虚拟局域网运行一个生成树实例。如果一个trunk连接包含虚拟局域网1、2和3,它可以决定虚拟局域网1和2不能使用那个路径,但是仍然允许虚拟局域网3使用这条路径。在复杂的网络中,还有许多虚拟局域网3只有一个出口的情况,这可能是因为管理员要限制虚拟局域网3访问的范围。如果我们不是用PVST,而且trunk端口被生成树封锁了,这个网桥上的虚拟局域网3将失去与其局域网的其它方面的连接。每一个人都应该使用PVST。
最后,你应该不会忘记,发送BPDU数据的任何端口都能够引起网络中断。这也包括运行ettercap软件和其它非法程序的计算机。一定要在所有的端口启用类似于思科的“BPDU-Guard”这样的技术来封锁BPDU数据包。这些BPDU数据包不仅能够引起生成树协议重新进行计算,而且一台计算机也可以参加投票并且赢得这个选择。你肯定不希望发现你的生成树根是某个人的计算机。当所有的通信都涌向你的时候,这种情况很容易完成中间人攻击。
还有一些没有提到的BPDU信息以及需要学习的有关生成树协议的其它细节。这些细节有一点复杂。但是,由于你已经了解了生成树协议的概况,这些细节应该很容易理解。如果你要花更多的时间学习这些细节,从长远来看,你会得到回报。
小结
•生成树协议提供一种控制环路的方法。采用这种方法,在连接发生问题的时候,你的以太网能够绕过出现故障的连接。
•生成树中的根桥是一个逻辑的中心,并且监视整个网络的通信。最好不要依赖设备的自动选择去挑选哪一个网桥会成为根桥。
•生成树协议重新计算是痛苦的:恰当地设置主机连接端口(这样就不会引起重新计算),推荐使用快速生成树协议。