一. STP

• STP 消除环路的思想:
    ○ 将网络拓扑修剪为树形
    ○ 选择树根节点ROOT;
    ○ 确定最短路径;
    ○ 阻塞冗余链路。

• 桥ID :
    ○ 用于在STP 中唯一的标识一个桥。
    ○ 桥ID:【桥优先级:2字节】【桥MAC地址:6字节】

• 路径开销(Path Cost):
    ○ 路径开销用于衡量桥与桥之间路径的优劣;
    ○ STP 中每条链路都具有开销值;
    ○ 路径开销等于路径上全部链路开销之和。

• 链路开销标准:
    ○ 单端口下(H3C私有标准):10M=2000,100M=200。1G=20。10G=2。

• 配置BPDU:
    ○ 网桥通过交互配置BPDU 获取STP 计算所需要的参数;
    ○ 配置BPDU 基于二层组播方式发送,目的地址为01-80-C2-00-00-00;
    ○ 配置BPDU 由根桥周期发出,发送周期为Hello Time;
    ○ 配置BPDU 老化时间为Max Age。

• 配置BPDU 格式:(网桥协议数据单元(Bridge Protocol Data Unit))

• STP 计算方法:
    ○ 1、配置BPDU 处理:
             网桥将各个端口收到的配置BPDU 和自己的配置BPDU 做比较,得出优先级最高的配置BPDU;
             网桥用优先级最高的配置BPDU 更新本身的配置BPDU ,用于选举根桥和确定端口角色;
             网桥从指定端口发送新的配置BPDU。

    ○ 2、配置BPDU 比较原则——优先级向量最小者最优:
             首先比较Root Bridge ID--->
             其次比较Root Path Cost--->
             再次比较Designate Bridge ID--->
             再其次比较Designate Port ID--->
             最后比较Bridge Port ID。

• 根桥选择:
    ○ 起始各个交换机都认为自己是根桥,然后进行互发帧进行根桥PK,最终优先级向量最小者胜出。

• 确定端口角色的标准:
        ◊ 根端口:网桥上到根桥最近的端口(到根桥的开销最小);
        ◊ 指定端口:端口的配置BPDU 在其所属链路上是最优的(端口拥有该链路上最优的配置消息);
        ◊ Alternate端口:端口的配置BPDU 在其所属链路上不是最优的,且端口不是根端口。

• 等路径开销计算:
        ◊ 当路径开销相等时,则根据顺序比较Designate Bridge ID,越不优者相连或与之相连的端口为Alternate 端口。
        ◊ 而对于链路聚合的模型,两条链路开销相等时,则要比较Designate Port ID,端口越不优者为Alternate 端口。
• 收到低优先级配置BPDU时的处理
    ○ 收到低优先级配置BPDU的网桥会立即回应一个配置BPDU消息
• STP 为端口定义了五种状态:
    ○ Disabled、Blocking、Listening、Learning、Forwarding。
• 各端口状态对配置BPDU 收发、MAC 地址学习以及数据收发的处理有所不同:

• Forward Delay 延时:
    ○ 从中间状态Listening 经过一个延时进入另一个中间状态Learning;
    ○ 从Learning 状态再经过一个延时进入Forwarding 状态;
    ○ 延时长度为Forward Delay;
    ○ 默认为15秒。

• 网桥发送TCN BPDU 的条件为:
    ○ 有端口转变为Forwarding 状态,且该网桥至少包含一个指定端口;
    ○ 有端口从Forwarding 状态或Learning 状态转变为Blocking 状态。

• 当根桥故障后:
    ○ 指定根桥等待Max Age Timer 后没收到消息,则判断为根桥down 掉了

• STP拓扑改变处理过程
    ○ 
    ○ 网桥发现拓扑变化(Down或新加入网桥),产生TCN的BPDU从RP发出,以通知根桥。如上游网桥不是根桥,则上游网桥会将下一个要发送的配置BPDU中TCA位置位,作为收到TCN的确认。发送给下游网桥。上游网桥从根端口发送TCN的BPDU直到根桥收到TCN BPDU,收到后,根桥会将下一个要发送的配置BPDU中的TCA位置位作为对收到的TCN确认。并将该配置BPDU中TC位置位,用于通知网络中所有网桥网络拓扑发生了变化。根桥在Max Age+Forward Delay(20s+15s)内,将发送的配置BPDU中的TC置位,当网桥收到后会将自身的MAC地址老化时间由300秒缩短为Forward Delay(15s)。网桥发送TCN的周期为Hello Time,如果没收到TCA置位则重复发送TCN,收到TCA后停止从RP发TCN。

• TCN产生的条件:
    ○ 网桥上有端口转变为Forwarding状态,且至少包括包含一个DP。
    ○ 网桥上有端口从Forwarding或Learning状态转变为Block状态。

• TCN的BPDU:
    ○ 包括三部分:Protocol ID、Protocol version(这两个和配置BPDU一样)、BPDU Type(这个有区别)。
    ○ BPDU Type表示为:0x80为TCN的BPDU。
    ○ 标志位:76543210。第7位置位表示为TCA,第0位置位表示和TC置位BPDU。

• STP 协议的不足:
    ○ 收敛时间长:缺省情况下一个端口从Blocking 状态过渡到Forwarding 状态至少需要30 秒钟(两倍的ForwardDelay)。对于一个拓扑不稳定网络,会导致网络的长时间中断。(两倍:Listening--->Learning--->Forwarding)
    ○ 拓扑变化收敛机制不灵活:主机频繁上下线时,网络会产生大量TCN。

二. RSTP

• RSTP引入:
    ○ RSTP 是从STP 发展而来,实现的基本思想一致;
    ○ RSTP 具备STP 的所有功能,可以兼容STP 运行;

    ○ RSTP 和STP 有所不同:
        1.减少了端口状态(Discarding、Learning、Forwarding);
        2.增加了端口角色(根端口、指定端口、Alternate 端口(用于根端口做备份)、Backup 端口(用于指定端口做备份));
        3.BPDU 格式及发送方式不同;
        4.当交换网络拓扑结构发生变化时,RSTP可以更快地恢复网络的连通性。
• RST BPDU 报文和STP 相比不同之处有:
    ○ Protocol Version ID 变为2(如0x02);
    ○ BPDU Type 变为2(如0x02);
    ○ 使用了Flags 字段的全部8位;
    ○ 增加Version 1 Length 字段(如0x00)。

• RST BPDU 中的Flags 字段:
    ○ 在RST BPDU 的Flags 字段中,除TC 以及TCA 标志位,还包含P/A 标志位、端口状态标志位以及端口角色标志位。

• RSTP 中BPDU 的处理:
    ○ 网桥自行从指定端口发送RST BPDU,不需要等待来自根桥的RST BPDU。发送周期为Hello Time;
    ○ RST BPDU 老化时间为3 个连续的HelloTime 时长。
• RSTP提供了一种保活机制
    ○ 网桥可以根据如未收到BPDU则表示网络中断,时长为3个Hello Time时长,STP没有。

• 收到低优先级RST BPDU的处理
    ○ STP只能有指定端口收到低优先级RST BPDU 做出回应。处于阻塞状态的端口不会对收到低优先级的BPDU做出回应。
    ○ RSTP中阻塞状态的端口收到RST BPDU可以回应。

• RSTP 快速收敛机制:
    ○ 边缘端口机制;
    ○ 根端口快速切换机制;
    ○ 指定端口快速切换(P/A)机制。

• 边缘端口(Edge Port):
    ○ 边缘端口指网桥上直接和终端相连的端口(如:直接与主机相连的交换机);
    ○ 边缘端口可以直接进入转发状态,不需要延时,并且不会触发拓扑改变;
    ○ 边缘端口收到BPDU 后,会转变为非边缘端口。有点像Cisco的PortFast端口。

• 根端口快速切换:
    ○ 如果旧的根端口已经进入阻塞状态,而且新根端口(优先级最高的Alternate端口作为新的根端口)连接的对端网桥的指定端口处于Forwarding 状态,则在新拓扑结构中的根端口可以立刻进入转发状态。

• 指定端口快速切换:
    ○ 指定端口可以通过与相连的网桥进行一次握手,快速进入转发状态:
         1.握手请求报文:Proposal;
         2.握手回应报文:Agreement。
    ○ P/A 机制条件:握手必须在点到点链路进行。

• RSTP 拓扑改变处理机制
    ○ 1、拓扑改变触发条件:
        只有非边缘端口转变为Forwarding 状态时,产生拓扑改变;
    ○ 2、拓扑改变处理:
        在两倍Hello 时间内向所有其它指定端口和根端口发送TC置位BPDU 报文;
        清除除接收到TC 报文的端口之外的所有指定端口和根端口学习的MAC地址。

• RSTP 拓扑改变处理:
    ○ 1、不再使用TCN;
    ○ 2、收敛更快速。
    ○ STP的TCN是拓扑改变时网桥向根桥发送TCN(经过的网桥也会收到),然后由根桥通知其它网桥。
    ○ 而RSTP是网桥直接通过DP和RP端口向其它网桥直接发送TC报文,其它网桥收到后会继续从其DP和RP端口继续扩散发送,从而实现根桥和所有网桥都知道拓扑改变。

• RSTP 和STP 的兼容运行:
    ○ RSTP 的端口连续三次接收到版本为STP 的BPDU,则端口协议将切换到STP协议。
    ○ 切换到STP 协议的RSTP 端口将丧失快速收敛特性。
    ○ 出现STP 与RSTP 混用的情况,建议将STP 设备放在网络边缘。
    ○ 运行STP 的网桥移除后,由RSTP模式切换到STP模式的端口仍将运行在STP模式。

• 基本配置命令:
    ○ 开启生成树功能:
        [H3C] stp enable
    ○ 关闭该端口的生成树功能:
        [H3C-Ethernet0/1] stp disable
    ○ 生成树运行模式:
        [H3C] stp mode { stp | rstp | mstp } 
• RSTP 可选参数:
    ○ 
• 配置优先级和端口开销:
    ○ 更改Bridge Priority:
        [H3C] stp priority bridge-priority
    ○ 更改端口开销的值:
        [H3C-Ethernet0/1] stp cost cost
    ○ 更改设备支持的端口开销标准:
        [H3C] stp pathcost-standard { dot1d-1998 | dot1t | legacy } 

• 配置端口的优先级:
    ○ 1.端口ID 由两部分组成:
        PortPriority+PortIndex
    ○ 2.改变端口优先级
        [H3C-Ethernet0/1] stp port priority port-priority
• 配置端口的Hello Time:
    ○ [H3C] stp timer hello centiseconds
• 配置端口的Max Age:
    ○ [H3C] stp timer max-age centiseconds
• 配置端口的Forward Delay:
    ○ [H3C] stp timer forward-delay centiseconds

• 配置网络直径:
    ○ 1、网络直径:任意两台终端设备之间通过的交换机数目的最大值;
    ○ 2、改变网络直径会间接影响到Max Age 和Forward Delay 这两个参数的值,这种方法比直接手工配置两个参数更为可靠。
    ○ 3、所以当网络中加入交换机可以通过改变网络直径参数来达到适应网络状况的目的。
    ○ 4、配置命令为:
        [H3C] stp bridge-diameter bridgenum(diameter:直径)

• RSTP 高级配置:
    ○ 配置端口为边缘端口:
        端口视图配置:
            [H3C-Ethernet0/1 ] stp edged-port enable 
    ○ 全局或端口视图执行mCheck 操作:
        [H3C] stp mcheck 
        [H3C-Ethernet0/1 ] stp mcheck 
        RSTP自动迁移至STP,STP设备下线后,可手工切换STP到RSTP。
• RSTP 维护调试命令:
    ○ 显示和STP 统计和状态信息:
        [H3C] display stp [ interface interface_list ] [brief] 

三. MSTP

• STP/RSTP 的局限:
    ○ 所有VLAN 共享一颗生成树;
    ○ 无法实现不同VLAN 在多条Trunk 链路上的负载分担。

• MSTP:(Multiple Spanning Tree,多生成树协议)
    ○ 基于实例计算出多颗生成树,实例间实现负载分担。

• MST 域(MST Region):
    ○ 拥有相同MST 配置标识的网桥构成的集合:域名、修订级别、VLAN 映射关系。
• 协议标准
    ○ STP:IEEE 802.1D
    ○ RSTP:IEEE 802.1W
    ○ MSTP:IEEE 802.1S

• MSTP 的特点如下:
    ○ MSTP 引入“域”的概念,把一个交换网络划分成多个域。每个域内形成多棵生成树,生成树之间彼此独立;在域间,MSTP利用CIST 保证全网络拓扑结构的无环路存在。
    ○ MSTP 引入“实例(Instance)”的概念,将多个VLAN 映射到一个实例中,以节省通信开销和资源占用率。MSTP各个实例拓扑的计算是独立的(每个实例对应一棵单独的生成树),在这些实例上就可以实现VLAN 数据的负载分担。
    ○ MSTP 可以实现类似RSTP 的端口状态快速迁移机制。MSTP兼容STP和RSTP。

• MSTP的术语
    ○ MST 域:是由交换网络中的多台设备以及它们之间的网段所构成。这些设备具有下列特点:都启动了MSTP;具有相同的域名(Region);具有相同的VLAN 到生成树实例映射配置;具有相同的MSTP修订级别配置;这些设备之间在物理上有链路连通。
    ○ VLAN 映射表:VLAN 映射表是MST 域的一个属性,用来描述VLAN 和生成树实例的映射关系。
    ○ CIST(公共和内部生成树):是整个网络所有设备经过生成树计算得到的一个树,总根是整个网络优先级最高的桥,即CSIT的根桥
    ○ IST(内部生成树):IST 是域内实例上的生成树。IST和CST共同构成整个交换网络的CIST。IST是CIST在MST域内的片段。
    ○ CST(公共生成树):CST是连接交换网络内所有MST域的单生成树。如果把每个MST域看作是一个“设备”,CST就是这些“设备”通过STP协议、RSTP 协议计算生成的一棵生成树。
    ○ MSTI:每个域内可以存在多棵生成树,每棵生成树和相应的VLAN 对应。这些生成树就被称为MSTI。
    ○ 域边界端口:域边界端口是指位于MST域的边缘,用于连接不同MST域、MST域和运行STP的区域、MST域和运行RSTP的区域的端口。
    ○ 外部路径开销(EPRC):指的是端口到总根的最短路径开销。
    ○ 内部路径开销(IPRC):发送此BPDU的网桥到达CIST域根的路径开销。
    ○ 指定端口ID:由指定端口的优先级和端口号组成。
    ○ Master 端口:连接MST 域到总根的端口,位于整个域到总根的最短路径上。IST根桥在CIST上的根端口。
    ○ Backup 端口:当开启了MSTP的同一台设备的两个端口互相连接时就存在一个环路,此时设备会阻塞端口ID较小的端口,此阻塞端口称为Backup 端口,而另外一个端口则处于转发状态,成为指定端口。
• MSTP 的BPDU 格式:

深入理解生成树协议STP

CIST 的优先级向量:
    ○ 1CIST 优先级向量
        {RootID: ERPC: RRootID:IRPC: DesignateBridgeID: DesignatePortID: RcvPortID}
    ○ 2、比较原则:最小最优:
        ◊ 首先比较CIST 总根ID--->
        ◊ 其次比较CIST 外部路径开销--->
        ◊ 再次比较CIST 域根ID--->
        ◊ 再其次比较CIST 内部路径开销--->
        ◊ 再其次比较CIST 指定桥ID--->
        ◊ 再其次比较CIST 指定端口ID--->
        ◊ 最后比较CIST 接收端口ID。

• MSTI 的优先级向量:
    ○ 1、MSTI 优先级向量
        {RRootID: IRPC: DesignateBridgeID: DesignatePortID: RcvPortID}
    ○ 2、比较原则:最小最优:
        ◊ 首先比较MSTI 域根ID--->
        ◊ 其次比较MSTI 内部路径开销--->
        ◊ 再其次比较MSTI 指定桥ID--->
        ◊ 再其次比较MSTI 指定端口ID--->
        ◊ 最后比较MSTI 接收端口ID。

• MSTP 计算方法:
    ○ CST/IST 的计算和RSTP 类似;
    ○ MSTI 的计算仅限于区域内;
    ○ MSTI 计算参数包含在IST BPDU 中,和IST的计算同步完成。

• MSTP 和RSTP 的互操作:
    ○ RSTP 桥将MSTP域看做一个桥ID为域根ID的RSTP 桥。

• MSTP 的P/A 机制:(Proposal:建议)
    ○ 上游桥发送的Proposal BPDU 中,P 标志位和A 标志位都置位;
    ○ 下游收到P 标志位和A 标志位都置位的Proposal BPDU,在将端口同步后会回应Agreement BPDU,使得上游的指定端口快速进入转发状态。

• MSTP 基本配置:
    ○ 区域配置:
        由系统视图进入区域配置视图:
            [H3C] stp region-configuration 
        配置域名:
            [H3C-mst-region ] region-name name
        配置修订级别:
            [H3C-mst-region ] revision-level level
        配置VLAN 和实例的映射:
            [H3C-mst-region ] instance instance-id vlan vlan-list
        激活区域配置:
            [H3C-mst-region ] active region-configuration
• MSTP 高级配置:
    ○ 配置交换机为首选根桥:
        [H3C] stp instance instance-id root primary
    ○ 配置交换机为备份根桥:
        [H3C] stp instance instance-id root secondary
• MSTP 兼容性配置:
    ○ 配置端口识别/发送MSTP 报文格式:
        [H3C-GigabitEthernet1/0/1] stp compliance { auto | dot1s | legacy } 
    ○ 全局开启摘要侦听:
        [H3C] stp config-digest-snooping
    ○ 端口开启摘要侦听:
        [H3C-Ethernet1/0/1 ] stp config-digest-snooping
• MSTP 兼容性配置:
    ○ 下游设备配置No Agreement Check 特性
        [SWB-Ethernet1/0/1] stp no-agreement-check 

四. STP保护机制

• BPDU 保护机制:
    启动了BPDU 保护功能后,如果边缘端口收到了配置消息,MSTP 就将这些端口关闭。

• BPDU 保护命令:
    [SWA] stp bpdu-protection

• 根桥的错误切换:
    合法根桥收到优先级更高的(BPDU)配置消息,失去根桥的地位,引起网络拓扑结构的变动。

• 根桥保护机制:
    对于设置了根保护功能的端口,一旦该端口收到某实例优先级更高的配置消息,立即将该实例端口设置为侦听状态,不再转发报文。

• 根桥保护命令:
    [H3C-Ethernet1/0/1] stp root-protection 
• 环路的产生:
    由于链路拥塞或者单向链路故障,端口会收不到上游设备的BPDU 报文,此时下游设备重新选择端口角色,会导致环路的产生。(网络拥塞导致BPDU 丢失、光纤链路单通)

• 环路保护机制:
    ○ 在MSTP中,只对Root Port、Alternate port、Backup Port有效。
    ○ 配置了环路保护的端口,当接收不到上游设备发送的BPDU 报文时,环路保护生效。
    ○ 如果该端口参与了STP 计算,则不论其角色如何,该端口在所有实例都将处于Discarding 状态,直到再次接受到BPDU。

• 环路保护命令:
    [H3C-Ethernet1/0/1] stp loop-protection 

• TC 攻击:
    在有伪造的TC-BPDU 报文恶意攻击设备时,设备短时间内会收到很多的TCBPDU 报文,频繁的删除操作给设备带来很大负担,给网络的稳定带来很大隐患。

• TC 保护机制:
    ○ 设置设备在收到TC-BPDU 报文后的10 秒内,进行地址表项删除操作的最多次数;
    ○ 监控在该时间段内收到的TC-BPDU 报文数是否大于门限值。

• 配置TC保护命令
    ○ 开启TC保护功能:
        [H3C] stp tc-protection enable 
    ○ 配置门限值:
        [H3C] stp tc-protection threshold number