目的

防止二层环路及防止环路造成的广播风暴以及引起的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. drf-restful规范、django原生编写接口

    1.restful规范 REST全称是Representational State Transfer,中文意思是表述:表征性状态转移,它首次出现在2000年Roy Fielding的博士论文中.RES ...

  2. MySQL-字段约束条件

    1.无符号.零填充 1.unsigned:用在生成表的过程中,表示不取负数,只取正数和0,负数会直接报错,eg:id int unsigned. 2.zerofill:用在生成表的过程中,跟在整形2后 ...

  3. ES6的Set详解

    数组去重 let arr = [ 1,2,3,4,5,3,2 ] // 数组去重 // 方法一 let newArr = [new Set(arr)] console.log(newArr); // ...

  4. 微信小程序wx.navigateTo跳转参数大小超出限制问题

    微信小程序的跳转方式 wx.navigateTo(Object):保留当前页面,跳转到应用内的某个页面,使用 wx.navigateBack 可以返回到原页(新页面入栈) wx.redirectTo( ...

  5. 微信小程序使用vant组件样式不生效的问题

    下面提供几个解决方案 方案一: 官方文档有说明,将 app.json 中的 "style": "v2" 去除,小程序的新版基础组件强行加上了许多样式,难以覆盖, ...

  6. 【译】.NET 7 中的性能改进(二)

    原文 | Stephen Toub 翻译 | 郑子铭 堆栈替换 (On-Stack Replacement) 堆栈替换 (OSR) 是 .NET 7 中最酷的 JIT 功能之一.但要真正了解 OSR, ...

  7. 来了!来了!国内使用chatGPT的方式总结

    大家好,最近ChatGPT大火呀. 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜. 这个聊天机器人最大的特点是不仅可以模仿人类说话风格同时回答大量问题,能和你 ...

  8. 如何在VC++ 6.0中实现拖动指令改变执行路径?

    前文提要: 在VC6.0之后出现的VS系列开发工具都具有的调试功能:移动指针更改执行流,VC6不支持这个UI操作. 调试程序暂停时,源代码或"反汇编"窗口边距处的黄色箭头标记要运行 ...

  9. Spring Boot学习笔记(一)----概要与入门

    本文来自博客园,作者:{张果},转载请注明原文链接:{SpringBoot学习笔记(一)--SpringBoot概要与快速入门} 一.Spring Boot概要 没有Spring Boot开发项目时各 ...

  10. 与时俱进的治疗策略不断提高RA无药缓解机会[EULAR2015_SAT0058]

    随时代变迁而进化的治疗策略不断提高RA无药缓解机会 SAT0058 DMARD-FREE SUSTAINED REMISSION IN RHEUMATOID ARTHRITIS: AN OUTCOME ...