BPDU报文(传统STP)
BPDU字段包含的信息:
Protocol ID 协议ID
Version STP版本(三种)
STP(802.1D)传统生成树 值为0 RSTP(.1W)快速生成树 值为2 MSTP(.1S)多生成树 值为3
Message Type 消息类型(常见的两种)
配置BPDU:负责建立,维护STP拓扑 TCN BPDU:传达拓扑变更
Root ID 根桥ID
Cost of Path 路径开销
Bridge ID 桥ID
Port ID 端口ID
Message Age 当前消息年龄(STP每经过一台交换机,该字段+1,同步不同位置的设备根桥超时)
Max Age 最大消息年龄(超过则代表根桥故障)
Hello Time 问候时间(根桥通过不断发送STP维持自己的地位,Hello time 是发送的间隔时间)
Forward Delay 端口从listening -> learning 或 learning -> forwarding 的转态需要时间
STP 选举流程:
.选举根桥 .非根交换机选举根端口 .每个线路选举指定端口 .阻塞非根,非指定端口
选举根桥,根端口,指定端口,阻塞端口都以下面的规则来选,都是越小越好
这些信息在BPDU中都有。
比较规则:
.bridge ID: 优先级(默认32768) + MAC地址 2.Cost路径开销: 根据接口带宽比例计算 3.port ID: 优先级 (默认128)+ 端口号
根桥选举:
1.选根桥:每个交换机假设自己为根,互相发送BPUD报文,然后通过比较规则竞选根桥
2.选根端口:每个交换机根据接收由根桥发送的BPDU中的开销来选举根端口(最优路径),交换机接收累加开销,转发不累加
3.选指定端口:每条链路根据比较规则来选出指定端口,每条链路必须有指定端口。
4.选阻塞端口:除了根端口,指定端口,剩下的为阻塞端口
下面是华为设备STP 的配置BPDU
从这里可以分析出,该端口的端口号是2,据开销20000可知千兆口,所以为G0/0/2
很明显该端口所属的交换机不是根桥,并且是根桥的邻居。BPDU类型是配置BPDU。
下面看下当某条链路断开时,发生了拓扑变化的BPDU报文
比如有一台交换机,一个端口为根端口,另一个为阻塞端口。如果根端口被关闭了
那么阻塞端口会发送一个拓扑变更BPDU的报文给相邻的交换机,这个BPDU类型为:TCN
而相邻的交换机会向这个阻塞端口发送一个确认拓扑变更的BPDU,这样阻塞端口就知道自己的消息被收到并将会传达。
这个BPDU类型为 TCA,同时相邻的交换机就会把继续把 TCN 向根端口方向转发,之后也会收到上层交换机发来的TCA确认接收报文
如果根桥收到了这个由阻塞端口传来的TCN,便会下发拓扑变更BPDU其类型为TC,每台收到此TC报文的交换机都会将自己的MAC缓存表刷新或减低过期时间。
然后再向下传达这个TC报文。
看下下面的拓扑图
在交换机 LSW5中 GE0/0/1原本为阻塞状态,GE0/0/0为根端口
但是有一天GE0/0/2端口down掉了
如果没有上述的拓扑变更BPDU的话,那么会发生如下情况
client6 发送 数据 给 client4
缓存表里client6的mac地址对应的却是GE0/0/2的接口(已经down掉了)
这样导致client6无法与外界通信,除非要等mac缓存表的过期时间300s也就是5min
这个时间实在太长了,解决的办法就是发送拓扑变更给根桥,根桥同意变更后向下发送
TC BPDU,所有收到此报文的交换机都把MAC缓存表刷新或减少过期时间来避免收敛速度慢
与根桥的直连链路发生故障
LSW8交换机上的G0/0/1为根端口,G0/0/2为指定端口,
G0/0/1发生故障后,G0/0/2会的端口角色会编程根端口
当是状态要从 listening->learning->forwarding需要30秒的时间
与根桥的非直连链路发生故障
在LSW8中GE 0/0/1为根端口,因为HUB集线器与根设备的线down掉了
所以LSW8 会在Max Age 的时间内不能收到根桥发送的BPDU,于是他会以
自身为根桥向周围发送 BPDU,当LSW9收到两边的BPDU则会对比,发现LSW7
才适合做根桥,于是又会通知LSW8,这样GE0/0/3就会转变成根端口。
所用的时间为50s(MAX Age +Forward Delay)
BPDU报文(传统STP)的更多相关文章
- BPDU报文(RSTP)
与STP 的BPDU报文格式相同,就是在flags字段报文中间几位得到应用 主要原理:利用flages位中的Proposal与Agreement来进行协商,从而快速从 discarding 转成 fo ...
- 什么是STP
简介 了解STP 配置STP 相关信息 简介 STP(Spanning Tree Protocol)是运行在交换机上的二层破环协议,环路会导致广播风暴.MAC地址表震荡等后果,STP的主要目的就是确保 ...
- STP详解-STP、RSTP、MSTP
STP详解 01 冗余链路中存在的问题 如图所示LSW1和LSW2之间有两条线路相连,它们之间任何一条链路出现故障另外一条线路可以马上顶替出现故障的那条链路,这样可以很好的解决单链路故障引起的网络中断 ...
- 网络初级篇之STP(BPDU详解与STP故障恢复)
一.BPDU包含的参数 通过STP的原理,我们学习了红色部分的字段(根桥ID.根路径开销.桥ID.端口ID).现在讲解一下黄色部分的字段(类型.计时器.老化时间.访问时间) 1.(BPDU Type) ...
- Nexus-vPC和STP BPDU
1.为了交互vPC拓扑,STP机制被修改适应到vPC peer环境.2.对于vPC ports,只有主角色运行STP,换句话说,vPC下的STP由主角色设备控制.3.只有主角色设备在DP(指定端口)上 ...
- BPDU、Hybrid、MSTP
BPDU.Hybrid.MSTP 一.BPDU 1)BPDU概述 2)BPDU类型 3)BPDU报文字段 二.Hybrid ...
- STP生成树协议在二层环境中的应用
一 STP简介 1.单词: rstp快速生成树协议 filter过滤 protection保护 2.作用: 通过阻塞特定接口来防止二层交换环路,从而做到既可以提高网络可靠性的同时又能避免环路带来的问题 ...
- OSI模型第二层数据链路层-STP协议
1.stp协议的由来. 在二层网络中,交换机起到了很重要的作用,如果有一台交换机出现故障会影响网络的使用,为了避免存在单点故障,在实际的二层链路中会采用链路冗余,也就是采用交换设备之间多条联络连接,即 ...
- STP生成树协议
STP主要作用 1.消除环路:通过阻断冗余链路来消除网络中可能存在的链路 2.链路备份:当活动那个路径发生故障时,激活备份链路,及时恢复网络连通性. 根桥选举 每个交换机启动STP后,都认为自己是根桥 ...
随机推荐
- numpy数据去重
import numpy as npx = np.array([1,2,3,2,4,2,5,7,7])print(np.unique(x)) 简单散点图的绘制,没有显示出文字是因为需要下载个插件
- vue项目关闭eslint检查
前言 vue项目在用旧版本的vue-cli创建的时候,会询问是否添加eslint的检查, 后来的版本在创建的时候是直接添加了eslint检查. 有时候我们开发习惯不是那么严格的时候, 会不在意这些缩进 ...
- TortoiseGit安装使用简单教程
一.简介 TortoiseGit是Tortoise基于git的可视化管理工具.本文即将介绍这个工具的安装和简单使用教程(本文均是基于Windows 64位操作系统). git的管理工具有很多.Tort ...
- sort实现ip排序
说明: 工具:sort linux自带 ”-t” : 表示以那个字符做分割 “-k” :和-t结合使用,表示取那一段为关键字进行排序,后面跟数据,1…n,表示取第几段,也可 ...
- day14.生成器进阶,推导式
生成器中取值的三种方法 方法1:next() 方法2:for 循环 方法3:数据类型的强制转换 def func(): for i in range(20): yield '赛车*{}'.format ...
- jquery动态添加的元素不能直接应用事件方法的时候
对于由 jQuery 动态生成的元素,如用 jQuery 给元素添加 class,或者直接添加一对 p 标签,不能直接绑定常用的事件,如 click.因为这些元素属于动态生成,除非采用 onclick ...
- Redis常见面试题
介绍:Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API的非关系型数据库. 传统数据 ...
- Angularjs 跨域请求
不知道什么意思修改了service 参考http://blog.csdn.net/hj7jay/article/details/51767805 http://blog.csdn.net/tangsl ...
- SpringCloud教程 | 第三篇: 服务消费者(Feign)
上一篇文章,讲述了如何通过RestTemplate+Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务.一.Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http ...
- Python学习笔记整理(python 3)
一.tuple(元组) tuple和list非常类似,但是tuple一旦初始化就不能修改,如: classmates = ('Michael', 'Bob', 'Tracy') 1 classmate ...