分享

【分享】生成树种类

 新用户16501297 2022-04-29
STP的类型:
DEC STP
Common Spanning Tree(CST) = IEEE 802.1D(802.1t)补充 ===>
Per VLAN Spanning-Tree plus(PVST )  思科私有,默认运行的协议
Rapid Spanning Tree Protocol(RSTP) = IEEE 802.1w ===>
Rapid PVST 思科私有
Multiple Spanning Tree Protocol(MST) = IEEE 802.1s

DEC STP
DEC STP是世界上第一个STP,由Radia Perlman在1985年于DEC公司开发出来。
DEC STP是所有生成树的原型,现在已经被淘汰;
Common Spanning Tree(CST)
CST在1990基于DEC STP设计,是首个协议标准,协议号为IEEE 802.1D,如果交换机运行在CST,交换机只进行一次STP计算,无论交换机上有多少个VLAN,所有流量都会走相同的路径。

STP增强的技术或者将来取代STP的技术:思科私有!
VSS:要求65系列的交换机
vPC:要求Nexus系列的交换机
它们的本质是在一个企业园区网当中,即使不适用STP技术也能保证无环路转发,里面借用一些EC的技术;
这两个技术能够取代生成树的一个很大的原因是他们的收敛速度,它们的收敛速度能够达到毫秒级别。

CST的收敛速度在30秒左右;
RSTP、MST收敛速度在6秒左右;
因为VSS和vPC本身受到硬件的制约,所以STP也不会一下子被淘汰;

STP计算无环路径使用的算法是SPA(最短路径树)算法;
网状结构的图形通过SPA计算成树形结构;

那STP是如何实现的呢?
分四步骤:
1.选Root
2.选RP,到达Root最近的端口
3.选DP
4.剩余所有端口Blocking

下面我看一下整个STP的选举过程:
STP选举的过程也像其他协议一样通过相互之间发送数据报文来协商;
STP的报文类型只有两种:
STP之间的报文我们管它叫做BPDU,一种叫配置BPDU(C-BPDU)一种叫TCN-BPDU)
C-BPDU:交换机与交换机之间用来做STP配置的;
TCN-BPDU:交换机与交换机之间用来通告拓扑变更的;
它们的结构相同:
BPDU的帧格式:35个字节12个字段
图片
Protocol ID:表明该BPDU是哪种生成树协议;
Version:也是用来表示是哪种生成树协议;
Message type:配置BPDU是0x00,TCN BPDU是0x80 用来做生成树状态变更通知
Flags:用来做一些高级的STP特性;
Root ID、Cost of path、Bridge ID、Port ID这四个字段主要用来做生成树的选举;
其中,Root ID有两部分组成一部分叫priority,一部分叫mac地址;
图片
思科认为桥优先级2btyes过多,所以对桥优先级做了一些改动,前4bit依然做优先级,后12bit做扩展系统ID;
扩展系统有什么作用或者好处呢?
在802.1D中,如图:STP收敛之后的情况
图片
B要把流量给C必须通过A到达,而且不是某个vlan的流量要通过A到达而是所有vlan的流量都要通过A到达。
这就是传统的生成树!
思科做了改进,也就是扩展了12bit的系统ID,2^12=4096刚好是所有vlan数目;
这样使得每一个vlan有一个生成树;即可以使得某些vlan直接到达C某些vlan通过A到达C;
这个协议思科私有叫做Per-VLAN Spanning-Tree Plus ==》PVST
思科默认运行的STP是自己的PVST 尽管sh spanning-tree显示的是ieee,也可以严格的说思科不支持802.1D,但是PVST 可以兼容802.1D;

业内有这么一个说法:华为没有售后,思科没有研发!
思科产品有Bug,唯一能做的就是发case给售后,你要么换IOS或者换硬件;
华为产品有Bug,直接叫研发工程师到现场,你需要什么功能现场给你写、你有什么Bug现场给你补;

Bridge ID结构跟Root ID一样:
Root ID是跟的优先级和mac地址;
Bridge ID是自己的优先级和mac地址;
如果Bridge ID和Root ID一样那说明这台交换机自己是根!

Cost of path:路径开销
资料会有两套标准:
表格式(100M是10,10M是100,1G是1)但凡看到这样的标准不要去记了,已经不用这套线性标准了;(因为如果是10G?那怎么算?)

Port ID:由两部分组成,一部分是端口优先级另一部分是端口号

生成树选举完成之后,生成树的维护主要靠一下这两个字段来维护:
Message age:消息年龄
Max age:最大年龄

Hellotime:Hello时间
Forward delay:转发延迟

STP在选举的时候接口会历经五种状态:
1.Disabled,接口没被激活,shutdown或者没插上网线
2.Blocking,接口no shudown或者插上网线检测到电信号接口马上进入Blocking状态,该状态可以认为是过度状态或者瞬时状态不经历任何时间,一闪而过;
3.Listening,该状态接口停留15秒钟,用来接收和发送BPDU而且只用来接收和发送BPDU,如果该15秒内接收到用户流量交换机不做转发,也不学习mac地址,全部丢包。
4.Learning,也是停留15秒钟,该状态继续接收和发送BPDU,单独构建mac地址表项,用户数据依然不能泛洪、不能单播转发。防止大面积泛洪。
5.Forwarding,
图片
因为Listening和Learning都历经15秒,所以大概要等30秒交换机才能转发数据;

除了上面两个时间参数STP的其他时间参数:
1.Hello,根桥发送BPDU的时间间隔,默认是2秒钟;
2.Forward Delay,Listening和Learning的持续时间,默认都是15秒钟。
3.Max age,指BPDU存活年龄,端口缓存中的BPDU生存时间,默认是20秒钟,如果长达20秒钟没收到,就会重新选举生成树。

生成树的切换一般历经30秒或者50秒。
如果是底层链路问题,例如线路被老鼠咬断等等,这种情况的切换要历时30秒(Listening Learning)
如果是链路对端的设备down掉或者链路光衰等等,这种情况的切换要历时50秒(Max age Listening Learning)
=========================================
生成数选举法则:
1.在广播域内选Root Bridge,每一个广播域都会选择一个根。先比优先级再比mac地址,小的优先。
上机架演示:show spanning-tree表项说明!更改优先级成为根!
spanning-tree vlan 1 root primary 先比的是mac地址如果mac地址比较小就不降优先级,如果比较大才降优先级;
思科建议部署STP的时候保持交换机默认的优先级,在根上敲spanning-tree vlan X root primary,在备份根上敲spanning-tree vlan X root secondary
spanning-tree vlan X root primary = spanning-tree vlan X priority 24576 相等!
spanning-tree vlan X root secondary = spanning-tree vlan X priority 28672   相等!功能一样
2.所有非根桥交换机选根端口(画选举的过程)
1)比Cost(接口到达根最小的花费)
那cost怎么比呢?
图片
例如A、B、C三台交换机互联,A作为根,当他们互联的接口都up up之后,A、B、C开始向外发BPDU,此时假如C收到了来自B发送过来的BPDU,由于B和C的优先级一样但是B的mac地址比C的mac地址小,所以C就把B的BPDU存放在自己的接口缓存中,而C也不会向外发BPDU了.....
cost只有在接口收到的时候会累加(入向累加)
图片
例如:A是根,B和C选RP的时候
B从1口收到的BPDU中cost为:0 19
B从2口收到的BPDU中cost为:0 19 19
C类似!
2)比BID
3)比PID,有两部分组成port-priority和port-number
需要注意的是:端口号不一定等于端口编号但不会影响生成树的计算,因为一般端口编号大的端口号比较大。
图片
端口编号                                                                       端口号
3.选指定端口(发送的BPDU)
1)比cost

图片
例如:A是根,B和C相连的链路选DP
B发送给C的BPDU中cost为:0 B1=0 19
C发送给B的BPDU中cost为:0 C1=0 19
2)比BID
3)比PID
PID的比较只有在一台交换机的两个端口互联的情况下发生!
例如:
图片
4.所有剩余接口被Blocking
调整生成的命令并不多也就一下这几条命令:
spanning-tree vlan X priority xxxx
spanning-tree vlan X cost xxxx
spanning-tree port-priority xxxx
spanning-tree vlan X root primary
spanning-tree vlan X root secondary
命令并不多,判断的过程才是重要的!
===========================================
TCN-BPDU:当拓扑发生改变生成树需要重新收敛交换机之间通过发送TCN-BPDU重新进行生成树的选举;
TCN-BPDU怎么工作?
KJ文档;
STP时间参数调整:
修改hello时间
spanning-tree vlan 1 hello-time 3
修改max age时间
spanning-tree vlan 1 max-age 21
修改forward delay时间
spanning-tree vlan 1 forward-time 16
思科的PVST 跟CST完全一样唯一的区别是PVST 是基于每个VLAN一棵树的;
另外PVST 有自身的限制:最多支持128个VLAN,129个以后的VLAN运行不了生成树;
=========================================
RSTP:
和CST核心完全一样,只不过在RSTP中对生成树的选举和接口的状态进行了一些优化;
关于RSTP的5端口3状态
RSTP的5个端口是:根端口,指定端口,替代端口,备份端口,禁用端口
RSTP的3个状态:丢弃状态(Discarding),学习状态(Learning),转发状态(Forwarding)
禁用端口:很容易理解,就是直接把端口关了
那么什么是替代端口和备份端口呢?
考虑这样一个拓扑:
图片
A、B与根相连,A、B之间用Hub或者透明网桥连在一起,RP和DP的选举跟普通生成树一样,但是A和B之间相连的链路选举完DP之后如果是普通生成树那么除了DP其他端口都会Blocking,但是RSTP中选举完DP之后剩余其他两个接口虽说也是Blocking状态但他们也有自己的名字,例如A下面的接口叫替代根端口(即A的根端口如果没有了下面的端口来替代原来的根端口),B下面的接口叫备份指定端口(即B的DP如果没有了那么右边的接口来替代原来的指定端口)
替代端口:根端口的一个备份,用来在根端口down的情况下接替根端口的工作
备份端口:指定端口的一个备份,用来在指定端口down的情况下接替指定端口的工作
RSTP的端口角色变得更丰富了,Blocking的端口在STP第一次收敛的时候已经算好了当拓扑发生改变的时候哪个Blocking端口是替代端口哪个端口是备份端口。
sh spanning-tree 查看生成树端口的状态;
有个地方需要注意:
接口的Type,分为:p2p和share(根据接口的双工状态发生改变,全双工是p2p,半双工是share)
或者接口下更改:spanning-tree link-type point-to-point/shared
p2p链路可以使得STP拓扑发生改变的时候接口直接进入Forwarding状态(as well as 边缘端口)
RSTP对BPDU做了修改:
图片
Proposal和Agreement被定义作为生成树收敛的过程;
Learning和Forwarding被定义为端口的状态;
Proposal和Agreement如何判断生成树的收敛呢?
我们来看一下RSTP的收敛过程:
图片
如图,最上面是根,根直接连接到C、C直接连接到B、B直接连接到A、A和根之间没有链路,现在假设A的P1口和根的P0口新连一根网线根马上向P0口发一个BPDU,该BPDU中Flag字段的Proposal位被置位或者说发一个proposal的BPDU,A收到之后A把自己所有的其他接口全部都设置为一个特殊的状态,叫sync状态(同步状态)当A把其他所有接口都设置为sync状态后A会向Root返回一个Agreement的BPDU,发完之后生成树就选举完了,从拓扑的更改到收敛只发送了三个BPDU所以收敛的时间最长也就6秒钟,普通生成树需要30秒或者50秒。
spanning-tree portfast 推荐连接主机
spanning-tree portfast trunk 推荐连接到主机,例如刀片服务器
spanning-tree host 该命令的功能三合一(sw mo access、spanning-tree portfast、channel-group disable)
802.1D中端口类型分为两种:
1.Edge:直接转发
2.non-Edge:正常生成树计算
802.1W中端口类型分为三种:
1.P2P:瞬时转发
2.Share:不可以瞬时转发
3.Edge:瞬时转发
RSTP可以和PVST混合使用兼容性没问题,并且在RSTP上show spaning-tree可以看到对端是否是PVST;
Trunk口两端的native vlan不匹配的话,生成树会报错!(原因:STP基本原理:每一个广播域)
Multiple Spanning Tree Protocol(MST) = IEEE 802.1s
是现在使用最多尤其是项目中采用多厂商设备最建议采用的部署方式;
MST可以兼容CST、RSTP
小结:
1.Root:与根相连的端口都是DP
2.BPDU的发送和接收:
DP:都是发送BPDU的接口      即:DP发送BPDU
RP:都是接收BPDU的接口       即:RP接收或者监听BPDU,当然还有Blocking端口
也就是说接口针对BPDU的max age参数只有在RP接口有用。

1



end

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多