本篇是关于STP协议的,之前我把这玩意想简单了,不明白为什么要搞根端口,指定端口一堆玩意,本来嘛,构造生成树,或者最小生成树都是极其简单的玩意,搞这么复杂干嘛。
现在想想,是没有搞透STP的目的,它不是为了找到可用的链路,而是为了找到可用的端口。这一点可跟OSPF这种找路径的协议有本质的不同。
看看下边这个图我来详解一下选根端口,指定端口等等是怎么回事。
下边先讲一下书上怎么说,再讲一下我的个人理解。
首先讲一下怎么选根端口和指定端口。
在本图中,假设所有链路代价一样,都是1,并假定A被选为根桥,那么开始找根端口,啥是根端口?根端口是针对非根交换机而言的,每个非根交换机要找一个端口来接收来自根桥的数据,我们自然要找离根桥最近的那个端口,比如B,就是B3端口,有人可能会说B4到根桥距离跟B3不一样吗?不一样!!! 注意,B4接收根桥的数据的距离是3,路径是A2->D2->D1->C3->C4->B4,你可能以为A1->B3->B4这条路到B4更近,没错,可是这条路里边B4是作为出端口,而不是入端口存在的。
okay,这么一看,根端口就出来了,就是B3,C4(其实C3到根桥和C4一样,但一定要选一个,有其他规则帮忙选,我假定这里选的是C4),D2这三个端口。
下边开始选指定端口,啥是指定端口?就是处于激活状态的端口,可以转发数据。这些端口的存在不会造成回路。那么,任何一条链路需要选择一个端口作为指定端口,链路分两种,包含根端口的链路和不包含根端口的链路。
包含根端口的链路,另一个端口肯定是指定端口,因为根端口的数据需要从另一个端口传过来,所以另一个端口必须是激活状态。
不包含根端口的链路,两个端口只能选择一个作指定端口,另一个处于阻塞状态,为啥,因为两个都激活的话就形成环路了。下边在说人话里我会讲为啥。这俩端口选哪个作指定端口?谁所在的交换机离得近选谁呗。图中指定端口就是B4和D1。
下边我来说人话,说一说我对这个玩意的理解。
其实吧,我觉得本来这事挺简单的。首先,明确目的,我们是为了寻找所有的可用端口,同时避免环路。
okay,先看怎么避免环路,简单,根据拓扑关系构造一颗生成树就行了,这里感觉生成树的方法,没有用最小生成树的算法,或者其他方法,用的是先指定根结点,然后求出所有结点到根结点最近的路径,这些路径包含的链路就是生成树的一节节链路。另外,求其他结点到根结点的最短路径也没用迪克斯特拉算法,因为这是个并行系统,其他交换机只用等着根结点传来的数据,然后选出来路最短的那个就知道最短路径跟哪个端口相连了。
我们看看STP算法是怎么做的:首先根据一定规则指定根桥,然后根桥给其他交换机发数据,我估计这数据包里肯定有距离信息,并且每过一个交换机,就要更新一下已经途径的距离信息,这样每个交换机的每个端口都收到不同距离信息的数据包,其中最小的数据包是从哪个端口进来的,该端口所在的链路就肯定是最短路径中的一个链路,换句话说,这条链路要激活。
我们分析一下就能发现,这条链路两端的端口,一个端口就是上边选出来的所谓“根端口”,另一个就是指定端口。
按说到这就完了,生成树构造完毕,已经选出了处于激活状态的链路和端口,所有交换机都能实现互通而且没环路了。在上图中,此时AD,AB,BC三条链路是激活的,即A1,B3,B4,C4,A2,D2是激活的端口。
但是,考虑另一个问题啊,要是这么完了,那右边的电脑E就连不上了,因为链路CD不可用,咋办?好办,开通CD肯定不行,会造成环路,那么开通其中一个端口呢?没问题,只开通一个端口,这条链路依然不通,但是给电脑E保留了连接途径。所以凡是被关闭的链路,只关闭一个端口,还会激活一个端口,上边把这种端口也称为指定端口。这里选择激活端口的规则就是谁离根桥近就选谁。
好了,我的思路就是这样,先构造生成树,生成树包含的链路的俩端口都是激活端口,对于剩下没被生成树选中的链路,俩端口选一个激活,另一个关闭。我的思路中没有什么根端口和指定端口,只有激活端口和关闭端口,根端口和指定端口都是激活端口。
okay,还有几个小问题讲一讲,①上边说到“不包含根端口的链路,两个端口只能选择一个作指定端口,另一个处于阻塞状态,为啥,因为两个都激活的话就形成环路了。”这是怎么回事,现在好懂了,所谓不包含根端口的链路,就是不在生成树中的关闭链路,如果把这链路激活,生成树就有环了,因为生成树没环,同时任意两点都有路径互通,而且是唯一路径,比如上图的CD两点在生成树中有唯一路径,你要是把CD这条不在生成树中的线路激活了,那到C到D的路径就有两条了,肯定有环。
②对于关闭链路,激活一个端口使之与外界相连会不会造成环路?不会,因为关闭链路代表着一个网段,其间没有交换机,都是终端,终端不转发数据,所以不用担心环路。
③这种类似迪克斯特拉算法找每个结点到根结点最短路径然后构造生成树的方法行得通吗?会出现环吗? 不会,这个我就不详谈了,考虑一下迪克斯特拉算法的过程就知道为什么了。
------------------------------------分割线---------------下边才是我转的文章,上边都是我的个人看法-----------------------------
---这里主要是关于生成树的原理的讲解(主要应用于二层交换技术即局域网交换技术),明白的就很简单。我的知识比较浅薄,这里的生成树是基于在同一个valn里面的。多个VLAN的解决协议则是MSTP的能够解决的。
1.STP存在的意义:
树与图的最大不同则是,图是有环路的,树则是没有环路的。用树的特性来解决网络环路的问题是再合适不过的啦。在实际的网络配置当中,交换机与另一台交换机的链路是不可能只有一条链路。就像高速公路发生塌方,我们则会此路不通再找另一路。但是这样会出现一个问题,各个交换机设备都有链路连接,数据报到达目的主机的路线机会增多,从而使数据报在交换机之间不断转发,形成一个环路。如果我们给各个数据帧指定一条到达目的主机的最短路径,那么就不会形成环路,因为数据帧就会沿着我们给定的路线传输。
多链路形成的环路问题;1.广播风暴 2.多重复帧复制 3.mac地址表不稳定(可以自行百度)
2.STP是根据什么依据来指定到达目的主机的最短路径的(选择标准是什么?):
2.1 选择最低的BID;
2.2 选择最低的路径开销(一定是到跟桥的路径);
2.3 选择最低发送者的BID;
2.4 选择最低端口优先级;
2.5 选择最低端口的ID;
3.STP选择的步骤:
3.1 选择根桥;
3.2 选择根端口(RP);
3.3 选择指定端口(DP),而非指定端口进入阻塞状态;
3.4 RP,DP设置为转发状态,其他端口为阻塞状态;
值得注意的是:STP是交换机自带的,可以自我生成。
在每个接受端口累加开销值(比如A----->B 路径开销为19 ,初始值为0 在B的端口接受时初始值累加为19 而从A—>B的途中初始值依旧为0)
每个非根桥交换机都选出一个根端口
每一个vlan都有一个生成树
VLAN1是删不掉的,因为所以的端口都在里面
名词解释:1.根桥:树的特点则是有根节点的,而这里的根桥就是相当于树的根节点。以根桥为起始点发散出去。
2.BID:选择根桥就需要交换机自我选择,需要交换机们的通信,这些信息被称为BPDU(桥协议数据单元),每两秒发送一次,BPDU的包含信息比较多,BID就是 其中的一种。BID最小的就是根交换机ID。BID=桥优先级+桥Mac地址,一般交换机的桥优先级都是一样的,所以一般比较Mac地址的大小。
3.根端口:不是根桥的交换机,选择一个端口用来连接根桥。根端口只能在非根交换机上选取。
4.指定端口:每两个交换机之间的链路上选择一个端口。
4.实例:
4.1 路径值如图:以太网 19 ,百兆网 4.
BID如图:列如:32769 0001.635C.D3A5
A,B,C,D,E为交换机的名字
查看BID的命令为:show spanning-tree
在同一个vlan里面:
4.2 STP的流程:
1.选择根桥:
如图:比较全部设备的BID,其中E的BID最小(由于都是32769, 所以比较的Mac地址,得出数字最小的),所以E为根桥
2.选择根端口
为每一个非根桥的交换机(这里指A,B,C,D)选择一个距离根桥的最短路径。
即:C---->E :根端口为C的F0/3 路径为 19 最小。
D---->E :根端口为D的F0/5 路径为 19 最小。
B---->E :根端口为B的F0/3 路径为 19 最小。
A---->E :他不能直接到达,需要第三方,他有两天路径;
A---->B---->E :路径为19+4
A---->C---->E :路径为19+4
路径开销一致进行第三条判断依据:最低发送者的BID(对于A来说,B,C为发送者),
因为C的BID小于B的BID,所以选择 A---->C---->E这条路径,所以
根端口为A的G0/2 路径为19+4 最小。
3.选择指定端口:
为一对交换机之间选择指定端口(即路径最小的为指定端口):这里就举几个例子,主要是太多了难得写。
注意;这里是在接受的端口累加路径的开销值。从E出来的路径开销值初始值都为0
3.1 D------------------E: 路径开销为19 (在E的端口初始值为0,在D的端口初始值为19,在中间的那条线上初始值为0)
如何判断: 站在D,E的中间, 前往D的方向,到达D的端口,开销值为19. 前往E的方向,开销的初始值为0. 0<19
所以指定的端口为 E的F0/5;
3.2 B-----------------D: 路径开销为4 (在B的端口初始值为19,在D的端口初始值为19 ;路径开销值是到达根桥的路径值)
如何判断: 站在B,D的中间,由于路径开销相等,进行第三条判断(比较发送端的BID)因为B的BID(0060.3EEE.3E25)>D的BID(000C.CFD1.67BA)
所以指定的端口为 D的G0/2;
3.3 其他大都是在这样判断的。
4.根端口与指定端口设置为转发状态,其他端口为阻塞状态:
交换机自动设置,也可以管理员再次设置。(如何配置,我会写到其他的篇的地方)
5.特殊情况:
在前面我们只用到了前三条选择指标,其实前三条已经可以判断出80%~90%的情况,还有极个别情况如图:
1.BID最小 :A为根桥
2.B----->A的根端口:
由于路径一样,路径开销都为19 ,只有一个非根设备,不用比较(这是第三条判断)。
用show spaning-tree 其中F0/5与F0/3的端口优先级都为128.(这是第四条判断)。
比较发送者的端口ID(对于B来说 A为发送者)
因为 A的F0/9 < A的F0/10
所以连接在F0/9的那条线上的B的指定端口为F0/5.
---------------------
作者:二百五的春天
来源:优快云
原文:https://blog.youkuaiyun.com/qq_36248475/article/details/75008171
版权声明:本文为博主原创文章,转载请附上博文链接!