当前位置:文档之家› 生成树协议详解

生成树协议详解

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