一、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. rsync+inotify实时数据同步

    没有实际的用过,先mark一下,后面实践. https://www.osyunwei.com/archives/7447.html 一.为什么要用Rsync+sersync架构? 1.sersync是 ...

  2. R语言与概率统计(二) 假设检验

    > ####################5.2 > X<-c(159, 280, 101, 212, 224, 379, 179, 264, + 222, 362, 168, 2 ...

  3. java和delphi共用的des加密解密

    java: import antlr.StringUtils;import org.jeecgframework.core.util.StringUtil; import java.security. ...

  4. windows端口映射

    1. 查看netsh interface portproxy show all 2. 添加端口映射转发netsh interface portproxy add v4tov4 listenaddres ...

  5. 安装neutron

    在控制节点上执行 controllerHost='controller' MYSQL_PASSWD='m4r!adbOP' RABBIT_PASSWD='0penstackRMQ' NOVA_PASS ...

  6. D3学习之坐标系绘制

    坐标轴的绘制我们需要搞清楚以下三个要点: 1).axis函数 2)..call()函数用于组合 3).坐标轴的平移旋转 关于第三点其实就是"transform","tra ...

  7. 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题

    ps:这是英伟达二面面的一道相关CUDA的题目.<NVIDIA CUDA编程指南>第57页开始          在合并访问这里,不要跟shared memory的bank conflic ...

  8. C++ min函数

    min 是c++标准库头文件中的一个重要的函数.它的功能是一个最小值的函数,比较两个数值的大小,返回他们的之间最小值. #include <algorithm> int a=2; int ...

  9. 深入理解C语言-二级指针三种内存模型

    二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...

  10. HDU 1688 Sightseeing 【输出最短路+次短路条数】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题目大意:给n个点,m条有向边.再给出起点s, 终点t.求出s到t的最短路条数+次短路条数. 思 ...