HCIP学习--STP

在交换机上的线路冗余会产生的问题

昨天讲到了一个冗余的概念,下面就这个冗余引出来的问题来记录今天的内容

线路的冗余对于路由器来岁意味择可以选择更多的路线,但是对于交换机来说可不是啥好事情

比如下图假设A下面有一台设备要发送一个广播,然后A要洪范,对于A上面的接口来说先洪范到B,再洪范到C,最后洪范回A。对于A下面的接口来说先洪范到C,再洪范到B,最后洪范回A,然后就会顺时针和逆时针不停洪范,这样就出现了环,所以所以在交换机上做线路冗余,会出现一个二层桥接环路。会产以下问题

一个小注意事项·

(注:一台交换机上的一个接口可以映射多个MAC地址,但一台上一个MAC只能对应一

个接口)

例子

B下面好多台机子就是一台交换机上的一个接口可以映射多个MAC地址,但一台上一个MAC只能对应一个接口

广播风暴

顺逆时针不停洪范

MAC地址表在翻滚

再洪范的过程中发出信息的所在接口,随着一次洪范凡而发生变化,比如A下面有一台设备要发送一个广播,然后A要洪范,A上面的接口洪范一圈回来,原来的A下面设备发出的信息的接口就会变成A和C相连的接口

一旦成环会对同一数据帧反复拷贝

就是在数据的不断洪范的过程中不断重新将数据拷贝转发

上述三个问题导致的后果

3个问题将不断占用硬件资源,逐渐导致设备性能极限,设备过热保护;重启或关机

解决办法

STP生成树

在一个二层交换网络中,生成一棵树型结构,逻辑的阻塞部分接口,使得从根到所有的节点仅存在唯一的路径;当最佳路径故障时,自动打开部分阻塞端口,来实现线路备份的作用;

生成树在生成过程中,应该尽量的生成一棵星型结构,且最短路径树

STP生成树

存在算法

802.1D PVST PVST+(CISCO) RSTP(802.1w) MSTP(802.1S)

802.1D

一个交换网络内仅存在一棵生成树实例

交换机间使用BPDU---桥协议数据单元 -- 交换机间沟通互动收发的数据

BPDU

根网桥可以发送,在交换网络初始状态时,所有交换机均定义本地为根网桥,进行BPDU的发送;使得网络中所有交换机均收到其他设备的BPDU,之后基于数据中的参数进行比对,选举出根网桥;再所有非根网桥不再发送BPDU,而是仅接收和转发根网桥的BPDU;周期2s发送,hold time 20s;

TCN

拓扑变更消息(也是BPDU): 本地交换机链路故障后,STP重新收敛,为了快速刷新全网所有交换机的MAC表,将向本地所有STP接口发送TCN(标记位中的TCN位置1),邻居交换机收到TCN后,先标记为ACK位为回复,用于可靠传输消息;之后将TCN逐级转发到根网桥处,由根网桥回复TC消息来逐级回复到所有交换机;使所有交换机临时将MAC表的老化时间修改为15s(默认的,转发延时)

根网桥的选举过程

根网桥 -- 在一棵生成树实例中,有且仅有一台交换机为root(根网桥)

首先比较优先级

优先级小优

网桥优先级(范围0-65535公有) 默认32768(你要你不修改它他就时32768,这个属性提供给人方便人来干涉)

若优先级相同,比较MAC地址数值

mac地址小优

注:透明交换机没有MAC,自然不支持生成树,支持生成树的交换机一定,一定也支持SVI技术;

SVI技术可以让交换机配置IP地址成为源或目标设备,自然出产时携带MAC,STP可以借用该MAC地址

接口角色的选取

根端口的选择

在每台非根网桥上,有且仅有一个接口;本地离根网桥最近的接口(最短、星型),接收来自根网桥的BPDU,转发用户的流量(该接口不阻塞)

cost值(默认华为使用802.1t标准)

不同带宽 存在不同cost有两个版本

802.1d标准: 802.1T标准

10M = 100 1000M= 20000

100M=19 100M=200000

1000M=4

10000M=2

>100000M=1

选择根端口首先比较从根网桥发出后,通过该接口进入时最小的cost值

例子

下图abc三条链路都是100M对于右边的交换机根端口选的是2号接口

入向cost值相同,比较该接口对端设备的BID,小优

例子

下面这张图在下面的接口最红的那两个接口,根的距离一样,那就不比下面的了要比较上面的两台设备的BID,谁小就选谁(万一有一天根设备挂了,要选一个新设备,那BID小的就可能成为新老大,所以选小的)

对端BID也相同,比较该接口对端设备的接口的PID;先比接口优先级(接口优先级 0-255, 默认128,同一方便人去干涉),小优,若优先级一致,比较接口编号(也就是g0/0/0这个编号)小优

看下图cost相同,BID也相同了,现在时比上面接口的PID

连对端PID也相同,比较本地PID,小优

例子

看下图上面时一台交换机中间是一台集线器再来下面的设备就是交换机,这样对端PID就相同了,这次就是比较本地的PID也就是下面交换机的接口

指定端口的选择

在每一段存在STP的物理链路上,有且仅有一个;转发来自根网桥的BPDU,同时可以转发用户流量(不阻塞);默认根网桥上所有接口为指定端口

(根端口对端一定时指定端口,根网桥的所有接口都是指定端口)

选择指定端口首先比较从根网桥发出后,通过该接口进入这段链路时的cost值最小(出向)

下图中b设备的6号接口就是指定端口

接口距离根网桥近的比较本地BID小优(未来谁是根)

如下图3和4端口所在链路选择时比较A和B的BID(原理与更端口选择同理)

本地BID相同,比较本地的PID,

看下图交换机自己连自己

本地PID,相同,直接阻塞该端口

看下图

上面设备是交换机,下面是集线器,那就直接在交换机下面的接口成指定端口,然后下面就全断了

再来一种实际工程的情况

网线破损rg48双绞线里面4个负责发数据4个负责收数据然后其中有一个收发接触到了

数据又收又发那样也出环了也会堵塞,会关注BPDU,当网络拓扑发生变化可以调整。

非指定端口(阻塞端口)

当以上所有角色全部选举完成后,剩余没有任何角色的接口为非指定;

该接口逻辑阻塞,实际可以接收到信息,但不转发

接口状态

down

STP未运行,没有BPDU收发,一旦可以进行BPDU收发进入下一状态

侦听

强制15s;所有交换机进行BPDU收发,选举所有角色(这个阶段角色选举完成);接口角色为非指定端口直接进入阻塞状态;若为指定端口和根端口进入学习状态;

学习

强制15s;关注用户流量中的源MAC地址, 指定端口和根端口学习所有接口连接设备的MAC地址,生成MAC表;之后进入转发状态;

转发

指端端口和根端口进入,可以转发用户报文;

阻塞

逻辑阻塞

注:只有到接口进入到转发状态后,才能为用户转发数据报文,之前的30s不能转发任何数据;

802.1D的收敛时间

初次收敛

初次收敛时间是30s ,由15侦听+15s学习组成

结构变化时收敛时间

存在直连检测

本地存在阻塞端口,若其他端口断开,该阻塞端口马上进入15s是侦听(选举);结果若原来端口未启用,那么将再进入15s学习---总30s

例子

看下图a设备的5号接口时堵塞接口然后1和6接口对应的那条线断掉了,5接口就会进入侦听状态,然后15s后6端口还未启用,再果15s5端口代替6端口身份

没有直连检测

本地不存在阻塞端口,若某个端口断开,将发送次优BPDU(以本地为根)给其他邻居交换机,其他交换机无视该数据,进行20s hold time计时,到时时阻塞接口进入15s侦听,15s学习=总50s

看下图若断线是2和3接口对应的线,b收不到root的信息就会自己成为root(这个叫次优路径),然后回向a发送BPDU,然后a不理,然后经过hold time 20s然后5进入侦听,5侦听完后,将root的信息转给b,然后15秒学习时间,最后完成收敛

802.1D的缺点

1、收敛慢,收敛需要30秒(在以前刚发名的时候由于时代的限制人们不觉得慢)

2、链路利用率低

(基于这个链路利用率低思科发明了PVST)

802.1D配置

sw1\]stp mode stp 修改为802.1d算法,当下华为默认为MSTP; \[sw1\]stp priority 4096 修改网桥优先级 \[sw1-GigabitEthernet0/0/1\]stp cost ? 修改接口cost值 INTEGER\<1-200000000\> Port path cost \[sw1-GigabitEthernet0/0/1\]stp port priority ? 修改接口优先级 INTEGER\<0-240\> Port priority, in steps of 16

PVST

相关推荐
西岸行者12 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意12 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码13 天前
嵌入式学习路线
学习
毛小茛13 天前
计算机系统概论——校验码
学习
babe小鑫13 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms13 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下13 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。13 天前
2026.2.25监控学习
学习
im_AMBER13 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J13 天前
从“Hello World“ 开始 C++
c语言·c++·学习