华为HCIA-Datacom认证指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.1 交换机环路问题分析

生成树协议的作用是解决二层交换网络环路问题。那么什么情况下才会出现交换网络环路问题呢?或者说交换网络环路是由于什么原因导致的?我们在部署交换网络时,为了提高网络的可靠性和冗余性,往往都会增加多台交换机并且交换机之间会有多条链路级联。这样做的好处是,就算其中一台交换机发生故障或者链路出现故障都不会影响网络的正常工作。这确实是一个非常好的增强冗余和可靠性的解决方案,但是这种做法同时也会带来环路问题。如图4-1所示的网络是一个环路网络,在这个网络中,三台交换机相互连接,在交换机B(SWB)上连接了一台主机A,在交换机C(SWC)上连接了一台主机B。下面我们来分析一下环路是怎么形成的。

1.环路的形成

首先,假设所有交换机的MAC地址表都为空,主机A与主机B通信,主机A将数据帧发送给交换机B,交换机B收到数据帧后学习源MAC地址,并根据目的MAC地址查询MAC地址表进行转发,由于MAC地址表中没有目的MAC地址,交换机B会向除接收端口以外的其他端口泛洪数据帧。这样交换机A和交换机C都能收到数据帧,它们会进行和交换机B同样的操作,学习数据帧源MAC地址并泛洪数据帧,经过多次转发后数据帧又被发送回交换机B,交换机B收到后再继续泛洪,从而形成环路。我们可以思考一下,这种图中的环路会一直持续下去吗?答案是不会的。因为这是一个由未知单播帧造成的环路,由于交换机MAC地址表中没有这个单播数据帧的目的MAC地址,所以会数据帧被泛洪。当主机B收到数据帧并进行回复后,在交换机C上的MAC地址表中就有主机B的MAC地址。交换机C在收到数据帧后会直接转发给主机B而不是再进行泛洪操作,这样环路也就被打破了。但是如果同样的场景换成广播帧(比如ARP广播)会怎么样?会一直环路下去。数据帧不同于IP包,在IP包中可以通过TTL值防止三层数据环路,而数据帧中没有这种机制,这就会造成二层的永久环路,极大地浪费了网络带宽和设备处理资源,这是网络的灾难,此时交换网络基本瘫痪。

图4-1 环路网络

2.STP的作用及其工作原理

(1)STP的作用

STP包含狭义STP和广义STP两个含义,狭义STP是指IEEE 802.1d—1998定义的STP;广义 STP包括 IEEE 802.1d—1998定义的 STP以及各种在其基础上经过改进的生成树协议。本书中的 STP均指狭义 STP。

STP的基本思想十分简单。自然界中生长的树是不会出现环路的,如果网络也能够像一棵树一样生长就不会出现环路了。于是,人们在STP中定义了根桥(Root Bridge)、根端口(Root Port)、指定端口(Designated Port)、替代端口(Alternate Port)和路径开销(Path Cost)等概念,通过构造一棵树的方法达到裁剪冗余环路的目的,同时实现链路备份和路径最优化。用于构造这棵树的算法被称为生成树算法(Spanning Tree Algorithm)。

要实现这些功能,交换机之间必须要进行信息交互,这些信息交互单元被称为BPDU(Bridge Protocol Data Unit,网桥协议数据单元)。本书中将生成树协议的协议报文均简称为BPDU。STP BPDU是一种二层报文,目的MAC地址是多播地址01-80-C2-00-00-00,所有支持STP的网桥都会接收并处理收到的BPDU报文。该报文中携带了用于生成树计算的所有信息。

(2)STP的工作原理

首先进行根桥的选举。选举的依据是网桥优先级和网桥MAC地址组合成的网桥ID(Bridge ID),网桥ID最小的网桥将成为网络中的根桥,在一个网络中只能有一个根桥,其他的交换机都为非根桥,可以把它们统称为下游网桥。根桥的所有端口都连接到下游网桥,所以端口角色都成为指定端口。接下来,连接根桥的下游网桥将各自选择一条“最粗壮”的树枝作为到根桥的路径,相应端口的角色就成为根端口。循环该过程到网络的边缘,指定端口和根端口确定之后一棵生成树就生成了。生成树经过一段时间(默认值是30秒左右)稳定之后,指定端口和根端口进入转发状态,其他端口进入阻塞状态。STP BPDU报文会定时从各个网桥的指定端口发出以维护链路的状态。如果网络拓扑发生变化,生成树就会重新计算,端口状态也会随之改变。这就是生成树的基本原理。

随着应用的深入和网络技术的发展,STP的缺点在应用中也被暴露了出来。STP的缺陷主要表现在它基于时间进行收敛。

当拓扑发生变化后,整个网络需要重新执行生成树收敛计算,而该计算延时称为Forward Delay(转发延时),协议默认值是15秒。在所有网桥收到拓扑变化的消息之前,如果旧拓扑结构中处于转发状态的端口还没有发现自己在新的拓扑中应该停止转发,则可能存在临时环路。为了解决临时环路的问题,STP使用了一种定时器策略,即在端口从阻塞状态到转发状态中间加入侦听和学习状态,两次状态切换的时间长度都是Forward Delay,这两种状态下交换机不转发任何数据帧,这样就可以保证在拓扑变化时不会产生临时环路。但是,这个看似良好的解决方案实际上带来的却是至少两倍Forward Delay的收敛时间,这对某些实时业务(如语音视频)是不能接受的。