生成树协议 spanning-tree protocol 网络中额外添加的链路连接着路由器和交换机 会引起流量的环路 当一个交换机的连接丢失时 另一条链路能快速地取代失败的链路 并且不产生新的流量环路 STP会解决这样的问题
主要内容包括
冗余拓扑中存在的问题 生成树协议 生成树收敛 高级生成树协议
一.冗余拓扑中存在的问题
![](https://i-blog.csdnimg.cn/blog_migrate/8f63ba210fe4e376a2ac13cea2174623.jpeg)
1.广播风暴
a pc1发出一个广播帧
b sw1收到广播帧 从fa1/1 1/2 1/5发出
c sw2从fa1/2端口发过来的广播帧 然后sw2从fa1/1 fa1/4 1/5发出
d sw2从fa1/1端口发过来的广播帧 然后sw2从fa1/2 fa1/4 1/5发出
e 同理sw1也从fa 1/1 和1/2端口收到sw2转发过来的广播帧 然后 从接受端口之外的所有端口转发出去
f 一个广播帧在sw1和sw2之间不停地被转发 永无止境 最终造成网络拥塞或瘫痪
2.mac地址表不稳定
a sw1从fa1/4接受pc1的广播帧 sw1学习mac地址 记录下pc1的mac地址在fa14端口 将转发给sw2
b sw2先从fa1/1收到广播真 sw2记录下pc1的mac地址在fa1/1端口 然后sw2从fa1/2也收到这个广播帧 sw2更新pc1的mac地址在fa1/2端口 sw2把接收到的广播数据帧再转发到sw1
c sw1先后从fa1/2和fa1/1端口接收sw2转发过来的广播帧 依次更新pc1的mac地址在fa1/2和fa1/1端口 可真正的pac1在fa1/4端口
3.重复帧拷贝
a pc1发单播帧到pc3
b sw1从fa1/1 和fa1/2都发出
c sw2从fa1/1端口收到sw1转发过来的单播帧 从fa1/4给pc3
d sw2从fa1/2端口收到sw1转发过来的单播帧 从fa1/4给pc3
重复了
e pc1发送一次 pc3收到两次
环路的判断方法
感官法:网速变慢 观察交换机或集线器的指示灯
分析法:抓取数据包 利用软件 类似 sniffer抓包软件
二 STP介绍
STP通过阻塞冗余路径上的一些端口 确保到达任何目标地址只有一天逻辑链路
BPDU bridge protocol data unit 桥接数据单元 STP借助交换bpdu来阻止环路
STP使用STA ---生成树宣发 来决定交换机上的哪些端口被阻塞来阻止环路的发生 STA选择一台交换机作为根交换机 也成为根桥 ROOT bridge
BID bridge id 叫做桥id 用来识别是哪台交换机发出的bpdu
术语:
a
根桥 拥有最佳id的网桥 为网络中最重要的点 其他网桥都需要确定一个通往根桥的单一路径 通往根桥的最佳路径 上的端口被称为
根端口
b BPDU用于根交换机选举的信息 桥协议数据处理单元 项链交换机互传
c 桥ID STP使用桥id跟踪网络中的所有交换机
d 非根桥 除了根桥外的所有网桥
e 端口开销 用于确定最佳路径 链路的开销取决于链路的带宽
f
根端口 与根桥直接相连的链路所在的端口 或者是通往根桥路径开销最低的端口
存在多条链路到根桥 需要检查链路的贷款再确定根端口 最低开销的端口是根端口 如果开销相同 需要用带有较
低通告的桥id的那个桥 多台链路连接到同一台设备时,使用上行交换机上连接到最低端口号的端口
g 指定端口 通过其根端口到达根桥开销最低的端口 又叫指派端口 会被标记为转发端口
h 非指定端口 开销比指定端口高的端口 除了根端口和指派端口 其余的端口就是非指派端口 初始设置为阻塞状 态 不能进行转发
i 转发端口 能够进行数据帧转发的端口
j 阻塞端口 不能转发帧的端口 避免环路的作用 但是会坚挺BPDU帧 并且丢弃其它所有帧
1.根交换机选举
BID由三部分组成 优先级 发送交换机的mac地址和extended system id扩展的系统id 可选
![](https://i-blog.csdnimg.cn/blog_migrate/fb236e4bedc1d0a1395960c3a7355cbe.jpeg)
在不适用扩展系统id的情况下 bid由优先级域和交换机的mac地址组成 优先级0-65535 2的16次方 mac地址不同
老款交换机命令
show spanning-tree breif
新款和packet tracer中
show spanning-tree
在使用扩展系统id的情况下 每个vlan的mac地址可以相同 bid被要求包含vlanid的信息
当前普遍的交换机都使用扩展系统的id
拥有最小的bid的交换机被选为根交换机
在同一个广播域中所有交换机参与选举根交换机
a sw1启动 假定自己是根交换机 发送次优 bpdu 默认2秒一个bpdu帧 此帧的bid和rootid相同
b sw2接收到bpdu 并读取root id 如果比自己的bid小 就更新rootid为sw1的root id 标识sw1为根交换机
c sw2转发更新的bpdu帧到其他交换机
d 最后生成树种的所有节点都有一致的rootid 就是根交换机的bid 标识交换机
A 更改交换机为制定vlan的根交换机 (不好似用extended system id)的情况下 bid有交换机的优先级和mac地址组成
因为mac地址固定 所以通过修改交换机的优先级实现
命令如下
spanning-tree vlan 1 priority 1000
或者spanning-tree vlan 2 priority 2000
B 如果是使用extended system id的交换机 优先级只能设置成 0. 4096 8192 等4096的倍数
spanning-tree vlan 1 root primary 此为动态设置交换机优先级的命令
例如 网络中已经存在根交换机了 根交换机的优先级是200 mac地址比该交换机小 所以此命令将把该交换机的优先级设置成199 使得该交换机成为新的根交换机
2.端口花费和路径花费
根桥选举出来后 计算其他交换机到根桥的花费 sta考虑端口花费和路径花费 路径花费等于从根交换机到达最终交换机前进方向上进入方向的端口花费总和
端口话费默认和端口带宽有关
![](https://i-blog.csdnimg.cn/blog_migrate/373832bfc08817a11f731da40139b71d.jpeg)
如果一台交换机有多条路径可以到达根交换机 交换机选择路径花费最小的那条路径
a 端口花费 如图 12-2-1
修改sw3 fa1/1 端口的花费
int fa 1/1
spanning-tree cost 200
经过多台交换机才到达根交换机 路径花费等于中间经过多条路径花费的总和
2.BPDU
帧细节
包含12个字段
flags 标记域
rootid 根交换机的bid
cost of path 到根交换机的路径花费
bridge id 转发BPUD的交换机的BID
port id 转发BPDU的交换机端口 pid 等于端口优先级 +端口编号
message age BPDU已经存在的时间
max age BPDU的最大存在时间
hellotime根桥发送配置信息的间隔时间 默认值是2秒
forward delay转发延迟
3.端口角色
当sta决定使用哪一条路径之后 sta配置交换机的端口角色 描述了它与根桥的关系和是否允许转发流量
a 根端口 root port 简称rp
非根交换机上离根交换机最近的端口称作根端口 每个非根交换机上有且只有一个根端口
![](https://i-blog.csdnimg.cn/blog_migrate/a9c6d85b6437e371b6b67c1ca18bbafb.jpeg)
sw2从fa1/2到sw1最近 所以 fa1/2是sw2的根端口 同理 sw3中fa1/1是根端口
b 指派端口 (designated port 简称DP)
每个网段都有一个指派端口 它是该网段到根交换机最近的交换机上的端口
网段 指派端口 所属交换机
sw1-sw2 fa1/1 sw1
sw1-sw3 fa1/3 sw1
sw2-sw3 fa1/3 sw2
c 非指派端口 既不是根 也不是指派端口的激活端口称作非指派端口
![](https://i-blog.csdnimg.cn/blog_migrate/fbe5dae885f8feedcb7d6f7d0130a82b.jpeg)
上图中的sw3中的fa1/2 既不是根 也不是指派 所以此端口处在blocking阻塞状态 用来阻止环路
根和指派端口都在forwarding转发状态
d 禁用端口 被管理原始用shutdown命令关闭的端口称作禁用端口 禁用端口不参与sta生成树算法
4.端口状态和BPDU时间
交换机互联通过交换bpdu帧构建不环路的路径
端口需要在5种状态间转换 转换会经历3种BPDU时间
a 端口状态转换
down 禁用 可用no shut命令和插入网线激活
blocking 阻塞 链路激活 后 端口转换到此状态 20s时间 决定该端口角色 如果该端口是根端口或者指派端口 将转换到下一个状态 如果该端口是非指派端口 则继续停留在blocking状态
listening 侦听状态 不仅接受而且发送BPDU 通知邻居交换机它将参与激活拓扑 15s
learning 学习 开始学习mac地址 15s
forwarding 转发 可以转发数据帧
b 端口所处状态的功能
![](https://i-blog.csdnimg.cn/blog_migrate/c4b8ad434109823b3d86320ae085df68.jpeg)
有关的时间参数有 hello time max age forward delay
修改命令 spanning-tree vlan 1 forward-time ***
hello time 发送配置BPDU的时间间隔
操作 生成树
1.选举根桥
a 首先选取一个根桥
b 每个网桥必须找出属于自己的一个并且也是唯一一个分派的根端口
c 任意两台交换机之间的链路必须要有且唯一一个指派端口 位于最大带宽的链路上
d 根桥上的每个端口都是指定端口
2.生成树的端口状态
阻塞 侦听 学习 转发 禁用
3.会聚
当所有端口都转换到了转发或者阻塞模式时 就会形成STP会聚 会聚过程中 主机数据都会停止发送
4.生成树的端口快速
portFast 当stp会聚时 此端口无需花费50s即可进入转发模式 前提是确定此端口不会因为禁用stp而产生环路
int fa 0/1
spanning-tree portfast
5.生成树的uplinkfast 缩短stp的会聚时间 只配置在接入层交换机上或者带荣誉链路的交换机
或者有冗余链路上的交换机 并且其中至少有一条链路处于阻塞模式
允许交换机在主链路失效之前就找出到根桥的可替换路径
6.生成树的BackboneFast
在所有的交换机上可以启用 无法与交换机直接相连的链路失效的情况下 使用它可以加速stp会聚
7.快速生成树协议 RSTP 802.1w
以上是802.1d的内容 8.2.1w比前者进化许多 当拓扑发生变化时 它具有更快的会聚时间 创建802.1w保证向后 兼容性
8.EtherChannel
允许STP将某条链路设置为阻塞BLK模式 也可以将多条链路捆绑在一起创建逻辑上的聚合 可以像单一链路那样工作
两类版本 思科的pagp 端口聚合协议
IEEE 802.3ad 链路聚合控制协议 LACP
三 STP 收敛 *****
所谓收敛就是整个网络达到一个稳定的状态 选举出根交换机 并且决定出所有端口的角色 排除所有潜在的环路
当网络拓扑发生变化时 执行sta生成树算法 让网络重新收敛
1.生成树的选举
无环路的网络拓扑 需要4步实现
a 每个广播域只有一个根交换机
b 每个非根交换机有且只有一个根交换端口
c 每个网段有且只要一个指派端口
d 既非根又非指派端口的端口被阻塞
1.选举根交换机
拥有最小BID的交换机将成为根交换机
2.选举根端口
从非根交换机到根交换机最低路径花费的端口 如果多个端口收到根交换机的BPDU
a 最低花费的端口成为根端口
b 花费相同的情况下 比较
发送者的bid
c 发送者bid相同 比较
发送者的pid ( port id ) pid=端口优先级+端口号 端口优先级占用一个字节 默认 128 端口号在同一个模块上顺序增加的
spanning-tree port-priority ?
3.指派端口
每个网段都有一个指派交换机 负责把网段的数据发往根交换机 次交换机上的端口叫指派端口
过程是先选出指派交换机 再选指派端口
流程
a 比较花费
先指派交换机 再指派端口
b 比较bid 此bid为本地交换机的bid 而非发送者的bid 选出指派交换机
c 比较pid 如果指派交换机上有多个端口连接到同一个网段 则本地交换机pid最小的端口为指派端口
4.阻塞端口
既非根端口 也非指派端口的端口将被阻塞
2.STP拓扑变化
当端口从转发变成阻塞 或者交换机端口变为转发状态时 并且有一个指派端口 此时 交换机会通知根桥拓扑变化了 根交换机再广播这个信息到整个网络中
通常非根桥不发送bpdu到根桥 但是为了给根桥 拓扑变化信息的通知 一种特殊的BPDU被引入 叫做TCN topology change notification 拓扑改变通知 从根端口向外发送tcn
![](https://i-blog.csdnimg.cn/blog_migrate/2449cf007422cf92481ca3e9a0528ef2.jpeg)
a s2检测到拓扑变化 s2从根端口向d1发送TCN
b d1收到s2发来的tcn 发tc向s2确认
c d1产生tcn 从根端口发给c1
d c1收到tcn c1发tca给d1确认
3.增强的STP功能
快速端口 减少端口连接的时间 注意仅在连接
计算机的端口上使用该功能 接入层交换机
在trunk端口使用此功能无效
interface range fa1/1 -10
spanning-tree portfast
四.高级的STP
STP类型
a 思科私有
1.
pvst per vlan 每个vlan一个生成树协议
支持 isl封装协议 backbonefast uplinkfast 和portfast
2
.pvst+ per vlan stp plus
支持isl 和 802.1Q封装协议
增加了BPDU guard 和root guard
3.
rapid-pvst+ 收敛速度快
b IEEE标准
1.
RSTP papid STP快速生成树协议
2.
MSTP Multiple STP 多生成树协议
多vlan被映射到同一个生成树协议
1.PVST+
PVST+环境中 可以调整生成树参数 使不同的vlan使用不同的链路
![](https://i-blog.csdnimg.cn/blog_migrate/5eaf5d46552a73e8a15681ace06eb247.jpeg)
针对vlan1和vlan2 是sw2的fa1/1端口都被阻塞 下面链路 不使用
pvst+支持每个vlan一个生成树
可以把sw2配置成vlan2的根 vlan2的流量从下面链路 vlan1的流量从上面走
实现两条链路的负载均衡和冗余备份
sw1 配置如下
vlan 2
exit
conf t
int fa 1/1
switchport mode trunk
int fa 1/2
switchport mode trunk
exit
spanning-tree
vlan 1 root primary 设置vlan1的根桥
sw2配置如下
vlan 2
exit
conf t
int fa 1/1
switchport mode trunk
int fa1/2
switchport mode trunk
exit
spanning-tree
vlan 2 root primary 设置vlan2的根桥
2.RSTP
此为IEEE
802.1W 从stp 802.1d发展而来 重新定义了端口的类型和状态 如果一个端口是替代端口或备份端口 不需要等待网络的收敛立即就可以改变到转发状态
命令
spanning-tree mode ?
mst
pvst
rapid-pvst
spanning-tree mode rapid-pvst 选择里面的最后一项 rapid-pvst
a.RSTP特点
首选的阻止二层网络环路的协议
不支持uplinkfast 和backbonefast
b.RSTP的BPDU
BPDU被用于保活检测keepalive 连续丢失三个BPDU暗示和邻居交换机的连接丢失 可以快速检查链路失败
c.边缘端口
指交换机上从来不会连接到另一台交换设备的端口 它可以被立即转换到转发状态
![](https://i-blog.csdnimg.cn/blog_migrate/0dba24ae3bf79cb29a19f47c6501f4c9.jpeg)
12-4-3图中表示
sw1是根交换机 两个指派端口 DP
sw2是指派交换机 一个根端口 指派端口 和一个备份端口 backup port---指派交换机上的非DP端口
sw3是非根和非指派交换机 一个根端口 一个替代端口---非指派交换机上的端口
边缘端口和生成树中portfast一样 是连接最终的工作站 配置边缘端口的命令和配置protfast端口的命令相同,区别是当rstp的边缘端口收到BPDU时,该端口立即失去边缘端口的状态 变成一个正常的生成树端口
d.链路类型
当某些端口的链路类型参数满足时,可以被快速地转换到转发状态,边缘端口被当做点对点链路,可以被直接过渡到转发状态,非边缘端口有两种链路类型 点到点链路类型和共享链路类型 。链路类型可以被自动检测到,如果是全双工链路就是点到点链路,如果是半双工链路则是共享链路,也可以在交换机端口上明确规定端口的双工类型来确定链路的类型
是否使用链路类型参数和端口的角色有关:
1.根端口不使用链路类型参数,根端口可以快速地转换到转发状态
2.替换端口和备份端口在多数场合下也不使用链路类型参数
3.使用链路类型参数最多的是指派端口,如果链路类型是点对点类型 指派端口可以快速地转换到转发状态
e.端口角色和端口状态
三种
丢弃 discarding 学习learning 转发forwarding
![](https://i-blog.csdnimg.cn/blog_migrate/acf824985bcdb1d804517bab6f5af19f.jpeg)
根端口 同STP根端口 转发数据
指派端口 同stp的指派端口 转发数据
替换端口 到根桥的替换路径 用来替换当前的根端口 替换端口在生成树拓扑稳定的情况下,处于丢弃状态
备份端口 由指定端口提供到生成树叶节点的备份路径 只存在与这两种情况下 :两端口通过点到点链路相连成一 个环路;网桥与共享lan网段有链条或两条以上的连接 备份端口在拓扑稳定的情况下 处于丢弃状态
禁止端口 不起作用的端口