生成树、生成树工作原理、生成树算法、BPDU及生成树应用实例
一、网络环路问题
当网络中存在物理环路时,会导致广播风暴,会产生巨大的网络流量,极其容易造成交换机死机
如下图所示,有两台交换机A、B,交换机A的0/3端口连接MAC地址为11的客户端,交换机B的0/3端口连接MAC地址为22的客户端,交换机A的0/1端口和交换机B的0/2端口相连,从而使11和22可以通信。但是如果此时交换机A和B相连的这根线断了怎么办呢?所以为了防止网络失效,我们在交换机A和B之间再连一根线,用交换机A的0/2端口连接交换机B的0/1端口,从而达到冗余备份的效果。
但是直接这么连的话,会有一个问题。比如11要给22发送数据,我们知道交换机会学习维护一个MAC地址表,此时交换机A学到 11 和 0/3 的一个对应关系,因为此时交换机A中的MAC地址表中没有目的地址,所以这个数据会广播给交换机A的所有端口。 当从交换机A的0/1端口出去时,此时交换机B会学到 11 和 0/2 的一个对应关系,因为没有目的地址,然后交换机B也会执行广播,把数据发给他的所有端口,最终这个数据又从A的0/2端口回到了交换机A,此时交换机A又学到了11 和 0/2的一个对应关系。
当从交换机A的0/2端口出去时,此时交换机B会学到 11 和 0/1 的一个对应关系,因为没有目的地址,然后交换机B也会执行广播,把数据发给他的所有端口,最终这个数据又从A的0/1端口回到了交换机A,此时交换机A又学到了11 和 0/1的一个对应关系。
最后在这两个交换机之间形成了2个圈,这个圈就被叫做网络环路。这个网络环路会永远不停的在交换机内部之间进行运转,直到交换机死机为止。
我们可以看到网络环路是必须要解决的问题,当网络中存在物理环路时,会导致广播风暴,会产生巨大的网络流量,极其容易造成交换机死机。如下图所示:
二、生成树协议及工作原理
生成树协议可以解决上述网络环路问题。生成树协议: Spanning-Tree Protocal ,简称STP。
STP工作原理
如下图所示,三个交换机之间两两相连,很明显这个网络存在网络环路问题。生成树是如何防止环路发生的呢?
1、把某一条链路的某一个端口逻辑上down掉,从逻辑上断开环路,从而避免环路发生,注意这里只是在逻辑上down掉端口,并没有真正的把线拔掉
2、 当任意一条主链路发生故障时(主链路即交换机A和B,B和C之间的线),断开的端口将被自动激活,恢复通信,从而起到冗余备份的作用。
这就是生成树的工作原理,总结如下:
1、某一条链路的某一个端口逻辑上down掉,从逻辑上断开环路,从而避免环路发生
2、当任意一条主链路发生故障时(,断开的端口将被自动激活,恢复通信,从而起到冗余备份的作用。
三、STP算法
在生成树中,我们要down掉哪条链路的哪个端口呢?总不能随便去down,生成树通过生成树算法来决定down掉哪个端口。
STP将一个环形网络生成无环拓扑结构需要三步:
1、选择根网桥(root bridge),网桥其实就是交换机,即选择根交换机
2、选择根端口(root ports)
3、选择指定端口(designated ports)
1、选择根网桥
每台交换机都有一个ID,交换机ID被称为BID,每个交换机的BID都是唯一的,所以不可能发生冲突,交换机之间选择BID值最小的交换机作为网络中的根网桥。BID是由2字节的交换机优先级和6字节的交换机MAC地址组成的,华为的交换机优先级取值范围为0-61440,默认值为32768,我们在给交换机配置优先级时,不能随便配,所配的优先级数字必须能被2整除,且必须是16的整倍数,且最小值为4096,例如配成4096,8192 等。选择根网桥时,先比较网桥优先级大小,在比较网桥MAC地址大小。
如下图所示,我们可以看出,应该选择交换机SWA为根网桥。
2、选择根端口
首先我们要明白,根端口并不在根交换机上,根端口是指用来从根交换机那里接收信息的端口。在网络中,除了根网桥以外,所有的其他交换机都是非跟网桥,所以根端口就在非根网桥上。选择根端口也分为4步:
@1:最低的到达根网桥的路径开销
根路径成本:是非根网桥到根网桥的路径上所有链路的成本之和。如下图所示,交换机B到根网桥交换机A的根路径成本是19,交换机C到B的根路径成本是100,那么交换机C到A的根路径成本就是119。而根路径成本是根据网络的带宽来决定的,带宽越高,根路径成本越低,带宽越低,根路径成本越高,如下图所示:
在下图例子中,我们看到交换机之间的带宽都是100M,所以他们的根路径成本都是19,在选择根端口时,交换机C右边端口的根路径成本为19+19=38,而交换机C左边端口的根路径成本为19。所以我们可以直接选择出非根网桥B、C上的根端口。
@2:最低的发送方网桥ID
当根路径成本一样时,我们没办法直接选择出根端口。如下图所示:交换机A为根网桥,B为非根网桥,带宽都是100M,此时B上的两个端口到A的根路径成本都是19,此时就需要根据最低的发送方网桥ID来判断。但是现在对于交换机B来讲,A就是发送方,两条链路的发送方都是A,所以我们也无法根据发送方网桥ID来选,此时就要看第三步了。
@3:最低的端口优先级
什么是端口优先级呢?类似于交换机有自己的BID,端口也有自己的PID,端口PID由8位的端口优先级和8位的端口编号组成。每一个端口都有一个自己的PID值。端口优先级的取值范围是0-240,默认值是128。可以选择最低的端口优先级作为根端口。但是如上题所示,如果交换机B的配置都是默认的,那么交换机B的两个端口优先级都是128,此时还没办法选出根端口,这时就要看第4步。
@4:发送方最低的端口ID
如果端口优先级是默认的128,端口编号是E/0/0/1,那么在计算端口ID时,是以小数点的形式计算的,这个的端口ID就是128.1,E/0/0/22的端口ID就是128.22。所以在上边那个题中,如果前三步都一样,我们此时要选择发送方最低的端口ID,对于交换机B来说,A是发送方,A的两个端口中,我们看谁的端口ID比较低,然后选择较低端口对端的B上的端口作为根端口。
3、选择指定端口
根网桥上的所有端口均为指定端口。这里说的选择指定端口是指在非根网桥上选择指定端口。为什么需要在非根网桥上选择指定端口呢?
如下图所示,交换机B是根网桥,交换机A下边的端口和交换机C左边的端口是根端口。为了防止网络环路,我们要在交换机AC之间的链路上选择一个端口down掉,而另一个端口就是指定端口。
选择指定端口也需要4步:
1、BPDU中的根网桥ID
如上边问题中的图所示,我们可以看到只有交换机B是根网桥,所以BPDU中的根网桥是一样的,所以根网桥ID也是一样的,无法选择出来。在看第二步。
2、最低的到达根网桥的路径开销
交换机A右边的端口到根网桥B的开销是38,交换机A上边的端口到交换机B的路径开销也是38,所以还是一样的。依然无法选择出来。在看第三步。
3、发送方的网桥ID
对于A和C来说,发送方都是B,所以发送方网桥ID也是一样的,在看第4步。
4、若优先级相同,则具有最低MAC地址
其实就是比较交换机C和A谁的PID值最小。若经过比较,C的PID较小,则C上的端口就为指定端口。
所以最后A右边的端口就成为了要down掉的端口。
四、BPDU
1、什么是BPDU
BPDU:bridge protocol data unit 。桥接协议数据单元。
我们说在选择根网桥时,是根据PID来选择的,选择网络中PID值最小的交换机作为根网桥。但是交换机如何获取其他交换机的PID值从而进行比较呢?
交换机把各自之间相互比较要用到的信息放到BPDU中,BPDU相当于一个载体,正常情况下,BPDU中是空的,当交换机想比较PID值时,他们需要把PID值放到BPDU中,然后把BPDU发送给别的交换机,这样交换机就知道别的交换机的PID值了。如果想比较别的,就把要比较的信息放到BPDU中传过去。所以BPDU就相当于一个载体,用来发送交换机要比较的数据。
所以STP使用BPDU来选择根网桥,同时也使用BPDU来计算根路径成本。在生成树当中,我们的交换机之间所传递的所有信息都是使用BPDU来传递的。
总之:交换机之间使用BPDU来交换STP信息。
另外,BPDU使用组播发送,组播地址为:01-80-C2-00-00-00,这个地址是固定的,不会改变。组播的概念为每个交换机都把自己的BPDU传送到这个组播地址,那么同组的其他交换机就都可以收到这个信息了。
BPDU有两种类型:
配置BPDU:用于生成树计算
拓扑变更通告 TCN BPDU:用于通告网络拓扑的变化。
2、BPDU的时间间隔和控制范围
每经过2S,交换机就会发送一次BPDU,用来保持活跃性。不然如果有一个交换机挂了,别的交换机也不知道。所以每隔2S,网络中的交换机就互相发送一次BPDU。
BPDU每经过一个交换机,message age加1,若message age大于max age,则非根网桥丢弃该BPDU。max age的值为20。可以通过max age来控制生成树网络的范围。
五、STP应用实例
实例一:
分析结果如下:
实例二:
分析结果如下:
注意:分析的时候我们要一个环路一个环路的分析,不能混在一块儿看。另外根端口对端的端口一般都是指定端口。
六、STP的五种端口状态
1、禁用状态(disable): 端口是关闭的,没有启用。不发送BPDU,也不接收BPDU,不学习MAC地址,不转发数据。
2、阻塞状态(discarding):即我们前边提到的down掉的端口就是阻塞状态。不发送BPDU,但是可以接收BPDU,不学习MAC地址,不转发数据。
3、侦听状态(listening): 发送BPDU,也接收BPDU,不学习MAC地址,不转发数据。
4、学习状态(learning):发送BPDU,也接收BPDU,学习MAC地址,不转发数据。
5、转发状态(forwarding): 发送BPDU,也接收BPDU,学习MAC地址,转发数据。
其中侦听状态和学习状态被称为中间态,所谓中间态是指交换机的端口不会一直停留在侦听和学习状态,这两个状态只是生成树在网络中的一个中间状态,最终端口的状态要么在转发态,要么在阻塞态,要么在禁用态。
七、STP计时器
我们前边说到,生成树是为了解决网络环路的问题。当有一条链路换掉时,被down掉的端口会UP起来,不会影响通信。但是这个端口会立即UP起来嘛?当然不是,这个端口需要整整50S才会UP起来。如下图所示,从阻塞态到侦听态需要20S的时间,从侦听态到学习态需要15S的时间,从学习态到转发态需要15S的时间,所以总共需要50S的时间这个端口才开始转发数据。
八、STP的配置
在交换机上,STP技术默认随着设备的启动而自动运行,即会自动选择根网桥根端口等。但是我们也可以手动进行配置,将一个交换机手动配置成根网桥。
另外生成树有三种模式:
普通生成树
快速生成树
多生成树
今天描述的知识都是普通生成树,另外两种之后在解释!!!
九、交换机编号、
思科交换机:
比如E 0 / 1 : 表示的是第一个模块的第一个端口。 E 0/12 : 第一个模块的第12个端口。E1/6 : 第二个模块的第6个端口。 前边的数字代表的是模块,后边的数字代表的是端口。 G0/1: G表示的是千兆口的意思。
华为交换机:
华为交换机由3位组成。比如 E0/0/1: 表示第一个板卡第一个模块的第一个端口。 所以三位的时候表示的分别是板卡、模块、端口。