而且,由于交换机是工作在OSI参考模型的数据链路层(二层)上的,二层的帧头中没有类似三层(网络层)IP包头中的TTL值(生存时间),所以广播帧将在环路中无休止地旋转下去,直到耗尽带宽和交换机资源,使网络瘫痪。
在生活中,如果要把一个纸环变成一个纸条,办法很简单,剪断它就可以了。但是在网络里,我们如何在保证冗余性的前提下“剪断”交换环路呢(当然我们不能真去剪网线)?我们可以使用一种算法,在软件上逻辑地使环路中的某一台交换机上的一个端口处于不通的状态(阻塞)。一旦网络中出现故障,该被阻塞的端口又可以在软件上取消其阻塞状态,变成一个可以正常收发数据帧的端口。这种软件上的逻辑算法,就是生成树协议。
在我们的交换网络中,环路往往并不是独立存在的,而是多个环路同时存在的,如图1中所示的情况。

图1 交换网络中的多个环路
从图1中我们可以看到,交换网络中的交换设备越多,网络的拓扑结构越复杂,产生的环路也越多,环路之间的关系也越复杂。
要让图1中的网络成为具有冗余性的无环路的网络,就要利用软件算法逻辑地阻塞一些交换机的端口,例如图2所示的情况。

图2 使用算法逻辑地阻塞交换机的端口
在图2中,黑色的叉代表交换机的端口被逻辑地阻塞(注意,所谓逻辑地阻塞是在交换机的操作系统软件里不允许数据帧从该端口收发,该端口在物理上并没有被关闭,还是处于up状态,以备在出现物理故障时,该端口能够快速地切换为正常收发数据的端口,即转发状态,从而在保证了冗余的同时,切断了环路)。在逻辑地阻塞了交换机A和交换机C的端口之后,网络在逻辑上实际变成了如图3所示的样子。

图3 无环路的树形结构
从图3中我们可以发现,当在复杂的网络里“剪断”了环路之后,在逻辑上就生成了树形的网络结构。
我们已经知道,负责在逻辑上解决环路问题的算法是生成树协议。实际上,该算法的目的就是在网络中把复杂的环路变成简单且无环路的树形结构。
Spring AI Alibaba 格式化输出详解
