STP/RSTP/MSTP 精华详解
STP/RSTP/MSTP 精华详解:
STP 概述 :
- 因为二层设备的互联,并因为交换机的转发原理,会导致物理环路的产生。这时就会使用到STP协议
- STP:在有环的拓扑里面形成一个无环的逻辑拓扑(从有环(物理)到无环(逻辑))
- STP:将环路网络修剪成一个无环的树形网络,通过生成树计算,阻塞某个接口,使得数据到达目的只有逻辑上的一条链路可以走,运行该协议的设备通过彼此交互BPDU来进行STP的计算。
- 二层环路会带来的问题:广播风暴,MAC地址表偏移,MAC地址震荡。
- MAC地址漂移:
- 一个MAC映射一个接口,
- 一个接口可以映射多个MAC。
- 设备上一个从一个两个接口学习到两个MAC地址,后学习到MAC地址表项会覆盖原MAC表项的现象。
- 如何防止:提高接口MAC地址学习优先级。不允许相同接口mac地址进行表项覆盖。
BPDU:
-
桥协议数据单元。
-
属于二层协议。用于在交换机与交换机之间发送,构建无环网络,
协议字段 | 作用 |
---|---|
Flags | 8bit,STP只用一个最高位和一个最低位,最高位置位为TCA BPDU,最低位置位为 TC BPDU |
Root-id | 根桥ID,根桥设备的BID,由优先级+mac地址组成 |
Cost of path | 根路径开销,描述到达根桥的开销值 |
Bridge-id | 转发桥id,描述发送该BPDU的设备BID. |
Port-id | 端口id,发送给BPDU的端口id |
Message age | 配置BPDU能够在网络中存活的最大生存时间 |
Max age | 接口缓存BPDU的老化时间,默认为20s |
hello time | 根桥发送配置BPDU的发送周期,默认为2s |
Forward delay | Listening,Learning状态的持续时间,默认为15s |
-
BID:BID一共8个字节,其中优先级2个字节,MAC地址6个字节,优先级又分为两部分组成,一个是优先级字段,一个是system id字段,system id实质就是vlan id,华为默认为0,所以设置优先级实质还是从高4位开始进行,高四位为2^12,为4096,所以优先级必须设置为4096的倍数。
-
Message age 如果是根桥发出的配置,那么值为0,否则为根桥发出到达当前桥接收BPDU的总时间,华为实现,每经过一个交换机,值加1
端口状态:
状态 | 描述 |
---|---|
Disabled | 关闭状态 |
Blocking | 阻塞状态,接收BPDU,不发送,不学习MAC,不转发数据 |
Listening | 侦听状态,接收并发送BPDU,不学习MAC,不转发数据,停留一个forward delay的时间 15s |
Learning | 学习状态,接收并发送BPDU,学习MAC,不转发数据,停留一个forward delay的时间 15s |
Forwrading | 转发状态,接收并发送BPDU,学习MAC,转发数据 |
STP快速收敛会造成临时环路
- STP因为没有快速收敛机制,所以要设计forwead delay的时间,等待所有设备BPDU报文交互的完成
- 不然就会造成拓扑变更后,端口角色转换完成后快速进入转发状态,而莫端设备还没有收到TC置位的BPDU,造成网络中所有端口都处于转发状态,造成一个临时环路的产生,
- 再比较自己的r-id
- DP对象:逐链路
- stp:慢,无冗余、
STP拓扑变更通知:
- 发送TCN BPDU必须满足一下任意条件:
- 必须有一个接口状态处于Forwarding。
- 只有DP接口才处理TCN BPDU
- 当交换机有链路故障后,会像上游交换机发送TCN BPDU,上游交换机收到后,会回复一个TCA 置位的BPDU,用于告诉下游我已经收到了,并向上游逐跳发送,直至发送到根桥,根桥收到之后,会向下游发送TCA,TC同时置位的BPDU,然后朝其他接口发送TC置位的bpdu,所有运行STP的交换机均可以收到TC置位的BPDU。然后会立即重置自己的MAC地址表项。
- TC置位BPDU的发送时间为2s,不受hello time时间的影响
- 周期为35s(Forward delay+Max age),会一直发送TC置位的BPDU,那么就会一直清空MAC地址表项,但是
RSTP 概述:
-
虽然有STP的独特的破环机制,但是端口进入转发状态的时间最少依旧还是等待30s的时间,很显然满足不了现在的业务需求,所以在STP的基础上,改良开发出了RSTP
-
STP/RSTP对比
STP/RSTP对比 STP RSTP 端口角色 RP/DP/BP-AP RP/DP/BP/AP/EP 端口状态 五种 三种,(将STP前三种合为了一种-Discarding) 快速收敛机制 无 P/A机制、EP端口,AP端口特性,
RSTP端口状态:
-
端口状态 描述 Discarding 禁用状态,接收并发送BPDU,不学习MAC,不转发数据,停留一个forward delay的时间 15s Listening 侦听状态,接收并发送BPDU,不学习MAC,不转发数据,停留一个forward delay的时间 15s Forwrading 转发状态,接收并发送BPDU,学习MAC,转发数据 -
由STP的五种端口装换为了三种端口,这是因为原先STP的前两个端口,都不能发送BPDU,所以就将两个直接替代了,是的三种端口合为了一种,端口状态数据少,以便于人工管理
RSTP新增属性:
-
EP端口,用于连接交换机。
-
BP端口,用于做DP的备份端口
-
AP端口,用于做RP的备份端口
-
报文 flags字段,8位全部占用:
TCA置位 A置位 端口状态标识符 P置位 P置位 TC置位 高7位,RSTP不再使用 高6位,置位标识A置位的BPDU 高5,4位同时置位,01表示DIS状态,10表示lear状态,11表示for状态 低2,3位同时置位,01代表AP/BP,10代表RP,11代表DP. 低1位,置位表示P置位的BPDU 低0位,置位表示为TC置位的BPDU
边缘端口:
- 可以接收、发送BPDU,
- EP端口接入终端立即变为DP+Forwarding。
- EP端口收到BPDU后,会失去边缘端口特性。变为普通端口重新参与STP计算
- EP为什么会发送BPDU?
- 当两个EP端口自环了,EP端口收到了自己的BPDU,就会知道下面有环路产生
- 发送BPDU来防止自环的产生。(BPDU 2s发送一次,所以BPDU会存在2s的临时环路,)
- 接口Up/Down.不会发送TC置位的BPDU.不会影响拓扑变更。
- TC BPDU不会向EP端口转发。
- 收到TC BPDU、P/A置位BPDU时,不会清空EP端口的MAC地址表项,PA协商时会强制为sysc同步成功
边缘端口保护:
- 配置EP端口保护后,如果边缘端口收到BPDU报文,边缘端口会被down掉,边缘端口属性不变
- 被关闭的端口默认不会自动恢复,需要执行命令手动恢复,或者重启端口,或者配置一个自动恢复的时间。
快速收敛:
-
P/A机制:
- 在交换机与交换机之间进行的,
- 交换机认为自己是Root 接口想为DP,处于Discarding 状态,就发送P/A置位的BPDU
- 双方都认为自己的Root,都会发送P/A置位的BPDU,双方通过比较优劣,劣势的一方,主动发起A置位的BPDU
- 当链路类型为点到点,全双工,接口想为RP端口,处于Discarding状态,并进行P/A同步(sync),就会发送A置位的BPDU。
- P/A同步过程:将交换机除AP,EP,BP,端口以外的所有端口处于Discarding状态,
- 当将A置位的BPDU,发送出去后,该端口立马进入Forwarding状态,
- 当收到A置位的BPDU后,该端口立马进入Forwarding状态。
- P/A机制是当上游是DP端口,下游是RP端口是,才进行P/A机制,若下游是AP短裤,则不会产生A置位的BPDU进行回复,那么对端DP端口进入到转发状态,就需要等待两个Forward Delay的时间。
- 什么时候端口才会认为自己是DP?
- 刚加入网络,认为自己是根桥
- 什么时候端口才会认为自己的RP?
- 通过比较BPDU后,发现别人的比较优。
- 什么时候端口才会认为自己是AP?
- 收到的BPDU,没有自身其优。
- 什么时候端口才会认为自己是BP?
- 收到自己发出的BPDU,但是比自己优。
-
AP端口特性:
- 当RP端口Down掉后,交换机会从多个AP端口中选择最优的AP端口替代成RP,AP会直接转换为RP,并立即进入转发状态。
-
BP端口特性:
- 若DP端口Down后,BP会立即转变成为RP状态,等待两个Forward Delay的时间进入转发状态
- 若DP端口链路被阻塞,BP收不到了RP发送过来的BPDU,会等待hold time的超时时间(默认为18s),就认为DP挂掉了,BP会立即转变成为RP状态,等待两个Forward Delay的时间进入转发状态,总共为(18+30=48)
拓扑变更通知:
-
触发条件:交换机端口状态由Discarding状态转换为Forarading状态(说明就是有端口角色的切换),该接口Down会影响其他接口角色的切换,
-
交换机会跟除EP端口外所有端口启动 Tc While time,这个计时器是hello time的两倍,
-
在这个时间内,清空除EP端口外所有端口映射学习来的MAC地址,同时由端口发送RST BPDU,其中TC置位,一旦Tc While 计时器超时,就不再发送
-
交换机收到RST BPDU后,清空除接受端口,和EP端口以外的所有的MAC地址条目,
-
并开启Tc While time,继续朝着DP/RP端口进行转发。
优点:1.不用清空所有的MAC地址条目,保留了一些有效的,有效的避免了过多单播报文的泛洪
2.以拓扑变化者为源,向外扩散TC置位的BPDU,不必到达根桥,节省了收敛时间。
华为实现:
- 华为实现:在收到比自己次优的BPDU时,会将自己的优的BPDU发给对方。这就不用等待Max Age的超时时间。
- 华为实现:STP/MSTP/RSTP都只有三种状态,
- 华为实现:STP只比RSTP少了一个快速收敛 P/A机制
- 华为实现:设备有自己的超时时间,在超时时间内没有收到BPDU,就会重新进行生成树的计算,Max Age在华为交换机中的意义不大,超时时间为 hello time时间 x 3 x 时间因子(默认为3,取值1-10),默认位18s,最小为6s。
- 华为实现,当收到TC置位的BPDU时,会将交换机的MAC清空,这样可以及时清除错误的MAC表项,但是TC置位的BPDU会持续发送35s,每2s发送一次。会发送大概17次,就会一直刷新交换机的MAC地址表项。同时会产生过多的单播泛洪报文。
MSTP概述:
- STP/RSTP在交换机上有且仅有一个实例,所有vlan映射到一个实例上,RSTP虽然可以实现网络的快速收敛,但是仍然会出现闲置链路,没有达到负载均衡的目的
- MSTP可以自定义多个生成树实例,允许多个vlan映射到不同的实例
- 实现负载均衡,避免闲置链路
- 实现冗余备份,各实例之间的单独进行RSTP计算的,互不影响
- 不同的vlan流量根据不同的路径进行转发。
MSTP标识:
-
MST交换机使用MST configuration id来标识自己
-
MST configuration id包含三个参数:
- 区域名字(region name)
- 修订级别 (region level)
- vlan和实例(instance)的映射。MSTP会将vlan与实例的映射关系进行hash计算。然后让BPDU进行携带,双方通过比较hash值来确定是不是属于同一实例。
- 只有以上三种参数全部相同,才说明他们属于同一实例。
-
MSTP实例:
-
MSTI:用户自定义多生出实例
-
MSTP通过设置VLAN映射表(即VLAN和MSTI的对应关系表)把VLAN和MSTI联系起来
-
MSTI可以与一个或多个vlan对应。
-
各MSTI之间单独进行RSTP计算,互不干扰、
-
每个MSTI进行802.1W算法
-
每个端口在每个MSTI中的端口角色,状态,参数不一样
-
-
ISTl:默认实例0,他是特殊的MST实例缺省情况下,所有vlan都属于该实例。
-
CITI:MSTP 多域。MST实例仅出现在每个区域内,并不出现在区域间,如果把每一个区域看做是一台大的交换机,则连接这些交换机的树被称为CSI,
-
每个区域中的IST和区域间的CST一起构成CIST
-
STP保护技术:
BPDU保护:
-
EP端口如果收到BPDU后,会丧失特性,那么如果有人恶意的跟EP端口发送BPDU。是EP端口丧失特性
-
使用在EP端口上,EP端口如果收到BPDU后,不会使其失去边缘端口特性,而是直接关闭,需要手动开启,或者手动配置自动恢复的时间,
根保护:
-
如果在现有的拓扑中,新加入一各交换机,并恶意的将优先级设置最低,使之网络受到优先级更高的BPDU,从而引起网络拓扑错误变更,会导致原来应该通过高速链路转发的数据朝着低速链路进行转发,造成网络拥塞
-
启用ROOT保护的RP端口,端口角色一致保持在RP端口。如果指定端口收到优先级更高的报文,端口进入Discarding状态,不在转发BPDU,在经过两倍的Forwrad delay时间后,如果端口一直没有收到更优的BPDU,则自动恢复到正常的Forwarding状态。
环路保护:
- 在AP和DP相连的全双工链路上,如果单方向链路故障的话,会造成AP收不到DP发送过来的BPDU,认为DP失效,自己切换状态为DP,并等待两个Forward delay的时间进入转发状态,那么就会造成网络环路。
- 配置环路保护后,如果AP/RP端口长时间没有收到BPDU,则向网关发出通知消息,如果是根端口则进入Discarding状态,如果是AP端口进入阻塞状态,不转发报文,从而不会形成环路,直到收到BPDU,才会进入Fowarding状态。
TC保护:
- 交换设备在收到TC置位的BPDU时,会清除MAC地址表项,那么如果网络中有伪造的TC置位的BPDU频繁发送,那么MAC地址就会一直被清空,导致有过多的单播泛洪报文,直至广播风暴。
- 配置TC保护后,可以设置在接收TC置位的BPDU后多少秒内进行清空MAC地址表项,还可以设置接收的最大阈值,超过阈值就不在接收。
BPDU过滤:
- 因为EP端口不参与STP计算,但是仍然会发送BPDU报文,这些BPDU可能会发送到其他网络,造成网络震荡,配置BPDU过滤可以使端口不发不收BPDU,过滤BPDU报文,但是这样会结局不掉两个EP端口互联的环路问题,所以这个要慎用。