一、BPDU包含的参数

 

  通过STP的原理,我们学习了红色部分的字段(根桥ID、根路径开销、桥ID、端口ID)。现在讲解一下黄色部分的字段(类型、计时器、老化时间、访问时间)

1、(BPDU Type)BPDU类型

  BPDU报文共有两种类型:配置BPDU与TCN BPDU。一般情况下,配置BPDU是根桥发送给各个桥的报文;而TCN BPDU是当网络拓扑中的桥发现网络拓扑发生变化时,向根桥发送的报文。

2、计时器

  BPDU报文在网络中的生存周期(配置BPDU报文每经过一台桥设备,报文老化时间+1)

3、最大老化时间

  BPDU报文在网络中最大的老化时间(当报文老化时间大于最大老化时间时,BPDU报文将被丢弃。桥设备将根桥看做不可用前保留根ID的最大时间。最大老化时间可修改,默认为20秒)

4、访问时间

  根桥经过特定的时间向其他桥设备发送BPDU报文,为STP生成树包活,这一特定的时间就是访问时间(每间隔2秒一次)

5、转发延时

  端口状态改变时所需要的时间(30秒)

二、常碰到的问题

1、根桥故障时

  

  当根桥发生故障时,不会再向其他桥设备发出配置BPDU报文。当非根桥没有收到根桥发出的配置BPDU报文后,会等待一个最大老化时间(默认时间20秒)。当到达最大老化时间后,非根桥会认为根桥网络不可达(根桥故障),使原本阻塞的端口会由阻塞状态(阻塞状态只接收对端发送的配置BPDU报文,不能发送BPDU;不能参与数据的转发)变为监听状态(监听状态是选举根与各个端口类型的状态,此时依旧不能参与数据的转发),此变化过程需要15秒的时间。之后,端口状态由监听状态变为学习状态(此过程需要15s的时间)。处于学习状态的端口可以学习接收到的数据中的MAC地址,此时依旧不能转发数据。再次经过15秒后,端口状态由学习状态变化为转发状态,此时,端口恢复数据的转发。

  从上面可以看出:在STP中,当根桥出现故障时,会自动重新选举新的根桥与各个端口(根端口、指定端口、阻塞端口)。经过(20秒+15秒*2=50秒)的时间才会恢复数据的转发。

2、直连链路发送故障

  

  当上图的链路发生故障时,由于另外一条链路仍然可以收到根桥发出的配置BPDU报文,所有LSW2会立刻知道链路发生问题。原本的阻塞端口会变成监听状态,在变为学习状态,最后变为转发状态,整个过程会用2*15秒=30秒的时间。

  从上面可以看出:在STP中,当直连链路发生故障时,需要经过30秒的时间才会恢复网络数据的转发。

3、非直连链路发生故障

  

  当上图链路发生故障时,LSW2会感知到链路发生故障,会以自己为根桥给LSW3发送配置BPDU报文。当LSW3收到LSW2的配置BPDU报文后,与收到根桥(LSW1)的配置BPDU报文进行对比,对比发现LSW2发送的配置BPDU报文不是最优的,便不理会。当LSW3经过一个最大老化时间(默认20秒)后,LSW3上的阻塞端口由于收不到来自根桥的配置BPDU,便由阻塞状态转换为转发状态,将根桥的配置BPDU报文发送给LSW2。当LSW2收到根桥的配置BPDU报文后,与自己的配置BPDU报文进行对比。发现不是最优配置BPDU报文,然后进行端口收敛。整个过程会持续(20秒+2*15秒=50秒)的时间。

  从上面可以看出:在STP中,当非直连链路发生故障时,需要经过50秒的时间才会恢复数据的转发。

三、TCN TC TCA 与MAC地址表

  MAC地址表的默认老化时间为300秒,当网络拓扑发生变化,桥设备的端口可能发生变化,相应的MAC地址表可能会发生错误(MAC地址表中记录MAC地址与端口对应错误)。

  当网络拓扑发生变化时,出现变化或者发现链路发生故障的桥设备会向外发送TCN BPDU报文,而接受到TCN BPDU的设备会向TCN BPDU报文的发送端发送TCA BPDU报文进行应答,并且会向外继续发送TCN BPDU报文。当根桥接收到TCN BPDU报文后,会向外发送TC BPDU报文,以告知所有的桥设备网络拓扑发生改变接收到TC BPDU报文的桥设备,MAC地址表的老化时间由300秒(默认)自动修改为15秒(华为设备为5秒,没试验,不确定)。

四、BPDU扩展

  

网络初级篇之STP(BPDU详解与STP故障恢复)的更多相关文章

  1. 计算机网路中CDP,LLDP,STP的详解

    CDP,LLDP,STP知识详解 (1) CDP CDP(Cisco Discovery Protoco:Cisco发现协议)是Cisco专有的用来发现邻接点的协议 ,所有的Cisco产品都支持CDP ...

  2. 【初级】linux rm 命令详解及使用方法实战

    rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...

  3. SaltStack 入门到精通第二篇:Salt-master配置文件详解

    SaltStack 入门到精通第二篇:Salt-master配置文件详解     转自(coocla):http://blog.coocla.org/301.html 原本想要重新翻译salt-mas ...

  4. Linux网络状态工具ss命令使用详解【转】

    ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix dom ...

  5. Linux 网络流量实时监控工具之ntopng详解

    大纲一.前言二.ntopng 简介三.ntopng 功能说明 四.ntopng 安装详解五.ntopng 配置详解 六.ntopng 使用详解注,操作系统 CentOS 5.5 X86_64,软件版本 ...

  6. SaltStack 入门到精通第三篇:Salt-Minion配置文件详解

    SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ  发布日期:2014-06-09 17:52:16   ##### 主要配置设置 ##### 配置 默认值 ...

  7. (转)Linux网络状态工具ss命令使用详解

    Linux网络状态工具ss命令使用详解 原文:http://www.landui.com/help/show-5991.html ss 是 socket statistics 的缩写.顾名思义,ss ...

  8. Farseer.net轻量级开源框架 入门篇:添加数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 ...

  9. Farseer.net轻量级开源框架 入门篇:修改数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 ...

随机推荐

  1. MySQL时间相关操作

    本文主要介绍MySQL使用过程中有关时间处理的相关操作: MySQL时间更新(加上或减去一段时间) MySQL毫秒数和日期之间的转换 一.MySQL时间更新(加上或减去一段时间) 1.1 MySQL时 ...

  2. 简单wait(),notify()方法

    1.两个类public class Name{ public static void main(String[] args) throws InterruptedException { User us ...

  3. MongoDB导入文件夹(内含json和bson文件)

    1. 使用mongo命令将数据库删除: mongo命令: use db_name; db.dropDatabase() 2. 导入(指定文件夹)数据: linux命令: mongorestore -d ...

  4. hive配置元数据库mysql文件配置

    hive中conf/hive-site.xml文件配置(没有该文件则新建) <?xml version="1.0"?> <?xml-stylesheet type ...

  5. python多进程单线程+协程实现高并发

    并发:看起来像同时运行就是并发 并行:同一时间同时被执行叫做并行,最大并行数就是CPU核数 协程不是实实在在存在的物理基础和操作系统运行逻辑,只是程序员从代码层面避开了系统对遇到IO的程序会切走CPU ...

  6. 7.编写mapreduce案例

    在写一个mapreduce类之前先添加依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...

  7. 小菜鸟之HTML第二课

    JavaScript 运行在浏览器上的一种基于对象和事件的驱动的脚本语言 基于对象(windows – document location histroy 便于调用对象属性和方法 事件驱动 键盘和鼠标 ...

  8. PAT B1023 组个最小数(20)

    题目描述 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...

  9. 今天测试大商创,遇到了 upstream sent too big header while reading response header from upstream

    今天在测试大商创后台系统时,打开店铺结算,查看店铺对应的订单列表时,该列表自动跳转到502,查看线上和测试环境都能正常打开,唯独我的电脑上打开是502, 查询nginx的error.log日志,记录了 ...

  10. python中全局global和局部nonlocal命名空间

    python中全局global和局部nonlocal命名空间 局部名称空间对全局名称空间的变量可以引用,但是无法改变. count = 1 def func1(): count = 2 print(c ...