通过发送BPDU来确拓扑结构,根据互相交互的BPDU来选举出根桥和端口角色从而防止环路、防止广播风暴
如图:任意一台交换机发出一个广播就会促发其他交换机也发出广播 就会陷入无限循环 而且交换机的mac地址表会不断的变化 影响网络的稳定和畅通
设备之间传输BPDU来建立生成树结构,根据BPDU里的信息,设备之间就可以选举出根桥和对应的端口角色 BPDU分了两种 分别是 配置BPDU 和 TCN BPDU
配置BPDU:采用组播地址0180-c200-0000发送 用于建立stp网络结构,还用于维持stp的结构 两秒发一次
TCN BPDU:下游设备检测到网路结构发生变化后 发出的通知
● 根桥有且只有一个 通过比较 桥ID选举出 桥ID=优先级+mac-小的优选(优先级默认为32768)
● 优先级的值只能设置为4096的倍数,也就是步长为4096
指定端口
设备发送配置BPDU的端口
● 根桥上的所有端口都是指定端口
● 指定端口可以存在多个
● 端口状态为转发状态
选举:先比较对端桥di 再比较对端端口ID 小的选为根端口
根端口
设备接收BPDU的端口,和去往根桥的最优端口
● 跟桥上没有根端口
● 根端口有且只有一个
● 根端口有且只有一个
● 根端口是设备去往根桥的最优路径
● 根桥所连接的是指定端口
● 端口状态为转发状态
选举:线比较去往根桥的开销 小的优先—>比较上连设备桥ID小的优先—>比较对端 端口优先级小的优先—>比较对端端口号小的优先
阻塞端口
● 不是根端口也不是指定端口 那剩下的就是阻塞端口
● 阻塞端口20秒没收到BPDU 就会发送自己的BPDU参与stp运算
● 端口状态为阻塞状态(Bloking)
● 禁用(Disable)
DOWN状态
● 阻塞(Bloking)
接收BPDU 不发送BPDU 不转发用户数据
● 侦听(Lestening)
接收BPDU 发送BPDU 不转发用户数据
● 学习(Learning)
接收BPDU 发送BPDU 不转发用户数据
● 转发(forwarding)
接收BPDU 发送BPDU 转发用户数据
当网络结构发生变化后 一个阻塞端口转变为转发状态需要经历50秒的时间 具体转变过程如下
● 阻塞状态----20秒没收到 BPDU则认为网络发生变化,端口进入侦听状态参与STP运算
● 侦听状态—发送自己的BPDU 侦听网络中的BPDU 15秒后进入学习状态
● 学习状态—发送自己的BPDU 学习mac地址 15秒后进入转发状态
//15秒是为了有充足的时间让stp进行收敛,stp没收敛完就发送用户数据会有环路
● 转发状态—进行用户数据的转发
根桥发生变化:非根桥交换机20秒后收不到来自根桥的BPDU就会进行重新计算stp 阻塞端口 进入 侦听状态 在进入学习状态 在进入转发状态需要50秒
直连端口发生变化:阻塞端口变为根端口计算生成树需要两个转发时延15+15=30秒的时间
由根桥从指定端口发送BPDU 非根桥从根端口收到BPDU后 从指定端口向下游转发这个BPDU
若设备20秒没收到BPDU就会认为网络结构发生变化 引起stp从新计算 根桥发送BPDU的频率是2秒一次
在stp中存在一个问题 就是收敛时间长 大概需要50秒的时间 所以需要RSTP的P/A机制(proppasl/agreement)来实现端口的快速转变
相对于stp rstp新增了端口角色分别是Backup和Alternate
Backup端口:此端口作为指定端口的备用端口,当指定端口发生故障时,此端口变为指定端口(18秒后) 正常情况下是阻塞状态
Alternate端口:此端口作为根端口的备用端口,当根端口发生故障时,此端口变为根端口(立刻)进入转发状态 正常情况下是阻塞状态
不接收BPDU 不参与stp运算 可从禁用状态直接变为转发状态 但是一旦接收到BPDU就会立刻变为普通接口 参与stp运算
// 边缘端口通常设置在交换机和pc相连接的端口,因为pc一旦接入交换机 交换机就会认为网络发生变化就会产生TCN BPDU 由于pc是经常开关的 所以会频繁影响stp生成树 设置为边缘端口就会解决这类问题
// 但是一旦边缘端口连接到了其他交换机 那么交换机就会向这个端口发送BPDU 一旦边缘端口收到BPDU就会立刻变回普通的端口
RSTP将STP的五种端口状态简化为三种,将 禁用 阻塞 侦听合并为禁用
禁用Discarding | 发送BPDU 接收BPDU 不转发用户数据 |
---|---|
学习Learning | 接收但不转发用户数据 构建MAC地址表 |
转发Forwarding | 发送BPDU 接收BPDU 转发用户数据 |
每台设备都自主发送BPDU 不需要收到根桥的BPDU才触发发送 频率为2秒一次
在stp中 20秒没收到来自根桥的BPDU就会认为链路出现故障 所以设备发现故障存在的时间需要20秒
而在RSTP中若三个hello time(6秒)没收到上游邻居发送的BPDU就会认为邻居出现故障 加快了设备发现故障的时间
设备检测网络结构发生变化后会触发TCN BPDU 释放故障端口的MAC表项
设备收到TCN BPDU 后 释放除了收到TCN的其他接口的MAC表项
根保护
保护根桥的指定端口不会因为网络问题而改变端口角色
开启根保护后 根桥的指定端口收到更优的BPDU就会进入侦听状态 若一段时间没收到这个BPDU了就会变回转发状态
//根保护有利于保护根桥保持不变 不会变成非根交换机
//根保护只能配置在指定端口上
BPDU保护
开启BPDU保护后 边缘端口收到BPDU后会立刻关闭 需手动开启或自动开启
//边缘端口是链接pc机的 正常情况下PC是不会发送BPDU的 若有人故意攻击BPDU保护就起到了防止有人攻击从而引起的网络震荡
环路保护
端口如果长时间没收到来自上游的BPDU 就会进入丢弃状态 避免网络中出现环路情况(光纤)
无论是stp还是RSTP所有网络设备都是公用同一颗生成树 这样就会造成某些链路没有数据在走,某些链路的传输压力过大的问题
当lsw1 0/0/3接口被选为阻塞端口后 所有数据都通过左边链路 而右边链路却没有任何用户数据流通
造成左边转发压力过大 右边浪费带宽的情况
MSTP多生成树可以根据vlan来划分 在一个网络结构里可以存在多个生成树
如图:
vlan3 的数据走左边 vlan2的数据走右边 这样就可以实现负载均衡
stp mode mstp ###将交换机配置成mstpmoshi
stp region-configuration ###进入mstp配置模式
region-name HUAWEI ###配置域名为HUAWEI
instance 1 vlan 10 ### 将vlan10 加入实例1 中
instance 2 vlan 20 ### 将vlan 20 加入实例 2 中
active region-configuration ### 激活配置
quit
stp instance 1 root primary ###配置此交换机为实例1 的主根
stp instance 2 root secondary ###配置此交互就为实例2 的备根