购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

以太风暴与生成树协议

领班不小心接错了个端口,咋就导致监视器上的摄像头画面都黑屏了,办公室电脑也上不了QQ了呢?究竟是什么原因导致插错个端口就有这么大的杀伤力,方圆几百米内的电脑、网络摄像机、NVR都无法工作了?其实这与二层转发紧密相关。

以太风暴

以太风暴又叫广播风暴,顾名思义就是广播导致的风暴。为什么广播会导致风暴?主要是交换机在转发广播时有一个规则:交换机的一个端口收到广播帧后,要往所有的其他端口(除收到的端口外)复制一份并转发此广播帧。

以太风暴产生有两个必要条件,那就是网络中必须存在环路和广播帧。

说明

严格地说,除广播帧之外,未知单播帧和未知组播帧也会有一样的效果。所谓“未知”就是指交换机上没有对应的MAC表项。前面我们说过,没有MAC表项的单播帧也是按照广播方式往所有端口复制转发,未知组播帧也一样,所以效果上与未知广播帧相同。通常,广义上的未知广播帧包含了未知单播帧和未知组播帧。

举一个形象的例子,我们假设孙悟空就是一个广播帧,分岔路口是一台交换机,路口就相当于交换机的端口。规定孙悟空每到一个分岔路口,就得拔几根猴毛变成几个孙悟空,确保每个分岔路都有孙悟空去走,如图1-13所示。

图1-13 孙悟空遇岔路拔毛

按照图1-13所示,孙悟空每到一个三岔路口就拔猴毛变出两个孙悟空,如此循环下来去,最后整个路口、路径上都挤满了孙悟空,不出事才怪!

老U驿站里的监控网络也类似于图1-13中孙悟空变戏法的套路,下面将进行详细描述。

图1-14 以太环网实例图A

之前交换机A与交换机B之间只有一根网线互联,领班不小心接错了线,把交换机A的端口④与交换机B的端口④连接起来,如图1-14所示。当交换机A直连的网络摄像机发出一个以太网广播帧后,交换机A的端口①收到这个广播帧,根据上述的交换机转发规则,首先学习这个广播帧的源MAC地址,然后进行转发。由于是广播帧,交换机A会往其他所有端口(排除端口①)复制并转发此广播帧,如图1-15所示。

图1-15 以太环网实例图B

此广播帧又踏上征途,到达交换机B的端口③和端口④后,同样根据交换机转发规则,交换机B学习此广播帧的源MAC地址,然后再进行转发。由于是广播帧,交换机B的端口④收到广播帧后会往除端口④以外的其他端口复制并转发此广播帧,如图1-16所示。

图1-16 以太环网实例图C

同样,交换机B的端口③收到图1-15中步骤的广播帧后会往除端口③以外的其他端口复制并转发此广播帧,如图1-17所示。

图1-17 以太环网实例图D

广播帧到达交换机A后,又会被复制并且转发,这样周而复始地循环下去会导致交换机A和交换机B所有的端口上都充满了广播帧,形成了“以太风暴”,导致真正有用且重要的监控视频数据包都无法正常转发了,如图1-18所示。

图1-18 以太环网实例图E

生成树协议

为了应对这种因为二层环形组网导致“以太风暴”的现象,STP(Spanning Tree Protocol)应运而生。STP是一种二层管理协议,它通过有选择性地阻塞网络冗余链路来达到消除网络二层环路的目的,同时还具备链路的备份功能。

说明

目前为止,我们讲到的交换机均为二层以太网交换机,后续我们还会讲到具有路由功能的三层交换机。二层交换机的另一个称谓是“网桥”或“桥”,在协议描述文档中通常以网桥的名称出现。下面阐述STP时,我们统一以网桥的称谓进行STP的描述。

在讨论STP基本原理之前,我们先看一个直观的例子。

图1-19 城际高速联网图A

图1-19是一个粗略版的地图,城市A到城市B的过路费需要800元,城市A到城市C需要600元,城市B到城市C需要200元。我们假设没有分段收费,只要车辆上了高速,就按统一资费,比如在城市B和城市C之间的某一个点上高速到达城市B,也是200元——够霸道哦,不过这种霸道的收费还挺常见的。我们现在考虑关闭一个城市的出入口,使得城市间依旧可达,并要求消除环路。方案如下:

城市A、城市B、城市C先竞选“首都”。假设城市A按照某种规则胜出,被选为“首都”。城市B和城市C虽然很失落,但是还是得理性地在自己管辖地盘内选出一个通往城市A的高速出入口,规则是:到城市A的费用最低。城市B的接口1和城市C的接口1理所当然成为最佳选择。

接下来就是城市B的接口2与城市C的接口2之间竞争,看谁的出入口会被关闭。处于城市B和城市C之间的车辆要去“首都”城市A,如果选择从城市B走要花800元+200元=1 000元,如果选择从城市C走要花200元+600元=800元。显然从城市C去城市A要省钱。故城市B和城市C这条路上,城市C的接口2获胜,这条路上的车辆都会选走城市C的接口2去城市A。城市B的接口2只好黯然关闭大门,环路得到消除,如 图1-20所示。

图1-20 城际高速联网图B

STP的实现思路也很类似。当初该协议设计者联想到自然界中生长的树是不大会出现环路的,如果网络也能够像一棵树一样生长,就不会出现环路。于是,STP协议中定义了根桥(Root Bridge)、根端口(Root Port)、指定端口(Designated Port)、路径开销(Path Cost)等概念,目的就在于通过构造一棵树的方法达到裁剪冗余环路的目的,同时实现链路备份和路径最优化。用于构造这棵树的算法称之为生成树算法(Spanning Tree Algorithm)。

交换机之间通过交互称为BPDU(Bridge Protocol Data Unit)的报文来实现生成树的拓扑计算。STP BPDU是一种二层报文,目的MAC是多播地址0180-C200-0000,所有支持STP协议的交换机都认识并处理其收到的BPDU报文。该报文里携带有用于生成树计算所需要用到的相关信息。

与前面的例子类似,STP首先进行根桥的选举。选举的依据是网桥优先级和网桥MAC地址组合成的桥ID:桥ID最小的网桥将成为网络中的根桥,它的所有端口都连接到下游桥,所有连接到下游桥的端口角色都成为指定端口——网桥(包含根桥和非根桥)上用来转发业务数据的端口(当然后面提到的根端口也会转发业务数据)。接下来,连接根桥的下游网桥将各自选择一条“最粗壮”的树枝作为到根桥的路径,相应端口的角色就成为根端口。这个过程循环到网络的边缘,一棵树就生成了。

生成树经过一段时间(默认值是30秒左右,2倍的Forward Delay时间)稳定之后,“树”上的端口都进入转发状态,其他端口进入阻塞状态。STP BPDU会定时从各个网桥的指定端口发出,以维护链路的状态。如果网络拓扑发生变化,生成树就会重新计算,端口状态也会随之改变。这就是生成树的基本原理。下面以一个实例来说明STP协议究竟是如何运行的,如图1-21所示。

图1-21 生成树原理示意图A

说明

Forward Delay是端口停留在Listening和Learning状态的时间。

Listening和Learning状态共用一个定时器Forward Delay,默认值为15秒。这个值综合考虑了多种因素。

交换机端口处在Listening状态时只侦听BPDU报文;处在Learning状态时只学习MAC地址,把收到的报文的源MAC地址加入到MAC地址表里。处于这两个状态时交换机端口都不转发业务报文。

第一步:选举根桥

首先要选举出一个根桥。选举的依据是:桥ID(网桥优先级+网桥MAC地址)最低者获胜。假设交换机A、B、C的网桥优先级采用默认值32 768,那么桥ID的大小就取决于它们的MAC,很明显,交换机A具有最低的MAC:0000-1111-AAAA,选举成为根桥。

第二步:选取根端口

在激烈的根桥选举大战中,交换机A胜出,接下来要为非根桥(即图中的交换机B和交换机C)选举出一个根端口。根端口就是离根桥最近的端口,如果非根桥有两条物理链路到达根桥,则优先选举Cost值最小的物理链路(端口的Cost值是交换机根据链路速率等信息自动计算出来的,也可以由管理员手工设置);如果Cost值一样则选择端口ID最小的物理链路。经过一番龙争虎斗后,选取出来的根桥和根端口如图1-22所示。

图1-22 生成树原理示意图B

第三步:选举指定端口

为每台非根桥交换机选出根端口后,接下来要为每段链路选举出指定端口。选择指定端口的原则是依次比较BPDU中4项技术指标(根桥ID、根路径开销、发送桥ID、发送端口ID),其值较小者胜出。每段物理链路无论有多少个端口,都只选出一个作为指定端口,用于转发数据流量,这是真正消除环路的核心法宝。“条条大路通罗马”的情况在收敛后的STP树中不存在,如果存在物理上的多条通路,STP就会从中选出一条最优的路径进行流量转发,阻塞掉其他的端口,如图1-23所示。

图1-23 生成树原理示意图C

很明显,交换机A的端口①距离根桥的距离更短(交换机A自身就是根桥嘛),所以选择交换机A的端口①作为物理链路1的指定端口。同理,交换机A的端口②也被选中作为物理链路3的指定端口。

交换机B的端口①在物理链路1的指定端口竞选过程中失败了,但也不必伤心,因为交换机B的端口①已经得到了一份根端口的工作,STP保证它会处于转发状态,不会惨遭被阻塞的命运。同理,交换机C的端口①也已得到了一份根端口的工作,由STP保证处于转发状态。

接下来要为物理链路2选举指定端口,其过程会稍稍有点复杂。

物理链路2上有两个端口,分别是交换机B的端口②和交换机C的端口②。交换机B的端口②计算自己的路径开销值是20(物理链路2的Cost值10+物理链路1的Cost值10得来),交换机C的端口②计算自己的路径开销值也是20(物理链路2的Cost值10+物理链路3的Cost值10得来),双方打成平手。接下来比较第三项即发送桥ID,交换机B的端口②发现自己的发送桥ID是0000-1111-BBBB,交换机C的端口②发现自己的发送桥ID是0000-1111-CCCC,于是交换机B获胜,交换机C的端口②将被阻塞掉,不能再转发除BPDU协议报文外的业务报文。

经过上面一番竞争和选举后,交换机上的每个端口都有了自己的角色,参见图1-23。只有根端口和指定端口才有资格转发用户业务数据和BPDU报文,而非指定端口则需要丢弃除BPDU协议报文以外的任何报文。

协议也会与时俱进。随着IP网络的发展壮大,它所承载的上层应用越来越多,有些应用对数据报文的中断时间要求很高,而STP在网络拓扑发生变化时收敛时间在30多秒,这对于语音电话或视频监控这些应用而言是无法接受的,快速生成树协议(Rapid Spanning Tree Protocol,RSTP)在这种背景与呼声下横空出世。

RSTP与STP相比,最显著的区别就是“快”,主要体现在:当一个端口被选中成为根端口或指定端口后,其进入转发状态的延时将大大缩短,即端口的状态能够快速迁移从而缩短了流量收敛所需的时间。

根端口的端口状态快速迁移的条件是:本设备上旧的根端口已经停止转发数据,而且上游指定端口已经开始转发数据。

指定端口的端口状态快速迁移的条件是:指定端口是边缘端口(即该端口直接与用户终端相连,而没有连接到其他网桥或共享网段上。网桥设备是无法知道自己的端口是否直接与终端相连,所以需要网络管理员手工将端口配置为边缘端口)或者指定端口与点对点链路(即两台网桥设备直接相连的链路)相连。如果指定端口是边缘端口,则指定端口可以直接进入转发状态;如果指定端口连接着点对点链路,则网桥设备可以通过与下游网桥进行协议交互,确认为点对点链路后该网桥上的指定端口即刻进入转发状态。

与时俱进的脚步不能停,RSTP解决了拓扑变化后收敛时间过长的问题,但是和STP一样存在以下缺陷:局域网内所有网桥共享一棵生成树,不能以VLAN为单位独立阻塞冗余链路,这在很多组网情形中会带来问题。多生成树协议(Multiple Spanning Tree Protocol,MSTP)应运而生,它既可以快速收敛,也能使不同VLAN的流量沿各自的路径转发,还能提高网桥设备的端口利用率,即网桥上的某端口对VLAN2来说是阻塞状态的,但对VLAN3而言是处于转发状态的。相对于STP和RSTP,MSTP的特点如下:

(1)MSTP 把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。

(2)MSTP通过设置 VLAN与生成树的对应关系表(即 VLAN映射表),将一个或多个 VLAN对应一颗生成树,通常我们称一颗生成树为一个“实例”(MSTI);默认状态下,所有的 VLAN都映射到 MSTI的端口上。

(3)MSTP继承了 RSTP的端口状态快速迁移机制;

(4)MSTP兼容 STP和 RSTP,会自适应地向下兼容。

生成树基本配置典型实例

如图1-24所示,网络中所有设备都属于同一个MST域。交换机 A与交换机B为汇聚层设备,交换机C和交换机D为接入层设备。通过配置使不同VLAN的报文按照不同的MSTI转发:VLAN 10的报文沿MSTI 1转发,VLAN 30沿MSTI 3转发,VLAN 40沿MSTI 4转发,VLAN 20沿默认的MSTI 0转发。

图1-24 生成树配置举例

(1)配置VLAN和端口

请按照图在交换机A和交换机B上分别创建VLAN 10、20和30,在交换机C上创建VLAN 10、20和40,在交换机D上创建VLAN 20、30和40;将各设备的各端口配置为Trunk端口并允许相应的VLAN通过,具体配置过程从略。

(2)配置交换机A

(3)配置交换机B

(4)配置交换机C

(5)配置交换机D

(6)检验配置效果

当网络拓扑稳定后,通过使用display stp brief命令可以查看各设备上生成树的简要信息。例如:

家园网友互动

Q:junmily 发表于 2015-8-11 10:55

STP协议的目的MAC地址是0180-c200-0000,为什么设置这样一个特定的MAC地址,有什么讲究么?

A:网语者 发表于 2015-8-13 14:46:27

其实也没什么讲究,就是选定一个组播地址而已,然后标准组织下发通知,告知天下目的MAC地址是0180-c200-0000的就归STP专用了。仅此而已,至于为什么要用组播而不用广播MAC,那是因为用组播可以减少一定的干扰,只有支持STP的交换机才会去侦听并处理这个组播报文。

Q:junmily 发表于 2015-8-13 15:20:08

有个疑问,有环路了就一定会导致广播风暴么?我做了一个实验,交换机没使能STP,在一台交换机上,把VLAN2里一个物理端口与VLAN3里的一个物理端口用网线连起来,没有发生传说中的广播风暴,为啥?

A:网语者 发表于 2015-8-14 10:26:19

严谨地讲,有环路不一定有广播风暴。环路是物理上的概念。回到刚才的问题,VLAN2的接口里的数据,不会转发到VLAN3的接口里去,自然不会导致广播风暴。

有一天,老U坐在办公室里上网看新闻,得知杭州茶馆生意比以往红火,便想通过监控系统看看自家茶室的生意状况。但办公网络和监控网络被VLAN隔离了,于是不得不跑到监控室去瞅一眼。老U心想,VLAN隔离了广播域,好是好,但是确实有点不太方便,难道就没有两全之策?于是马上电话联系了网管朋友,网管推荐老U采用路由器或三层交换机来解决这个问题。

为什么路由器或三层交换机可以解决问题,又是如何解决的呢? SpB/9l8VAmHvIQqX2nCCiWzlKF5+WA4HZsLQtB3A3gOQh3yXkqLJPN1PUxWWCDmI

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开