我们介绍以太网交换机生成树协议的基本概念。
请大家思考一下,应该如何提高以太网的可靠性呢?例如如图所示的以太网,由三台交换机互联而成,每个交换机上都连接有一些主机,为了简单起见,我们只画出了每个交换机上连接的一台主机,如果交换机 A 与 B 之间的链路出现了故障,则交换机 B 上连接的所有主机,既无法与交换机 A 上连接的所有主机进行通信,也无法与交换机 C 上连接的所有主机进行通信。
如果交换机 A 与交换机 B 和 C 之间的链路都出现了故障,则原来的以太网变成了三个独立的较小的以太网,他们之间无法通信。相信很多同学已经想到了,可以通过添加冗余链路的方法来提高以太网的可靠性。
例如在本例中,我们给交换机 B 和 C 之间添加一条冗余链路后,即使交换机 A 和 B 之间的链路出现了故障,整个网络还是联通的,但是冗余链路也会带来负面效应,那就是形成网络环路。如图所示,网络环路会带来一些问题。例如广播风暴,我们来举例说明,假设主机 H1 发送了一个广播帧,交换机 B 收到该帧号,将其从自己的其他所有接口转发出去,交换机 A 收到交换机 B 转发来的该帧后,将其从自己的其他所有接口转发出去。
同样的交换机 C 收到交换机 B 转发来的该证号,将其从自己的其他所有接口转发出去;交换机 C 收到交换机 A 转发来的该帧后,将其从自己的其他所有接口转发出去。
同样的,交换机 A 收到交换机 C 转发来的该帧后,将其从自己的其他所有接口转发出去。交换机 B 收到交换机 C 转发来的该帧后,将其从自己的其他所有接口转发出去。
同样的,交换机 B 收到交换机 A 转发来的盖章后,将其从自己的其他所有接口转发出去。
很显然该广播帧将在各交换机之间反复转发,分别按顺时针和逆时针方向同时兜圈,这就是所谓的广播风暴,广播风暴会大量消耗网络资源,使得网络无法正常转发其他数据帧,也会使主机反复收到广播帧,大量消耗主机资源,还会使交换机的帧交换表震荡(漂移),如图所示,这是交换机 B 的帧交换表,这是其各接口的接口号。为了简单起见,假设各主机的名称也可作为其 MAC 地址,当交换机 B 收到主机 H1 发送的广播帧后进行登记工作,将帧的源 MAC 地址 H1 和帧进入交换机 B 的接口号 1 登记到帧交换表中,这条记录是正确的。
当交换机 B 再次收到交换机 C 转发来的该广播帧后进行登记工作,将帧的源 MAC 地址 H1 和帧进入交换机 B 的接口号 2,这条错误记录登记到帧交换表中,并删除原先正确的记录。
当交换机 B 再次收到交换机 A 转发来的该广播帧号进行登记工作,将帧的源 MAC 地址 H1 和帧进入交换机 B 的接口号 3,这条错误记录登记到帧交换表中,并删除原先错误的记录。
当交换机 B 再次收到交换机 C 转发来的该广播帧后进行登记工作,将帧的源 MAC 地址 H1 和帧进入交换机 B 的接口号 2,这条错误记录登记到帧交换表中,并删除原先错误的记录。很显然有关 MAC 地址 H1 的记录将在这两个错误记录之间反复震荡。
为了可以在增加冗余链路来提高网络可靠性的同时,又避免网络环路带来的各种问题。以太网交换机使用生成树协议,其英文缩写词为 STP 不论交换机之间采用怎样的物理连接,使用生成树协议的交换机都能够自动计算,并构建出一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树形的,也就是没有逻辑环路。
我们来举例说明,如图所示,为了提高可靠性,5 台交换机之间进行了冗余连接,冗余链路不止一条,网络环路也不止一个。为了简单起见,各交换机上连接的主机没有画出。我们用绿色的小圆圈表示交换机的接口状态为正常状态,用橙色的小方块表示交换机的接口状态为阻塞状态,用红色的叉表示出现了故障,如果各交换机的各接口都处于正常状态,则会存在多个网络环路。实际上各交换机之间按照生成树协议中规定的生成树算法,交互一些参数后,就可以判断出自己应该阻塞自己的哪些接口。例如图中所示,这样就会形成一个逻辑上没有环路的网络,如图所示。
当然这个逻辑上没有环路的网络,一定要确保联通整个网络,否则就没有意义了。当首次连接交换机或网络物理拓扑发生变化时,这有可能是人为改变造成的,也有可能是出现故障造成的,交换机都将进行生成树的重新计算。例如假设这段链路出现了故障,相关交换机检测到该故障后,重新计算生成树,决定将自己之前阻塞的接口恢复为正常状态,这样就会形成一个新的逻辑上没有环路的网络。
需要说明的是,生成树协议所使用的生成树算法,以超出本系列课程的教学大纲,对生成树算法感兴趣的同学,可以参看我们的另一个系列课程,计算机网络简明教程和仿真实验。