jjzjj

STP——STP生成树协议讲解

静下心来敲木鱼 2024-01-04 原文

目录

STP基本概念

STP端口角色的选举

两种端口角色

首先先了解两个概念

STP选举步骤

端口角色如何选举

选举根桥 

选举根端口RP——交换机上能够接收最好的BPDU报文的端口

选举指定端口DP——链路上能够发送给根桥的最好BPDU的端口

选举阻塞端口------除了RP与DP外的端口都为阻塞端口AP

STP端口开销计算的3种标准

STP的五种端口状态

状态转变时间

STP故障切换

根桥故障

直连故障

间接故障

 STP相关信息查看


STP基本概念

STP是生成树协议的缩写,主要用于防止二层网络中的环路问题(三层网络中可以通过IP字段 TTL进行破环)

为什么二层会环路

以太网帧中没有防环字段,帧在转发时没有TTL-1机制

二层环路带来的影响

广播风暴-------------------无休止运行,主机收到广播要交给CPU处理,影响主机性能,可能导致设备宕机

MAC地址漂移-------------MAC地址振荡

单帧多次递交现象--------一般在同一Vlan中出现


STP端口角色的选举

两种端口角色

根端口RP、指定端口DP、阻塞端口AP

  • 标准的STP协议,端口角色只有两种,即RP和DP,没有对Block状态的端口进行角色的定义。
  • 但是在华为的设备上,STP协议将Block状态端口引用RSTP协议的AP端口角色来定义
  • 即AP端口是RSTP协议的端口角色,标准STP种并没有AP端口的定义,只是华为的STP用AP端口来表达端口的状态为Block

首先先了解两个概念

    BID:桥ID(包含交换机的优先级和交换机的MAC地址)

         优先级-----0~65535,缺省32768。并且优先级必须是4096的倍数-----越小越优先

         MAC地址--选择交换机所有端口中最小的MAC地址做比较---------------越小越优先

    PID:端口ID(包含端口的优先级和端口编号)

         优先级-----0~255,缺省128。并且优先级必须是16的倍数--------------越小越优先

         端口编号------------------------------------------------------------------------------越小越优先 

STP选举步骤

  • 选举根桥,同一个二层网络根桥有且只有一个
  • 其它交换机为非根桥,在非根桥上选举根端口(RP),每个非根桥交换机有且只有一个根端口,根桥上不存在根端口
  • 在每条链路上选举一个指定端口,每条链路有且只有一个指定端口(根端口和指定端口不能是同一个端口)
  • 非根端口、非指定端口的端口,就称为阻塞端口

端口角色如何选举

交换机启动后就自动开始进行生成树收敛计算,默认情况下,所有交换机在启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。

选举根桥 

 BID最小的交换机称为根桥(根桥可以被抢夺)

 比较桥优先级,越小越优

 比较MAC地址,越小越优


选举根端口RP——交换机上能够接收最好的BPDU报文的端口

 比较端口收到的BPDU报文中Root ID最小的,为根端口(同一根桥,Root ID是一致的)

 比较路径开销,此开销为端口收到的最小路径开销,越小越优

 比较对端的BID,选优先级高的

 比较对端的PID,选择优先级高的

 比较本端口的PID,选择优先级高的


选举指定端口DP——链路上能够发送给根桥的最好BPDU的端口

对于根桥来说,其所有端口一般都为指定端口

比较路径开销,此开销指的是端口发送出去的根路径开销,越小越优先(Eth端口开销默认为20000)

比较本端的BID,选优先级高的

比较本段的PID,选择优先级高的

    


选举阻塞端口------除了RP与DP外的端口都为阻塞端口AP

STP端口开销计算的3种标准

dot1d-1998   路径开销的计算方法是IEEE 802.1d-1998标准方法(老标准,一般不建议使用)

dot1t             路径开销的计算方法是IEEE802.1t标准方法(新标准,华为默认)

legacy           路径开销的计算方法是华为计算方法(华为私有标准)

 


STP的五种端口状态

Disabled      禁用      不运行STP               

                                   接口Shutdown

Blocking      阻塞      只接受STP,不发送STP,不学习MAC,不转发用户数据-----AP端口状态    

                                    接口启用/根端口和指定端口还没被选为根端口或指定端口

Listening      聆听      接受、转发STP,不学习MAC,不转发用户数据           

                                    端口被选为根端口或指定端口

Learning      学习       接受、转发STP,学习MAC,不转发用户数据   

                                    接口 Forward delay计时器超时

Forwarding  转发      接受、转发STP,学习MAC,转发用户数 

                                    接口 Forward delay计时器超时

状态转变时间

    阻塞  →  聆听     0s~20s时间

    聆听  →  学习     15s时间

    学习  →  转发     15s时间

   所以,STP从开启到转发,最少需要30s,最大需要50s


STP故障切换

根桥故障

1、根桥直接宕机,LSW2和LSW3会直接重新选举根桥

2、当根桥关闭STP之后,停止发送BPDU,无AP端口的交换机发送以自己为根的BPDU报文

有AP端口的交换机等上个根桥的BPDU老化之后再处理此BPDU(20s)

然后根据情况阻塞端口转为指定/根端口需要经历15+15=30s的时间

所以当根桥故障后最大需要50s时间才可以恢复

直连故障

存在AP端口的交换机出现RP直连故障

AP成为新的RP,在经历2倍的转发延时后进入转发状态,故障恢复

不存在AP端口的交换机出现RP的直连故障

该交换机会以自己为根发送BPDU

下游交换机等到上个 根桥的BPDU20s老化之后,处理该BPDU

当下游接口确定是DP端口时,经历2倍的转发延时进入转发状态

总计50s后恢复故障

间接故障

存在AP端口的交换机出现RP的间接故障后

RP的BPDU老化,AP成为新的RP,在经历2倍的转发延时后进入转发状态,50s故障恢复

不存在AP端口的交换机出现RP的间接故障

该交换机会以自己为根发送BPDU

下游交换机等到上个 根桥的BPDU20s老化之后,处理该BPDU

当下游接口确定是DP端口时,经历2倍的转发延时进入转发状态

总计50s后恢复故障


 STP相关信息查看

有关STP——STP生成树协议讲解的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  4. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  5. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  6. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

  7. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  10. python - 帮我找到合适的 ruby​​/python 解析器生成器 - 2

    我使用的第一个解析器生成器是Parse::RecDescent,它的指南/教程很棒,但它最有用的功能是它的调试工具,特别是tracing功能(通过将$RD_TRACE设置为1来激活)。我正在寻找可以帮助您调试其规则的解析器生成器。问题是,它必须用python或ruby​​编写,并且具有详细模式/跟踪模式或非常有用的调试技术。有人知道这样的解析器生成器吗?编辑:当我说调试时,我并不是指调试python或ruby​​。我指的是调试解析器生成器,查看它在每一步都在做什么,查看它正在读取的每个字符,它试图匹配的规则。希望你明白这一点。赏金编辑:要赢得赏金,请展示一个解析器生成器框架,并说明它的

随机推荐