【版权声明:原创翻译文章,翻译水平有限,错误在所难免,翻译作者对文章中存在的错误或遗漏所造成后果不承担任何责任,请谨慎转载。转载请保留本声明及出处:blog.csdn.net/shallnet
,下载该书英文版】
在最基本的情景中,生成树协议(STP)是一个环路保护协议,它允许网桥之间通过相互通信去发现网络中的物理环,然后网桥通过指定的算法是网络形成一个逻辑上无环的拓扑,也就是说,STP创建一个由叶子和树干构成的无环树形结构网络。在后面的章节将讲述各个网桥之间如何通信以及STP算法如何工作。
在网络中存在环有很多原因,你经常会发现有人为地让网络连接成环,以试图对网络提供一个冗余备份,一旦某一条链路或交换机出问题了,另外一条链路或交换机还可以继续使得网络工作。不过环也有可能是因为使用错误而产生的(当然,这绝不会发生在你的身上)。图6-1
展示了一个典型的提供冗余备份的交换机网络。
图6-1. 使网络存在环可以提供一个备份网络
在一个桥网络中有环可能会导致广播环路和mac地址表异常,这对桥网络来说潜在的致命问题。
广播环路
广播数据和2层环路结合在一起是相当危险的,如下图6-2。
图6-2 未使用STP,广播数据包循环转发形成环路。
假定所有交换机都没有运行STP。
第一步:主机A向广播MAC地址发送一个帧;
第二步:帧通过以太网链路媒体传送到Cat-1和Cat-2;
第三步:当帧在Cat-1的端口port-1/1上收到,Cat-1执行“第三章 网桥技术”所讨论的转发表学习算法并将洪泛该帧,此时帧从端口Port1/2转发出去;
第四步:该帧继续传输以太网下面所有节点,Cat-2的端口Port1/2也将接收到该帧;
第五步:Cat-2也将把该广播帧从端口Port1/1洪泛出去,;
第六步:进而,该帧又继续传送到Cat-1 端口Port1/1上;
第七步:Cat-1作为一个交换机,按照交换机正常转发将会把该帧从端口Port1/2再一次地发送出去;
现在可以看到一个环路已经形成了。
并且,上面描述图6-2还忽略了第二步广播包还到达Cat-2,在Cat-2也会洪泛该帧并在下面的节点中传输,也会导致和上面广播包传输相反的一个环路,总之,要记住这种环回回路会在两个方向都会产生。
从图6-2可以得出一个重要的结论:网桥的回路比路由回路要危险得多。为了搞明白这点,我们回到第一章“Desktop Technologies.”讨论的以太网帧格式。比如,图6-3给出了DIX V2以太网帧的格式。
图6-3.DIX版本2以太网格式
要注意DIX版本2以太网给格式仅仅包含两个MAC地址、一个类型域和一个CRC(作为下层数据添加在后面)。不一样的是,IP头部包含一个生存时间(TTL)域,该值被发送IP包的主机设置并在每经过一个路由之后减一,当该值为0时,该包会被丢弃,这样路由器就防止了“来回打转”的数据报文。以太网帧不像IP数据包那样有一个TTL域,所以一旦有一个帧在网络上形成环路,该帧将永远在网络中持续转发,直到出现以下情况:
- 某一个桥被关闭了或断掉一条链路。
- 世界毁灭了<译者注原文:The sun novas>。
这似乎没有那么令人害怕,但是比图6-2示例复杂的网络在实际上会引起一个按指数倍数增长的环路,每一个帧从交换机每个端口发送出去,总的帧的数量增长相当快。我曾亲眼见证过一个ARP在两个OC-12 ATM 链路中跑了45分钟(for non-ATM wizards, each OC-12 sends 622 Mbps in each direction; this
is a total of 2.4 Gbps of traffic)<译者注:上一句为原文,目前还不能理解,未翻译>,对那些还没有认识到这个问题严重性的人来说,那是相当糟糕的事。
最后,想象一下广播风暴给像图6-2那样的简单用户带来的影响,他们不仅是不能玩Doom(一个校园网络上流行的小游戏),他们几乎不能做任何事(go home除外)!回想一下第二章“Segmenting LANs”,广播包是必须被CPU处理的,这样的话,所有PC也因为处理广播风暴而被卡死,就连连在该网络上的PC的鼠标指针都无法移动,直到你让PC不再连接到该局域网中,才可以PC恢复到正常的操作,一旦你再次连接上该局域网,广播包会再次占满CPU
。如果你还从来没亲身经历过此事,那么当你某天晚上遇到只有你最讨厌的那个人在使用网络,你可以随便把某个VLAN(比如VLAN 2)搞成物理环路,然后执行set spantree 2 disable, 试试看会不会出现这种情况。当然,如果最讨厌的那个人是你老板的话就别这么干啦!
网桥MAC地址表异常
许多 交换机/网桥 管理员对了解上面讨论的广播风暴基本问题,但是很少有人知道即使单播帧也会在包含环的网络中无限循环转发。图6-4举例说明这点。
图6-4.未使用STP情况下,即使单播包也会循环转发并使MAC地址表异常
比如,假设Host-A的ARP表拥有一个Host-B对应信息,打算发送一个单播ping包给Host-B,但此时Host-B临时从网络中移除了,并且交换机中相应的MAC地址表也更新了。如果此时交换机都没有运行STP,正如先前的示例,帧会传输到两个交换机的Port 1/1(第二步);现在只从Cat-1角度考虑问题,由于Host-C关闭了,Cat-1的Mac转发表中没有Host-C的地址CC-CC-CC-CC-CC-CC,因此该帧被交换机洪泛(第三步);第四步,Cat-2在Port
1/2接收到该帧,在该节点上发生两件事(都很糟糕):
- Cat-2洪泛该帧,因为该交换机并未学习到Mac 地址CC-CC-CC-CC-CC-CC(第五步),这使得环路形成并且使得网络挂掉。
- Cat-2注意到其仅仅在端口Port1/2上接收到源地址为AA-AA-AA-AA-AA-AA的帧,然后改变其上面MAC转发地址表条目到错误端口!
随着帧在相反的方向打转(回忆一下循环转发存在于两个方向上),你会看到Host-A的MAC地址会在Port 1/1和Port 1/2之间不停来回切换。
简而言之,不仅仅单播ping包会持续地占满整个网络,并且网桥MAC地址转发表也会异常,要记住不仅仅只有广播包才能干掉你的网络。