STP & RSTP & MSTP

STP–生成树协议

交换网络中的问题:

  • 1. 单点故障:交换机之间如果只有单条链路,如果链路故障,主机之间无法访问。
  • 2. 解决单点故障:交换机之间相互呈环状连接,由冗余链路。当有一条链路发送故障,冗余链路可以保障网络通信。
  • 3. 新的问题:增加冗余链路后,交换机之间形成环路,当交换机之间相互广播未知MAC地址的数据帧时,会产生广播风暴,链路中全是广播主机帧导致线路拥堵,交换机宕机。
  • 4. 如何让交换机之间既有冗余链路,又不会产生广播风暴?
  • 5. 最终解决方案:交换机之间呈环状连接,所以交换机都运行生成树协议,通过生成树协议自动堵塞某些端口,从而形成一个逻辑无环的网络拓扑,以避免广播风暴产生。当现有链路出现链路时,之前被阻塞的端口可以被从新启用,从而形成一个新的逻辑拓扑————–逻辑无环,物理有环。

生成树协议

STP– Spanning Tree Protocol

让交换网络形成一个树状的拓扑结构

生成树选举

生成树选举的过程(选举端口角色)

选举根网桥

  • 网桥就是交换机,以前人们把交换机叫做网桥。
  • 一个广播域中,有且只有一个根网桥。
  • 对比BID–网桥Bridge id,BID最小的交换机成为根网桥。
  • BID=网桥优先级+网桥Mac地址。
  • 网桥优先级取值范围:0-65535;默认值是:32768;步长:4096 (0,4096,8192…61440),每次取值的最小单位,是4096的整数倍,不超过65535,因此倍数是0-15倍,值是0-61440。16倍是65536。
  • 查看交换机网桥地址:display bridge mac-address
  • display stp

选举根端口(Root port)

  • 每个非根网桥上,选择根端口,只且只有一个根端口
  • 判断依据:此端口到达根网桥的路径成本之和最低。
  • 路径成本是带宽所对应的数值,默认情况下,千兆路径成本为20000,百兆的路径成本为20W。
  • 如果路径成本一样,则选择网桥id(即mac地址)小的。
  • 路径成本之和一样时,对比端口标识(Port Identifier)。
    • 端口ID越小优先,由端口优先级和端口号两部分组成,端口优先级可配置,默认值是128
    • 端口优先级范围:0-128 默认步长16。

选举指定端口(Designed Port):每根网线上选,有且只有一个指定端口。

  • 根网桥上的所有端口都是指定端口(这是规定,没有为什么)
  • 此端口所在交换机到根网桥的路径成本低的
  • 路径成本一样时,对比此端口到根网桥的网桥id小的为指定端口。
  • 既不是根端口也不是指定端口的,都是非指定端口,将成为阻塞端口。

display stp brief 查看STP网桥信息

Role角色STP State
DESI指定端口FORWARDING-转发
ROOT根端口FORWARDING-
ALTE阻塞端口DISCARDING-丢弃

BPDU–Bridge Protocol Data Unit

1. BPDU–网桥协议数据单元,实现了STP的所有功能。

2. BPDU类型–1、配置BPDU;2、拓扑更变通告(TCN)BPDU。

3. BPDU包含关键字段

字段字节作用
协议ID2字节
版本号1字节
报文类型1字节标识是配置BPDU还是TCN BPDU
标记域1字节
根网桥ID8字节用于通告根网桥的ID
根路径成本4字节说明这个BPDU从根传输了多远,成本是多少
发送网桥ID8字节发送这个BPDU网桥的ID
端口ID2字节发送报文端口的ID
报文老化时间2字节;最大老化时间-2字节;Hello 时间-2字节;转发延迟-2字节计时器值,用于说明生成树协议用多长时间完成它的每项功能

BPDU时如何选择根网桥的?

  • 当交换机启动时,每个交换机都会假定自己就是根网桥,在向外发送的BPDU中根网桥字段ID填写自己的网桥ID。
  • 当整个网络中所有的交换机接受到全部的BPDU并做比较后,就可以选择出唯一的一个根网桥。

STP的收敛

  • STP端口的物理状态:
  • 禁用–Disable–强制关闭
  • 阻塞–Blocking–只接收BPDU
  • 侦听–Listening–构建活动拓扑
  • 学习– Learning–构建网桥表
  • 转发–Forwarding–发送/接收数据
  • 华为交换机的stp的端口状态不是标准的,而是经过华为优化的,华为交换机的端口状态只有三种,分别是Forwarding,Learning和Discarding。
  • STP的三种计时器
  • Hello时间
  • 转发延迟
  • 最大老化时间
  • STP收敛过程
  • 直连故障:被阻塞端口会从blocking状态依次切换到listening及learning状态,最终进入forwarding状态。直连链路故障,端口状态切换,延时30s后进-forwarding状态。
  • 非直连故障:由于被阻塞端口上不再收到更优的BPDU,因此20s后端口开始从blocking状态依次切换到listening、learning及forwarding状态。非直连故障会导致50s左右的恢复时间,等于MAX Age加上2倍的Forward Delay时间。forward delay-转发延迟-15s;max age -20s;
  • 收敛时间是disable到forwarding的时间。
  • STP存在问题:
  • STP常用计时器防止临时环路,收敛时间慢,长达30-50s。
  • 设备利用率低
  • 解决方案:RSTP和MSTP
  • STP配置命令
    • stp enable //启动stp默认情况下stp为启动状态
    • stp disable
    • stp mode {stp|rstp|mstp} //选择stp模式,默认情况下stp模式为mstp。
    • stp priority [0-65535] //修改交换机的优先级,默认值为32768,最大值为61440。
    • 更改端口stp cost,在端口上开启/关闭stp功能
      • interface g0/0/1
      • stp cost {value}
      • stp {enable|disable}

RSTP

1. RSTP是对STP的改进,主要为了优化收敛时间。

改进点1:端口角色和端口状态优化

2. RSTP通过端口角色的增补,简化了生成树协议的理解与部署。增加了2种

  • 替代端口-Alternative。替代端口就是由于学习到其他网桥发送的配置BPDU报文而阻塞的端口,它提供了从指定桥到根桥的另一条可切换路径,作为根端口的备份端口。
  • 备份端口-Backup。就是由于学习到自己发送的配置BPDU而被阻塞的端口,它作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。

3. RSTP的端口状态缩减为3种,根据端口是否转发用户流量和学习mac地址来划分。

  • Discarding不转发用户流量也不学习mac地址。
  • Learning不转发用户流量但是学习mac地址。
  • Forwarding既转发用户流量又学习mac地址。

改进点2:RSTP的配置BPDU优化

RSTP的配置BPDU利用了STP报文中的Flags字段,明确了端口角色。

格式变化

除了保证和STP格式一样外,RSTP做了如下变化:

  • Type字段配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
  • Flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU。

BPDU发送方式

RSTP对配置BPDU的发送方式做了改进

  • STP拓扑稳定后,根桥按照Hello Time规定的时间间隔发送BPDU.其他非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出BPDU,此方式是的STP计算复杂且缓慢
  • 改进: 在拓扑稳定后,无论非根网桥设备是否接收到根网桥传来的配置BPDU报文,非根桥设备任然按照Hello Time规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行.
  • Hello Time每次发出的时间间隔为2s.

改进点3:更短的BPDU超时时间

  • STP需要先等待一个Max Age.(Max Age为超时时间 = hello time * 3 = 6s)
  • 改进: 如果一个端口在超时时间,(即三个周期,超时时间 = hello time * 3) 内没有收到上游设备发送过来的配置BPDU, 那么该设备认为与此邻居之间的协商失败.

改进点4:处理次优BPDU

  • STP协议只有指定端口会立即处理次优BPDU
  • 改进: 当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身缓存的RST BPDU与收到的RST BPDU进行比较. 如果该端口缓存的RST BPDU优于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身缓存的RST BPDU,从而加快收敛速度.

改进点5:快速收敛机制

根端口快速切换

如果网络中一个根端口失效,那么网络中最优的Alternate 端口将成为根端口,并立即进入Forwarding状态. 因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥.

而在STP中,需要等待30s.

指定端口快速切换

如果网络中一个指定端口失效,那么网络中最优的Backup端口将成为指定端口,进入Forwarding状态. 因为Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路.

边缘端口(Edge Port)

首先,边缘端口不属于端口角色,它是一个快速收敛机制

边缘端口是位于二层网络的边缘.一般可以把交换机连接终端或者服务器的端口配置为边缘端口.

在RSTP里, 如果某一个端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口可以设置为边缘端口.

边缘端口不参与RSTP计算,可以由Discarding直接进入Forwarding状态.但是一旦边缘端口收到了BPDU配置,就丧失了边缘端口属性,成为普通STP端口, 并重新进行生成树计算,从而引起网络震荡.

P/A机制((Proposal/Agreement机制)

RSTP通过P/A机制加快了上游端口进入Forwarding状态的速度.

在RSTP中,当一个端口被选举成为指定端口后,会先进入Discarding状态,再通过P/A机制快速进入Forwarding状态.

而在STP中,该端口至少要等待一个Forward Delay(Learning) 时间才会进入到Forwarding状态.

如果交换机收到更有的BPDU,那么这个时候交换机就知道这个端口不应该是指定端口,而应该是根端口.

A置位只能是根端口发送的.P置位只能是指定端口发送的.

拓扑变更机制

在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态.

一旦检测到拓扑发生变化,将进行如下处理:

  • 为本交换机的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器是Hello Time的两倍(4s). 在这个时间内,清空状态发生变化的端口上学习到的MAC地址.
  • 同时,由非边缘指定端口和根端口向外发送RST BPDU, 其中TC置位. 一旦TC While Timer超时, 则停止发送RST BPDU.
  • 其他交换设备收到RST BPDU后,清空所有端口(除了收到 RST BPDU 的端口和边缘端口) 学习到MAC地址, 然后也为自己的所有的非边缘指定端口和根端口启动TC While Timer, 重复上述过程
  • 如此,网络就会产生RST BPDU泛洪.

保护功能

BPDU保护

BPDU保护,是防止边缘端口收到BPDU的保护机制.

如果边缘端口开启了BPDU保护,如果收到了BPDU报文,会关闭这个端口.

命令:stp bpdu-protection 开启BPDU保护

命令:display interface brief 查看所有端口状态

根保护

根保护是为了保护根桥

如果一个网络中有一台交换机的BID比现有的根桥还要优先,那么这个时候拓扑会发生变化,那么为了防止这种现象发送,我们可以开启根保护.

根保护在指定端口下开启,在根端口开启是没有作用的.

命令:进入指定端口. root-protection

环路保护

环路保护是为了防止网络中发生的一些临时环路

环路保护在根端口下开启

进入根端口, 开启环路保护stp loop-protection

display stp brief 可以看到Protection类型为LOOP

防TC-BPDU攻击保护

如果频繁收到TC BPDU, 就会频繁删除MAC地址表, 这样子不行, 因此可以开启TC BPDU保护.

在全局模式下开启: stp tc-protection, 默认开启.

开启保护后,交换机会在一定时间内删除MAC地址表的上限.

RSTP配置过程

根端口连接的设备就是上游设备,指定端口连接的设备就是下游设备.

  1. 配置生成树工作模式
    • stp mode {stp | rstp | mstp}
    • 交换机支持STP,RSTP和MSTP三种生成树工作模式.默认情况下为MSTP
  2. (可选)配置当前设备为根桥
    • stp mode primary
    • 缺省情况下,交换机不作为任何生成树的根桥.配置后该设备优先级数值自动为0,并且不能更改设备优先级.
    • display stp 查看交换机生成树信息.
  3. (可选)配置当前设备的备份根桥
    • stp root secondary
    • 缺省情况下,交换设备不作为任何生成树的备份根桥.配置后该设备优先级数值自动为4096,并且不能更改设备优先级.

    MSTP

    1. 多生成树协议–Multiple Spanning Tree Protocol

    2. 如果一个交换网络中,只形成一个逻辑无环拓扑,虽然可以解决环路问题,但存在其他问题:所有vlan公用一个生成树,防止环路同时只能确保一半的设备得到利用,另一半仅用作备份,设备利用率低。

    3. 相当于整个交换网络中只存在一条路,所有的数据帧只能使用这个路径来进行转发。

    4. 负载均衡:需要让交换网络形成多个逻辑无环拓扑,让不同的vlan主机使用不同的拓扑来转发数据。

    5. 实现:

    • 1. 不同的vlan关联不同的实例
    • 2. 不同的实例的选择不同的交换机作为根交换机
    • 3. 不同的vlan通过不同的根交换机进行数据转发,从而确保设备的利用率,同时设备之间还能实现备份。

    6. MSTP配置命令

    • 1. stp mode mstp–设备缺省状态为mstp
    • 2. stp region-configuration–进入MST域配置
    • 3. region-name name–指定交换机MST域名,如ttt,HCIE等
    • 4. instance 16 vlan 16–指定vlan16的生成树实例id是16。第一个16为实例id,第二个16为vlanid。实例id取值范围0-4094,0是CIST
    • 5. stp [instance instance-id] root {primary | secondary}
    • 1. instance-id是实例编号,如果不知道,则该设备在实例0上为根网桥/备份根网桥设备。
    • 2. primary–配置为根网桥,配置后设备优先级为0,将不能更改设备优先级。
    • 3. secondary–配置为备份根网桥,配置后设备优先级为4096,将不能更改设备优先级。
    • 6. stp [instance instance-id] priority priority
    • 1. priority:指定当前交换机的优先级,0-61440,步长4096,缺省值是32768。
    • 7. stp pathcost-standard{dot1d-1998 | dot1t | leagcy}
    • 1. dot1d-1998–指定路径开销值的计算方法是IEEE.802.1-1998标准方法,取值范围0-65535
    • 2. dot1t–指定路径开销的计算方法是IEEE802.1t标准方法,取值范围1-20,000,000
    • 3. legacy–指定路径开销计算方法是华为计算方法,取值范围是1-200,000
    • 8. stp [instance instance-id] port priority priority
    • 1. priority:指定端口在生成树计算时的优先级。整数形式,取值范围0-240,步长16,如0,16,32等
    • 9. display stp region-configuration–查看MST域名和实例的映射关系
    • 10. display stp brief–查看MSTP和vlan的映射关系

    三种生成树协议的比较

    • 1. STP:
      • 形成一颗无环的树,解决广播风暴并实现冗余备份。
      • 收敛速度慢。
    • 2. RSTP:
      • 形成一颗无环的树,解决广播风暴并实现冗余备份。
      • 收敛速度快。
    • 3. MSTP:
      • 形成多棵无环的树,解决广播风暴并实现冗余备份。
      • 收敛速度快
      • 多棵生成树在vlan之间实现负载均衡,不同vlan的流量按照不同的路径转发。

    No Comments

    Send Comment Edit Comment

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    Previous
    Next