STP协议树作用

为了提高网络可靠性,交换网络中通常会使用冗余链路。

然而,冗余链路会给交换网络带来环路风险

并导致广播风暴以及MAC地址表不稳定等问题进而会影响到用户的通信质量。

生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题

环路引起的问题

STP工作原理

非根交换机在选举根端口时分别依据该端口的 根路径开销、对端BID、对端PID和本端PID

在网段上抑制其他端口(无论是自己的还是其他设备的)发送BPDU报文的端口,就是该网段的指定端口。

每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路)

指定端口的选举也是首先比较累计根路径开销,累计根路径开销最小的端口就是指定端口。

如果累计根路径开销相同,则比较端口所在交换机的桥ID,所在桥ID最小的端口被选举为指定端口。

如果通过累计根路径开销和所在桥ID选举不出来,则比较端口ID,端口ID最小的被选举为指定端口。

网络收敛后,只有指定端口和根端口可以转发数据。

其他端口为预备端口,被阻塞,不能转发数据

只能够从所连网段的指定交换机接收到BPDU报文,并以此来监视链路的状态

阻塞预备端口(备用端口)

确定根端口、指定端口 剩余的非根端口、非指定端口统称为预备端口。 STP会对这些端口进行逻辑阻塞

STP报文格式

通过交换STP协议帧,建立和维护STP树 STP协议帧由交换机产生、发送、接收、处理 STP协议帧是一种组播帧,组播地址为01-80-c2-00-00-00


图中所示为STP的端口状态迁移机制,运行STP协议的设备上端口状态有5种: Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。 Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路。 Listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。 Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。 Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。

为了计算生成树,交换机之间需要交换相关的信息和参数

这些信息和参数被封装在BPDU(Bridge Protocol Data Unit)中。

BPDU有两种类型:配置BPDU和TCN BPDU。

配置BPDU包含了桥ID、路径开销和端口ID等参数。

STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。

在初始化过程中,每个桥都主动发送配置BPDU。

在网络拓扑稳定以后,只有根桥主动发送配置BPDU

其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。

TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。

配置BPDU中包含了足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:

  1. 根桥ID:由根桥的优先级和MAC地址组成,每个STP网络中有且仅有一个根。​根路径开销:到根桥的最短路径开销。​指定桥ID:由指定桥的优先级和MAC地址组成。

STP协议中包含一些重要的时间参数,这里举例说明如下:

Hello Time是指运行STP协议的设备发送配置BPDU的时间间隔,用于检测链路是否存在故障。

交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文,以确认链路是否存在故障。

当网络拓扑稳定后,该值只有在根桥上修改才有效。

Message Age:如果配置BPDU是根桥发出的,则Message Age为0。

否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。

实际实现中,配置BPDU报文每经过一个交换机,Message Age增加1。

Max Age是指BPDU报文的老化时间,可在根桥上通过命令人为改动这个值。

Max Age通过配置BPDU报文的传递,可以保证Max Age在整网中一致。

非根桥设备收到配置BPDU报文后,会将报文中的Message Age和Max Age进行比较:

如果Message Age小于等于Max Age,则该非根桥设备会继续转发配置BPDU报文。

如果Message Age大于Max Age,则该配置BPDU报文将被老化掉。

该非根桥设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致了根桥连接失败。

STP拓扑变化

在稳定的STP拓扑里,非根桥会定期收到来自根桥的BPDU报文。

如果根桥发生了故障,停止发送BPDU报文,下游交换机就无法收到来自根桥的BPDU报文。

如果下游交换机一直收不到BPDU报文,Max Age定时器就会超时(Max Age的默认值为20秒)

从而导致已经收到的BPDU报文失效,此时,非根交换机会互相发送配置BPDU报文,重新选举新的根桥

根桥故障会导致50秒左右的恢复时间,恢复时间约等于Max Age加上两倍的Forward Delay收敛时间。

此例中,SWA和SWB使用了两条链路互连,其中一条是主用链路,另外一条是备份链路。

生成树正常收敛之后,如果SWB检测到根端口的链路发生物理故障,

则其Alternate端口会迁移到Listening、 Learning、Forwarding状态

经过2倍的Forward Delay后恢复到转发状态。

本例中,SWB与SWA之间的链路发生了某种故障(非物理层故障)

SWB因此一直收不到来自SWA的BPDU报文。

此时,SWB会认为根桥SWA不再有效,于是开始发送BPDU报文给SWC,通知SWC自己作为新的根桥。

SWC也会继续从原根桥接收BPDU报文,因此会忽略SWB发送的BPDU报文。

由于SWC的Alternate端口再也不能收到包含原根桥ID的BPDU报文。

其Max Age定时器超时后,SWC会切换Alternate端口为指定端口并且转发来自其根端口的BPDU报文给SWB。

SWB放弃宣称自己是根桥并开始收敛端口为根端口。

非直连链路故障后,由于需要等待Max Age加上两倍的Forward Delay时间

端口需要大约50秒才能恢复到转发状态。

在交换网络中,交换机依赖MAC地址表转发数据帧。

缺省情况下,MAC地址表项的老化时间是300秒。

如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变

此时MAC地址表中未及时老化掉的表项会导致数据转发错误

因此在拓扑发生变化后需要及时更新MAC地址表项

拓扑变化过程中,根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。

根桥生成TC用来通知其他交换机加速老化现有的MAC地址表项。

拓扑变更以及MAC地址表项更新的具体过程如下:

SWC感知到网络拓扑发生变化后,会不间断地向SWB发送TCN BPDU报文。

SWB收到SWC发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1

然后发送给SWC,告知SWC停止发送TCN BPDU报文。 SWB向根桥转发TCN BPDU报文。

SWA把配置BPDU报文中的Flags的TC位设置为1后发送

通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forwarding Delay的时间(默认为15秒)

最多等待15秒之后,SWB中的错误映射关系会被自动清除。

此后,SWB就能通过G0/0/2端口把从主机A到主机B的帧正确地进行转发。

STP的配置

STP模式

  1. stp mode ? #查询有哪些模式​stp mode stp #使用stp模式

配置交换机优先级

  1. stp priority 4096

通过修改交换机的优先级,可以配置交换机为根交换机

基于企业业务对网络的需求,一般建议手动指定网络中配置高、性能好的交换机为根桥。

可以通过配置桥优先级来指定网络中的根桥,以确保企业网络里面的数据流量使用最优路径转发。

stp priority priority命令用来配置设备优先级值。priority值为整数,取值范围为0到61440,

配置路径开销

  1. stp pathcost-standard ?​stp cost 2000

华为X7系列交换机支持三种路径开销标准,以确保和友商设备保持兼容。

缺省情况下,路径开销标准为IEEE 802.1t

stp pathcost-standard { dot1d-1998 | dot1t | legacy }命令用来配置指定交换机上路径开销值的标准

验证配置

  1. display stp

display stp命令用来检查当前交换机的STP配置。

命令输出中信息介绍如下

CIST Bridge参数标识指定交换机当前桥ID,包含交换机的优先级和MAC地址。

Bridge Times参数标识Hello定时器、Forward Delay定时器、Max Age定时器的值。

CIST Root/ERPC参数标识根桥ID以及此交换机到根桥的根路径开销。

总结

根桥产生故障后,其他交换机会被选举为根桥。那么原来的根桥恢复正常之后,网络又会发生什么变化呢?

如果生成树网络里面根桥发生了故障,则其它交换机中优先级最高的交换机会被选举为新的根桥。

如果原来根桥再次激活,则网络又会根据BID来重新选举新的根桥。

路径开销和根路径开销的区别是什么?

根路径开销是到根桥的路径的总开销,而路径开销指的是交换机端口的开销。

STP协议树配置的更多相关文章

  1. CCNA网络工程师学习进程(6)vlan相关协议的配置与路由器简单配置介绍

        前面已经介绍了大部分与vlan技术相关的交换机的协议的配置,更深层次的还有STP协议和以太网端口聚合技术,接着还会简单介绍一下路由器的基本应用.     (1)STP(Spanning-tre ...

  2. [转载]交换机STP协议

    注:之前做一个项目,测试部使用2个公司的交换机,H3C和H公司的,H公司的交换机是OEM H3C的交换机,正常来说两者使用没有区别. 但是使用中发现,如果设备的多个对外业务网口连接的交换机的聚合网口, ...

  3. STP协议与MSTP协议

    STP协议与MSTP协议 目录 一.STP概述 1.1.交换网络环路的产生 1.2.STP简介 二.生成树算法 2.1.生成树算法的步骤 2.2.网桥 ID 2.3.选择根端口 2.4.选择指定端口 ...

  4. 二层协议--STP协议总结

    生成树协议的技术实现与配置注意点 一.stp协议的用途 二.stp协议的运行机制 三.stp协议规范

  5. LLDP协议、STP协议 笔记

    参考: 数据链路层学习之LLDP 生成树协议 LLDP协议.STP协议 笔记 LLDP 提出背景: 随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加 ...

  6. 分布式-信息方式-ActiveMQ支持的传输协议和配置

                             ActiveMQ支持的传输协议和配置■ Connector: ActiveMQ提供的,用来实现连接通讯的功能.包括: client-to-broker ...

  7. OSI模型第二层数据链路层-STP协议

    1.stp协议的由来. 在二层网络中,交换机起到了很重要的作用,如果有一台交换机出现故障会影响网络的使用,为了避免存在单点故障,在实际的二层链路中会采用链路冗余,也就是采用交换设备之间多条联络连接,即 ...

  8. 大型网站的 HTTPS 实践(三)——基于协议和配置的优化

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt389 1 前言 上文讲到 HTTPS 对用户访问速度的影响. 本文就为大家介 ...

  9. STP协议

    STP协议的作用: 第一, 可以避免网络环路和广播风暴. 二层数据包是没有TTL(time to live)的,如果不加以限制,可能会无限的传播下去.二层设备间如果存在环路,大量的广播包就可能导致广播 ...

随机推荐

  1. 去除zabbix calculate 模式下,有时候分母为零的情况(Cannot evaluate expression: division by zero. )

    zabbix的监控类型支持一种calculate的方式,可以对几个item结果进行简单的计算,但有时会出现分母为零的情况,这时候监控项就会报错 Cannot evaluate expression: ...

  2. Django 创建第一个Project — Django学习(二)

    检查django If Django is installed, you should see the version of your installation. If it isn’t, you’l ...

  3. 在JS数组指定位置插入元素

    很多与数组有关的任务听起来很简单,但实际情况并不总是如此,而开发人员在很多时候也用不到他.最近我碰到了这样一个需求: 将一个元素插入到现有数组的特定索引处.听起来很容易和常见,但需要一点时间来研究它. ...

  4. 再战CS231-数组的访问

    1.切片访问和整形访问的区别 你可以同时使用整型和切片语法来访问数组.但是,这样做会产生一个比原数组低阶的新数组 import numpy as np # Create the following r ...

  5. python装饰器三种装饰模式的简单理解

    学设计模式中有个装饰模式,用java实现起来不是很难,但是远远没有python简单,难怪越来越火了! 这里就简单讨论下python的几种装饰模式: 一 无参装饰器: # 装饰器 import time ...

  6. 【黑客免杀攻防】读书笔记14 - 面向对象逆向-虚函数、MFC逆向

    虚函数存在是为了克服类型域解决方案的缺陷,以使程序员可以在基类里声明一些能够在各个派生类里重新定义的函数. 1 识别简单的虚函数 代码示例: #include "stdafx.h" ...

  7. mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by

    在mysql 工具 搜索或者插入数据时报下面错误: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause ...

  8. TF-tf.nn.dropout介绍

    官方的接口是这样的 tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None) 根据给出的keep_prob参数,将输入te ...

  9. 奇妙的CSS之伪类与伪元素

    我们都知道,在CSS中有很多选择器,例如id(#), class(.),属性[attr],这些虽然可以满足一些需要,但有时候还力有未逮.伪类和伪元素就提供了一个有益的补充,可以使我们更高效编码.伪类和 ...

  10. sqlserver导出为EXcel--CSV格式

    DataTable dt = Connect.BindTable(" SELECT  名称,地址,当前日期  FROM  table   GROUP BY 名称,地址,当前日期 order ...