| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 生成树协议STP、RSTP、MSTP原理是什么?三者有啥区别?一文带你了解! -> 正文阅读 |
|
[系统运维]生成树协议STP、RSTP、MSTP原理是什么?三者有啥区别?一文带你了解! |
在组网中,很可能会出现环路或者称冗余链路,为避免形成广播风暴,需要一种方法来避免形成环路,并且在主链路故障中断时候,可以将冗余链路自动切换为转发状态,以恢复网络的连通性。生成树协议(STP、RSTP、MSTP)就可以实现这样的功能。 STP(802.1D,Spanning Tree Protocol,生成树协议)基本思想将网络的拓扑修剪为树形拓扑,拓扑图形状与一棵树相似,这样就不会产生环路了。
基本概念介绍
BPDU报文分析
接口状态
当交换机的一个接口被激活后,该接口会从禁用状态自动进入阻塞状态。阻塞状态的接口如果被选举为根接口或者指定接口,那么它将从阻塞状态进入侦听状态,并在侦听状态停留15s(转发延迟时间),为了让STP完成整个网络的计算。15s后如果还是根接口或者是指定接口,就会进入学习状态,因为此时交换机没有学习到任何MAC地址,这个状态也要停留15秒,之后才会变成转发态。 计算过程确定跟桥每一个交换机启动stp服务,都会认为自己是跟桥,并向外发送以自己为根桥的配置BPDU报文。 交换机接收到BPDU报文,会和自己的桥ID对比,桥ID由优先级和mac地址组成,先比较优先级,优先级相同,再比较mac地址,值越小就会认为更优。比如接收到BPDU报文的root id为8192-0000.0000.0001,自己的桥id为32768-0000.0000.0002,因为先比较优先级,优先级8192优于32768,则认为自己不是根桥,就不发送认为自己是根桥的BPDU了,并通过接收到的BPDU报文更新自身的配置BPDU。直到网络中所有的交换机都达成一致,认为某一个交换机为根桥,根桥的选举结束,从而确认唯一根桥。 确定端口角色当确认自己本身不是根桥的同时就开始确认端口角色了。 确定根端口当一个交换机多个接口同时接收到了根桥发来的配置BPDU报文,会获取Root Path Cost,也就是根路径开销,与接收端口的链路开销相加,得到此端口到根桥的根路径开销,对比,根路径开销值最小的作为根端口。 如果根路径开销相同,对比BPDU报文中的Bridge Identifier,也就是发送该BPDU报文指定桥的ID,ID小的作为根端口。 如果指定桥ID也相同,则对比Port Identifier,发送口的端口ID,ID小的作为根端口 确定指定端口和Alternate备份端口当确定根端口后,会将通过自己从根端口收到的BPDU报文计算生成的配置BPDU报文与非根端口接收到的配置BPDU进行比较,依次对比根路径开销、指定桥和端口id,自己计算产生的BPDU优于接收到的,则将此接收到的端口设置为指定端口,否则设置为Alternate端口(即阻塞起来)。 拓扑结构发生改变时当有端口断开或新网桥加入时,拓扑发生了改变,就会使用到TCN BPDU报文,目的是让STP能快速的收敛。 产生BPDU报文的条件:
拓扑改变时候STP处理步骤:
STP的不足为避免环路,每一个端口在确认为根端口或指定端口后仍需要等待30s才能进入转发状态。 对于网络中有大量主机时候,频繁上下线会导致频繁发送TCN BPDU报文,导致网桥MAC地址老化时间长期为15s。 RSTP(802.1W,Rapid Spanning Tree Protocol,快速生成树协议)STP与RSTP区别概要
STP与RSTP的接口状态对应关系
RSTP端口会在Discarding状态完成角色的确定,当端口确定为根端口或指定端口后,经过Forward Delay时间会进入Learning状态,比STP就少一个Forward Delay时间,并且有P/A快速机制,可以直接从Discarding直接到Forwarding状态。不是根端口或指定端口就会维持Discarding状态。 端口角色根端口和指定端口角色的定义和STP相同,就不说了。 较STP新增了两个端口概念,替代接口和备份接口。但同样都是阻塞起来的,只是为了指定端口出故障时可以快速收敛。 替代接口(Alternate) 可以理解为根接口的备份接口,是由于收到了其他设备发送的BPDU且优于自身所要发送的BPDU从而被阻塞的接口。当根端口进入阻塞状态时,会选择优先级最高的替代接口作为新的根端口。当对端端口是Forwarding状态,则可以立即进入转发状态。 备份接口(Backup) 一台设备上收到了自己所发送的BPDU从而被阻塞的接口。 如图,LSW2上的GE 0/0/3阻塞,因为是收到了LSW3的BPDU报文,形成了环路,且收到的BPDU报文比自己的优,从而阻塞,就变成了替代接口。而LSW2上的GE 0/0/5,因为收到的是自己发送过来的BPDU报文且端口id较大被阻塞,从而变成备份接口。 BPDU报文与STP BPDU相比较
最高位和最低位TCA和TC与STP相同。Agreement(同意)及Proposal(提议)用于RSTP的P/A机制,会大大提高RSTP的收敛速度。Port Role(接口角色)两个bit位,01表示根接口,10表示替代接口,11表示指定接口,00保留。Forwarding(转发)和Learning(学习)用于表示该RST BPDU发送接口的接口状态。 RSTP与STP不同,在网络稳定后,STP的非根桥之会转发根桥发来的BPDU报文,而RSTP无论是非根桥还是根桥都会周期性的发送BPDU。 在STP中只有在指定端口收到低优先级的配置BPDU时才会立即回应(发送自己计算的配置BPDU报文),阻塞状态端口不会对低优先级的配置BPDU做出回应。 在RSTP中,指定端口或阻塞状态的端口收到低优先级的RST BPDU,也可以立即对其做出回应。 P/A快速收敛机制当网络中增加新的链路或故障链路恢复时,链路两端必有一个端口的角色是指定端口,在STP中,该指定端口需要等待30s才能进入Forwarding状态。 P/A机制是指定端口可以通过与对端网桥进行一次握手,即可快速进入转发状态,无需任何定时器。 前提条件是必须是点到点的链路。 当新链路连接时候,链路两端的端口初始都为指定端口并处于阻塞的状态。 当指定端口处于Discarding和Learning状态时,所发送的BPDU中的Proposal位将被置为1,端口的角色位11,是指定端口。(都是指定端口发的哟) 收到Proposal置位的RST BPDU报文后,交换机会判断接收端口是否为根端口,如果是根端口,会进行同步过程,同步过程是阻塞除边缘端口(直接与用户终端相连,没有连接到其他交换机或者网桥,一般需要手动配置为边缘端口,可以忽略Forward Delay时间直接进入Forwarding状态,无时延)之外的所有端口,为了消除本交换机产生环路的可能。 完成同步过程后,根端口进入转发状态并从根端口回发Agreement置为1的RST BPDU报文,内容复制收到的Proposal置为的RST BPDU报文,唯一不同的就是Flags字段的Agreement也置为1。 收到Agreement置1的BPDU报文后,该接口会立即进入转发状态。 同步过程阻塞的接口也会继续往下进行这个过程。 如果指定端口发出Proposal置位的BPDU后没有收到Agreement BPDU报文,则该端口需要等待30s(两个延迟时间)才会进入转发状态。 拓扑改变处理在STP中,端口变为Forwarding状态或从Forwarding变为Blocking状态均会触发拓扑改变处理过程,而RSTP只在非边缘端口转为Forwarding状态时才会触发处理过程。 当交换机由非边缘端口转变为Forwarding状态时,网桥会在两倍的Hello Time时间内向根端口以及指定端口发送TC置位为1的RST BPDU,同时清除这些端口学习到的MAC地址。 其他交换机收到TC置位的RST BPDU时候,会清除接收TC报文的端口以及边缘端口之外的其余端口MAC地址,并同样会在两倍的Hello Time时间内向根端口以及指定端口发送TC置位为1的RST BPDU报文。 交换机收到TC置位的RST BPDU后不需要在Max Age+Forward Delay时间内将MAC地址老化时间设置为Forward Delay,而是直接清除端口MAC地址,重新进行学习,从而实现更快的收敛。 注:本人使用华为模拟器,拓扑改变收到拓扑改变的报文,并没有立即清除端口mac,好像是一个Foreard Delay时间后才清除mac。 RSTP和STP的兼容当运行RSTP的交换机连续3次接收到配置BPDU时候,认为改端口和STP相连,该端口将切换到STP协议运行。 MSTP(802.1S,Multiple Spanning Tree Protocol,多生成树协议)基本思想基于实例(Instance)计算出多棵生成树,每个实例都会生成自己的生成树,并且每个实例可以包含一个或多个VLAN,每一个VLAN只能映射到一个实例。交换机可以通过配置多个实例,实现不同VLAN组之间的负载分担。 基本概念解释MST域是一个具有相同域名、修订级别和摘要信息的网桥或交换机构成的集合,一个域可以包含多个实例。 域名,本域的名称,MSTP中每一个域都有一个独一无二的名称,配置不同域名会被认为属于不同的域。 修订级别,目前保留,默认为0。 配置摘要,由网桥的vlan和实例映射关系生成的长度为16字节的HMAC-MD5签名。 IST是MST域内的一颗生成树,每颗生成树对应一个实例。实例号为0,一定存在的 MSTI是多生成树实例,实例号从1开始,为0的实例号是IST MSTI域根,是每一个MSTI实例上优先级最高的网桥 CST(公共生成树)是网络内所有MST域通过计算得到的一棵树。 CIST(公共和内部生成树)是整个网络所有设备经过生成树计算得到的一棵树。由IST和CST共同构成。 CIST总根,是整个网络中优先级最高的桥,是CIST的根桥。 CIST域根,IST的根桥即为CIST的域根,是MST域内距离总根最近的桥,也称为Master桥。 端口角色相较RSTP,桥的角色上,MSTP增加了Master桥。端口角色上,增加了域边界端口以及Master端口。根端口、指定端口、Alternate端口、Backup端口定义和RSTP一样。 IST(实例号为0网络)中距离总根最近的桥为Master桥,该桥为IST的根,Master桥指向总根(整个网络中优先级最高的桥)的端口为Master端口。 MST域内网桥和其他MST域或STP/RSTP网桥相连的端口称为域边界端口,Master端口也是域边界端口。 如下图创建了三个区域,暂时都只有IST(实例0),优先级和MAC都是我编的,然后下图标注了MSTP所有的概念,更方便理解吧。 BPDU报文BPDU Type:0x02 BPDU flags:CIST标志字段 Root Identifier:CIST总根交换机ID Root Path Cost:CIST外部路径开销,指从本交换机所属的MST域到CIST根交换机的累计路径开销。 Bridge Identifier:CIST的域根交换机ID(每个域距离根桥最近的交换机,域根并不是只有一个,每个域都有一个域根,很多资料上也称为CIST域根,我理解一半天),即IST Master的ID。如果总根在这个域内,那么域根交换机ID就是总根交换机ID。 Port Identifier:CIST的指定端口ID(当前报文的上游交换机发送端口) Version 3 Length:表示MST专有字段的长度,用于接收到BPDU后进行校验。 MST Config ID:格式选择字符固定为0x00。 MST Config name:域名 MST Config revision:修订级别,为0 MST Config digest:配置摘要 CIST Internal Root Path Cost:CIST内部路径开销,表示发送此BPDU的网桥到达CIST域根的路径开销。 CIST Bridge Identifier:发送此BPDU的网桥ID CIST Remaining hops:CIST剩余跳数,限制MST域的规模,从域根开始,BPDU每经过一个网桥,跳数就减一,网桥会丢弃收到的跳数为0的BPDU,从而限制MST域的规模。默认为20 MSTI配置信息中的内容只在各自实例中有效,且每个实例中这些字段值是独立的 MSTI flag:一个字节,从第一位到第七位的定义和RSTP相同,第八位为Master标志位 Region Root:表示该实例的域根ID Internal root path cost:表示发送此BPDU的网桥到达MSTI域根的路径开销 Bridge Identifier priority:表示发送此BPDU的网桥,即指定桥的优先级,其中高4位为优先级位,第四位固定为0 Port Identifier priority:表示发送此BPDU的端口的优先级,其中高4位为优先级位,第四位固定为0 Remaining hops:表示BPDU在该MST实例中的剩余跳数。 优先级向量MSTP计算可以分为CIST和MSTI计算两部分 CIST优先级向量 用于计算生成CIST生成树和CST生成树,总根,域根等 {CIST总根ID、外部路径开销、域根ID、内部路径开销、指定交换设备ID、指定端口ID、接收端口ID} 再次注意(怕你已经被弄晕了), 外部路径开销是当前域的Master桥到总根的路径开销 内部路径开销是当前交换机到当前域根的路径开销 指定交换设备ID就是发送这个报文的交换机的ID 指定端口ID就是发送这个报文的交换机的端口ID 对比是按照从左往右的顺序,值小者为优,给个报文的图直观一些 MSTI优先级向量用于计算生成区域内的生成树和端口状态等,计算范围仅限区域内 {域根ID、内部路径开销、指定交换设备ID、指定端口ID、接收端口ID} MSTP计算方法每个BPDU既包含CIST计算所需的信息,也包含MSTI计算所需要的信息。 计算生成树时候和RSTP类似,在进行CST计算时,会把MST域看做逻辑上的一个网桥,网桥ID为IST域根的ID也就是Master桥ID(距离总根最近的桥)。 当网桥收到BPDU并判断不是同一个域后,不会解析MST专有字段的信息。 初始时每个网桥都认为自己是总根,发送以自己为总根、域根和指定桥的BPDU。 计算端口角色和交换机角色过程与RSTP相同。 CST(公共生成树)的计算过程
IST(内部生成树)和MSTI(内部生成树实例)的计算过程 经过CST的计算生成了域内的根桥(即Master桥) 所需要比较的优先级向量为MSTI优先级向量,即{域根ID、内部路径开销、指定交换设备ID、指定端口ID、接收端口ID}
MSTP与RSTP交互RSTP网桥收到MSTP的BPDU时,会将MSTP的BPDU报文里的CIST总根ID,外部路径开销,域根ID,指定端口ID分别与RSTP的BPDU报文里的根桥ID,根桥开销,指定桥ID,指定端口ID对应。 MSTP网桥收到RSTP的BPDU时,会将RSTP的BPDU报文里的根桥ID,根桥开销,指定桥ID,指定端口ID分别与MSTP的BPDU报文里的CIST总根ID,外部路径开销,域根ID,指定端口ID对应。 P/A快速收敛机制MSTP支持RSTP的快速收敛机制,但有不同点。详细的可以看上面的RSTP的P/A机制,这里只写区别。 RSTP是上游交换机指定端口发送Proposal置位的BPDU,下游网桥执行同步操作之后回应Agreement置位的BPDU,上游网桥收到Agreement置位的BPDU后其指定端口可以立即进入转发状态。 MSTP是上游交换机指定端口发送Proposal置位和Agreement置位的BPDU,下游网桥收到BPDU后执行同步操作然后回应Agreement置位的BPDU,上游网桥收到Agreement置位的BPDU后其指定端口可以立即进入转发状态。 补充MSTP和实例相关的讲的较少,因为同一个MST域中可以有多个实例,每个实例可以运行通过一个或n个VLAN,但是一个VLAN只能存在一个实例中,然后每个实例都会各自生成生成树,除了IST(实例为0)的根节点是Master桥,其余实例都是按照RSTP类似方法计算出各自实例自己的根桥,指定桥,根端口和指定端口的。 MSTP因为有多个实例,每个端口上对实例的状态可能不一样,比如在实例1端口为根端口,实例2上这个端口为指定端口,所以会出现端口既会发BPDU报文也会收BPDU报文。 拓扑改变的处理和RSTP相同。 MSTP比RSTP就是多了分区域多实例,细化看,每个实例运行的都是RSTP。 RSTP和MSTP启动时简单介绍当一台交换设备启动RSTP和MSTP时候,会默认自己为根桥,且所有使能RSTP或者MSTP的端口都为指定端口Discarding状态,这样就会触发P/A快速机制,当一个指定端口发送P/A机制报文没收到对端发送过来的回复报文,则需要经过2倍的Forward delay时间才能到转发态。假如下游有一个交换设备同时开启了RSTP或者MSTP,则都会发送P/A机制报文,收到报文后两个指定端口会对比报文确定自己的角色从而继续P/A快速机制。P/A会阻塞除边缘端口和根端口外的其他所有端口,端口两两进行这种操作从而生成整个生成树。 MSTP启动时,多个实例都会在互不干扰的生成对应的生成树,类似多线程一样。 MSTP收到其他区域报文时候,只会对比CIST的信息,MIST内容会忽略 如果您对本文有疑问,可以添加小老虎的微信,共同探讨哦,另外,有想领取太阁课程学习资料的小伙伴,想咨询太阁课程价格的小伙伴,你们都可以扫码添加小老虎微信,跟小老虎聊一聊,大家共同努力,出发吧,就是现在! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:45:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |