当在企业网三层架构中使用线路冗余时将会出现二层桥接环路,这是因为CAM是流量触发交换机生成的,该表默认并没有被管理。交换机只要连接成环路,就会成环。
因此可能导致的问题:
- 广播风暴
- Mac表地址翻滚
- 同一数据帧的重复拷贝
以上问题产生时,很可能导致设备超过运算极限,设备将会重启或者断电保护
为了解决以上问题,就需要用到STP(生成树)协
什么是生成树协议?生成树是指在一个二层交换网络中,生成一棵树型结构,逻辑的阻塞部分接口,使得从根到所有的节点仅存在唯一的路径。当最佳路径故障时,自动打开部分阻塞端口,来实现线路备份的作用。
生成树在生成过程中,应该尽量的生成一棵星型结构,即最短路径树。
802.1D是生成树协议中最原始的协议,属于公有标准,目前已被淘汰
在802.1D协议中,所有交换机间使用BPUD包来进行沟通
BPDU:即桥协议数据单元 周期2s发送一次,用来保活,存活时间20s 跨层封装到二层数据帧
BPDU的种类:配置BPDU、TCN拓扑变更消息、次优BPDU
BPDU包的内容:Protocol ID (协议ID)、Version(STP版本)Message Type (消息类型)、Root ID(根桥ID)Cost of Path(路径开销)Bridge ID(桥ID)Port ID(端口ID)Message Age (当前消息年龄)Max Age( 最大消息年龄)Hello Time(问候时间)Forward Delay 端口从listening -> learning 或 learning -> forwarding 的转态需要时间
SPT选举过程:
-
选举根网桥
根网桥在一棵生成树实例中有且只有一个,是交换网络的中心
选举规则:先比较BID即网桥优先级(默认32768 取值范围:0-65535)越小越优, 若BID相同,则比较设备的mac地址大小,同样是越小越优 -
选举根端口
在每台非根网桥中,有且只有一个,是离根网桥最近的接口 周期接受来自根的BPDU
选举规则:比较根网桥发出的BPDU后,通过该接口进入时的最小cost的值(越小越优)
若入向cost值相同,比较接口上级设备的bid值,bid小的成为根端口
若对端的设备bid相同,比较接口对端接口的pid,较小的接口pid成为根端口
若对端接口pid相同,则比较本地接口的同样越小越优 -
选举指定端口
每条存在stp的物理链路上有且仅有一个 负责转出根网桥的BPDU
选举规则:比较根网桥BPDU后,通过该接口转出时的cost值,越小越优,若消耗值相等,比较本地BID,越小越优,本地BID相等的情况下,比较本地PID,小优,若本地pid相等则直接阻塞 -
选举阻塞端口
以上所有角色选举完成后,剩余的全部接口为非指定;其状态为阻塞(阻塞端口并不是关闭接口,依然可以接收到数据帧,但不转发数据帧;可以正常识别BPDU)
生成树类型:
802.1D公有协议
各项状态:
Down 正常通电,通讯后切换到下一个状态
侦听(15s)所有交换机手法BPDU,选举所有角色
根端口与指定端口进入下一状态 非指定端口直接进入阻塞状态
学习(15s)所有交换机接受记录经过的数据帧源mac地址
转发----分端口 指定端口
阻塞 --非指定端口
该算法的收敛时间为30s(初次收敛)其中十五秒为侦听,十五秒为学习
当结构产生变化时,存在直连检测需要30S,存在非直连检测需要50S
该算法的缺点:收敛速度慢,链路利用率低
PVST
Cisco私有协议 PVST—基于vlan的生成树协议,一个vlan一个树
不同vlan的BPDU区别在于优先级;
优先级=4096倍数+vlan id 人为仅可修改4096倍数备份,且只能修改为4096的整倍
仅支持 trunk干道,封装为ISL(cisco私有封装)
缺点:不支持802.1D,同样的收敛慢,树多,消耗资源量大(不过思科设备中含有一块独立芯片用来处理多生成树)
PVST+
基于PVST的改良,支持802.1q标准
可以做到部分加速(端口加速,上行链路加速,骨干加速)
端口加速用于access接口,用于连接pc
上行链路加速:针对直连检测,只在汇聚层配置
骨干加速:针对所有的交换机配置,用于在收到次优BPDU时,省区20s的等待,不能省去30s的收敛.
该协议优点:和PVST一样基于vlan工作,提高链路利用率,部分加速功能在特定情况下能起到一定的加速作用,兼容802.1q
缺点:树多,加速不够彻底
802.1W快速生成树
RSTP----由PVST+升级–依然一个vlan一棵树 (思科设备有芯片)
1-2s内完成收敛 自带所有加速功能
802.1w(公有协议)----由802.1d升级----一个网络一棵树
重要升级之一:取消了计时器
MSTP 802.1s (公用私用都可)
基础为快速生成树
基于组的STP,将多个VLAN放置于同一个组;一个组一棵树
默认存在组0,且所有vlan默认在0