目的

防止二层环路及防止环路造成的广播风暴以及引起的MAC表震荡

方法

首先,所有配置了STP的交换机互相向相邻交换器(配置了STP的)发送BPDU(协议数据单元),选举根桥(根交换机),根交换机上所有端口都为指定端口,指定端口的对端都为根端口,其他交换机相连链路,互相发送BPDU对比交换机优先级或背板MAC地址(越小越优先),优先级“好”的成为根端口或指定端口,“不好”的成为指定端口或阻塞端口。

BPDU(协议数据单元)

用于传递STP协议相关报文,分为两种:

1、配置BPDU,用于传递STP的配置信息

2、TCN BPFU,用于通告与拓扑变更信息

要求

在所有交换机中必须要有一台交换机作为根桥

每个非根桥都要有一个根端口

每个物理网段必须要有一个指定端口

其他不能成为根端口和指定端口的端口就是阻塞端口

选举规则

1、选举根桥:通过BPDU中的桥ID,BID标识交换机身份,在通过优先级+Mac地址(优先级默认32769,必须是4096的倍数)

2、选举根端口:在非根桥上,距离根桥最近的端口就是本交换设备的根端口,由于根桥上全是指定端口,所以和根桥相连的端口在“正常环境”都是根端口,但由于链路开销(带宽越大,开销越小)有可能不同,所以相连端口也有可能成为阻塞端口,具体为:

1、选择到达根桥开销小的优先

2、对端交换机PID小的优先(优先级+端口号)

3、端口ID小的优先

3、选举指定端口:由于一台交换机只能有一个根端口,所以其他端口不是指定端口就是阻塞端口,而指定端口的选举具体为:

1、选择到达根桥开销小的优先

2、交换机BID小的优先

3、端口ID小的优先

4、选举阻塞端口:当本交换机存在根端口,物理连接对端已经成为指定端口,

初始化流程

disable:禁用状态,端口被关闭。

blocking:阻塞状态,接收BPDU,但不发送BPDU,不学习MAC地址,不转发数据包。

listening:监听状态,接收并发送BPDU,不学习MAC地址,不转发数据包,当状态想要变化时,处于该状态15秒时转换到学习状态。选举端口角色的时候在这个状态。

learning:学习状态,接受并发送BPDU,学习MAC地址,不转发数据包,当状态想要变化时,处于该状态15秒时转换到转发状态。

forwarding:转发状态,接收并发送BPFU,学习MAC地址,转发数据包。

计时器

hello time:2秒,配置BPDU的发送周期。

Max age:20秒,10个hello time的时间,如果在这些时间内没有收到BPDU报文,则认为链路故障。

Forwarding delay:15秒,状态切换延迟,就是监听状态、学习状态、转发状态之间的切换。

链路故障

多数情况下不是物理层发生故障,物理层故障链路直接会直接down掉,交换机可以直接检测到链路变化,所以不需要等待一个max age。
而是协议层面或由于某种原因使交换机无法收到bpdu。

状态变化

当链路发生故障(到达Max age时)或有新的接口加入时(变为转发状态-个人认为有待研究),判断为拓扑发生了变化,需要向根桥发起TCN BPDU,其他交换机收到TCN BPDU时,继续向根交换机转发TCN BPDU,直到到达根桥为止,当根桥收到TCN BPDU后,向所有的端口发送一个TC置位的配置BPDU,这个BPDU会使收到该BPDU的报文将自己的Mac表清空(实际上是将Mac地址表的老化时间缩短为15秒,原本是300秒),也就是加快故障切换速度。

之所以要改变mac表原因是链路故障不一定是链路down掉,链路down时该条链路自动从mac表中消失,而由于各种原因收不到bpdu,这条链路依旧会存在于mac表中,所以需要重新清空学习。

STP的问题

收敛速度慢,故障切换时间太长,短则30秒(监听-学习-转发),长则50秒(max age-监听-学习-转发)。

网络中大量主机频繁上下线,会导致TCN BPDU大量发送。

断掉链路会浪费资源

RSTP

快速生成树协议

可以将故障恢复时间直接缩短到1秒左右

端口状态减少到3种

Discarding:将Disabled、Blocking、Listening结合为Discarding状态,不学习MAC地址,不转发数据包,肯定是接受但不发送BPDU。

Learning:学习状态,接受并发送BPDU,学习MAC地址,不转发数据包。

Forwarding:转发状态,接收并发送BPFU,学习MAC地址,转发数据包。

端口角色增加到4种(算上边缘端口其实有5种)

1、根端口和指定端口不变

2、闭塞端口非为两种:

1)Alternate,替代端口--根端口的备份,当根端口故障后,马上成为根端口,并进入转发状态。

2)Backup,备份端口--指定端口的备份,当指定端口故障后,会等待一段时间后成为指定端口。

边缘端口机制

当链路激活后,边缘接口直接进入转发状态,不参与STP计算

边缘端口的UP/DOWN不会触发拓扑变更

一般把连接PC的端口配置位边缘端口

同样浪费资源

MSTP

多生成树协议,我喜欢叫多实例生成树协议,方便学嘛

将多个vlan捆绑到一个生成树实例,每个实例分别独立计算生成树

基于STP计算结构不同,实现不同vlan的流量负载均衡

MSTP使用RSTP的三种端口状态,定义与RSTP中相同

端口角色有7种,不再这里介绍,其他机制不再这里介绍。

STP理论基础的更多相关文章

  1. 解决:SharePoint当中的STP网站列表模板没有办法导出到其它语言环境中使用

    首在在你的英文版本上,导出列表或是网站的模板,这个文件可能是这样滴:template.stp 把这个文件 template.stp 命名为 template.cab 解压 这个 *.cab 文件 在解 ...

  2. STP的作用和操作

    STP的作用 STP通过阻塞端口来消除环路,并能够实现链路备份的目的 STP的操作 选举一个根桥 比较交换机的桥ID,越小越优先 桥ID  是8个字节,2个字节的优先级+6个字节的MAC地址 2.每个 ...

  3. CentOS 7.1 Bridge启用STP报错"Master connection not found or invalid"

    今天在公司测试Linux bridge搭建,为了使内部docker容器的网络能够不经过2层封装转发对外公布,顾试用一下bridge功能,结果碰到报错:"Bringing up interfa ...

  4. [转]MOSS通过此命令注册模板,web应用程序可以根据stp模块生成网站集

    注:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin          stsadm –o add ...

  5. 分布式系统开发的一些相关理论基础——CAP、ACID、BASE

    本文主要讲述分布式系统开发的一些相关理论基础. 一.ACID 事务的四个特征: 1.Atomic原子性 事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全 ...

  6. 特征脸(Eigenface)理论基础-PCA(主成分分析法)

    在之前的博客  人脸识别经典算法一:特征脸方法(Eigenface)  里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在做补充.请将这两篇博文结合起来阅读.以下内容大部分参考 ...

  7. AngularJS理论基础

    AngularJS理论基础 AngularJs是一个用于设计动态web应用的结构框架. 它是一个框架,不是类库,是像EXT一样提供一整套方案用于设计web应用.它不仅仅是一个javascript框架, ...

  8. STP详解

    STP详解 Write From YangWj Wednesday, March 5, 2014 一. 生成树协议 STP的主要任务是阻止在第2层网络(网桥或交换机)产生网络环路,它警惕的监视着网络中 ...

  9. STP根交换机,指定端口,根端口,阻塞端口

    STP判断各交换机端口(指定端口:DP;根端口:RP;阻塞端口:AP) 判断步骤: 1.选举根交换机: 判断对象:所有运行STP协议的交换机中选出一个; 判断依据:交换机中选择网桥ID值(交换机优先级 ...

  10. 【转】不同VLAN之间相互通信及VTP、STP、EtherChannel概念

    厘清最后一个概念. 转了网上两个相关帖子: http://www.net130.com/CMS/Pub/Tech/tech_zh/2009_03_12_97386_3.htm http://blog. ...

随机推荐

  1. 对List集合进行分页

    1 简要说明 有时候,我们有一个list集合,需要对它进行分页处理 下面的根据类MyPageUtilVo就可以做到 它自带泛型,适合各种集合 可以设置每页的大小(默认为10) 根据页码(从1开始)就可 ...

  2. maven项目构建报错:Could not find artifact com.xxx.cloud:xxx-cloud:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM

    maven多模块项目打包的时候报错如下: [ERROR] [ERROR] Some problems were encountered while processing the POMs: [FATA ...

  3. Hystrix断路器

    1.介绍 ①产生原因 服务雪崩: 多个微服务之间调用,假设A调用B,C,B和C又调用其他微服务,这就是扇出. 如果扇出的链路上有某个微服务调用响应时间过长或者不可用,那么A调用会占用越来越多的系统资源 ...

  4. Windows QT程序配置删除网卡IP

    1.Windows下可在CMD控制终端使用Dos命令对指定网卡进行IP配置,需要使用管理员权限打开CMD终端 往网卡添加IP主要有以下两种方法: 方法1: netsh interface ip add ...

  5. 0x05_My-OS显示字符串和任意参数

    先看看效果: 要解决两个问题,第一个如何显示字符串,printf?我之前已经说了所有的头文件都要自己写,printf是stdio里的可是我们没有stdio 我们要通过画像素点的方式显示字符串,有点像我 ...

  6. playwright 实现高亮、is_visible 等源码修改

    一. 前言 高亮是什么? 在ui自动化中可以执行js来让某个页面元素高亮,比如背景颜色.字体颜色.边框颜色等发生改变,以此更加方便执行的时候点了哪一步操作.(如果有不清楚怎么实现的可以转到我的介绍se ...

  7. Linux 下安装Nginx两种方法- yum安装 and Centos7下yum安装配置nginx与php

    转载csdn: Linux 下安装Nginx两种方法- yum安装_在电脑前深思的博客-CSDN博客 Linux安装Nginx(两种方式)_HHRunning的博客-CSDN博客_linux 是否安装 ...

  8. 代码随想录算法训练营day01 | leetcode 704/27

    前言   考研结束半个月了,自己也简单休整了一波,估了一下分,应该能进复试,但还是感觉不够托底.不管怎样,要把代码能力和八股捡起来了,正好看到卡哥有这个算法训练营,遂果断参加,为机试和日后求职打下一个 ...

  9. JSTL 报错 TagLibraryValidator

    今天想要在 JSP 页面上用 JSTL 简化操作,发现导入 jstl.standard 包报错了.我是按照菜鸟上的教程来的.我的 Tomcat 版本是 10.0,之后发现 10.0 版本的 Tomca ...

  10. LeetCode-28 实现strStr() KMP算法的学习

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/repeated-string-match 题目描述 给定两个字符串 a 和 b,寻找重复叠加字符 ...