如图所示LSW1和LSW2之间有两条线路相连,它们之间任何一条链路出现故障另外一条线路可以马上顶替出现故障的那条链路,这样可以很好的解决单链路故障引起的网络中断,但在此之前有下面三个问题需要考虑。
1、PC1发出一个广播帧(可能是一个ARP查询),LSW1收到这个广播帧,LSW1将这个广播帧从除接收端口的其他端口转发出去(即发往G0/0/2、G0/0/3、G0/0/4)。
2、LSW2从自己的G0/0/1和G0/0/2都会收到SW1发过来的相同的广播帧,LSW2再将这个广播帧从除接收端口外的所有其他接口发送出去(LSW2将从G0/0/2接收的广播帧发往其他三个端口G0/0/1、G0/0/3、G0/0/4,从fa0/24接收到的也会发往其他三个端口G0/0/1、G0/0/3、G0/0/4)。
3、这样这个广播帧又从G0/0/1以及G0/0/2传回了LSW1,LSW1再用相同的方法传回LSW2,除非物理线路被破坏,否则PC1-4将不停的接收到广播帧,最终造成网络的拥塞甚至瘫痪。
MAC地址表不稳定
广播风暴除了会产生大量的流量外,还会造成MAC地址表的不稳定,在广播风暴形成过程中:
1、PC1发出的广播帧到达LSW1,LSW1将根据源MAC进行学习,LSW1将PC1的MAC和对应端口G0/0/1写入MAC缓存表中。
2、LSW1将这个广播帧从除接收端口之外的其他端口转发出去,LSW2接收到两个来自LSW1的广播(从G0/0/1和G0/0/2),假设G0/0/2首先收到这个广播帧,LSW2根据源MAC进行学习,将PC1的MAC和接收端口G0/0/2存入自己的MAC缓存表,但是这时候又从G0/0/1收到了这个广播帧,LSW1将PC1的MAC和对应的G0/0/1接口存入自己的MAC缓存表。
3、LSW2分别从自己的这两个接口再将这个广播帧发回给LSW1,这样PC1的MAC地址会不停的在两台交换机的G0/0/1和G0/0/2(G0/0/3、G0/0/4)之间波动,MAC地址缓存表也不断的被刷新,影响交换机的性能。
重复帧拷贝
冗余拓扑除了会带来广播风暴以及MAC地址的不稳定,还会造成重复的帧拷贝:
1、假设PC1发送一个单播帧给PC3,这个单播帧到达LSW1,假设LSW1上还没有PC3的MAC地址,根据交换机的原理,对未知单播帧进行泛洪转发,即发往除接收端口外的所有其他端口(fa0/2、fa0/23、fa0/24)。
2、LSW2分从自己的G0/0/1和G0/0/2接收到这个单播帧,LSW2知道PC3连接在自己的G0/0/4接口上,所以LSW1将这两个单播帧都转发给PC3。
3、PC1只发送了一个单播帧,PC3却收到了两个单播帧,这会给某些网络环境比如流量统计带来不精确计算等问题。
基于冗余链路中存在的这些问题STP被设计出来用来解决这些问题,下面介绍STP的工作原理。
交换机上有默认的stp版本为mstp (多实例生成树)stp (生成树)rstp (快速生成树)
STP通过拥塞冗余路径上的一些端口,确保到达任何目标地址只有一条逻辑路径,STP借用交换BPDU(Bridge Protocol Data Unit,桥接数据单元)来阻止环路,BPDU中包含BID(Bridge ID,桥ID)用来识别是哪台计算机发出的BPDU。在STP运行的情况下,虽然逻辑上没有了环路,但是物理线上还是存在环路的,只是物理线路的一些端口被禁用以阻止环路的发生,如果正在使用的链路出现故障,STP重新计算,部分被禁用的端口重新启用来提供冗余
STP使用STA(Spanning Tree Algorithm,生成树算法)来决定交换机上的哪些端口被堵塞用来阻止环路的发生,STA选择一台交换机作为根交换机,称作根桥(Root Bridge),以该交换机作为参考点计算所有路径。
1)根网桥(根交换机)—在一棵生成树实例中,有且仅有一台交换机为root
选举:
比较每台交换机的网桥id (优先级+MAC地址) 越小越优先
默认优先级:32768
修改优先级的时候要改成4096的倍数
[系统]stp mode stp 修改stp的模式
Stp priority 4096 修改优先级
2)根端口—在每台非根网桥上,有且仅有一个接口;本地离根网桥最近的接口(最短、星型),接收来自根网桥的BPDU,转发用户的流量(该接口不阻塞)
选举:
1 路径开销值:比较从根网桥发出后,通过该接口进入时最小的cost值;
2 对端网桥id:入向cost值相同,比较该接口对端设备的BID,小优
3 对端端口id:对端BID也相同,比较该接口对端设备的接口的PID
4 本端端口id(hub):小优
端口ID 接口优先级(0-240,步长16,默认128)接口编号
3)指定端口—在每一段存在STP的物理链路上,有且仅有一个;转发来自根网桥的BPDU,同时可以转发用户流量(不阻塞);默认根网桥上所有接口为指定端口;
选举:
1 路径开销:比较从根网桥发出后,通过该接口进入这段链路时的cost值最小(出向)
2 本端网桥id
3 本端端口id (端口优先级和端口编号)端口优先级默认是128 接口编号
4 本地端口id,相同,直接阻塞该端口;
4)非指定端口— 剩下的端口就叫做阻塞端口 该接口逻辑阻塞,实际可以接收到信息,但不转发;
BPDU 桥协议数据单元
两种BPDU:
1 配置BPDU
作用:用于角色(端口)选举
维护网络拓扑 2秒1次 最多20秒 20秒没有根的回应,则认为根down掉
只有根网桥可以发送,在交换网络初始状态时,所有交换机均定义本地为根网桥,进行BPDU的发送;使得网络所有交换机均收到其他设备的BPDU,之后基于数据中的参数进行比对,选举出根网桥;再所有非根网桥不再发送BPDU,而是仅接收和转发根网桥的BPDU;周期2s发送,hold time 20s;
2 TCN BPDU—拓扑变化bpdu
作用:当拓扑发生变化时,会发tcn bpdu
本地交换机链路故障后,STP重新收敛,为了快速刷新全网所有交换机的MAC表,将向本地所有STP接口发送TCN(标记位中的TCN位置1),邻居交换机收到TCN后,先标记为ACK位为回复,用于可靠传输消息;之后将TCN逐级转发到根网桥处,由根网桥回复TC消息来逐级回复到所有交换机;使所有交换机临时将MAC表的老换时间修改为15s(默认的,转发延时)
1 BPDU Flags 标识字段
Tca位 拓扑变化确认位
Tc位 拓扑变化位
发生变化时置1
2 root identifier 根网桥id (Root ID)
3 cost of path 到达根的开销值
4 Bridge ID 本交换机的网桥ID
5 Port ID 端口ID
0x8001 前面的80 代表优先级128 , 01代表端口号
6 message age 消息寿命 每经过一台交换机 message age+1
7 max age 最大寿命 20秒
8 hello time 2秒
9 forward delay 转发延迟15秒
BPDU的时间有三种,Hello Time、Max Age、Forward Delay:
1 disable 开启stp时 特点:不进行stp计算
2 blocking 阻塞端口直接进入blocking 状态
3 listening 非阻塞端口才进入侦听状态 特点:加速mac地址表老化
所有交换机进行BPDU收发,选举所有角色;接口角色为非指定端口直接进入阻塞状态;若为指定端口和根端口进入下一状态;
中间有15秒的间隔时间,目的是为了加速mac地址表老化,mac地址表老化时间300秒
4 learning 学习状态
指定端口和根端口学习所有接口连接设备的MAC地址,生成MAC表;之后进入下一状态
中间有相隔15秒的时间,加速mac地址表的学习
5 forwarding 转发状态
注:只有到接口进入到转发状态后,才能为用户转发数据报文,之前的30s不能转发任何 数据;
收敛时间:
初次收敛—30s = 15侦听+15s学习
结构变化:
1 存在直连检测:
本地存在阻塞端口,若其他端口断开,该阻塞端口马上进入15是侦听(选举);结果若为启用,那么将再进入15s学习—总30s
当阻塞端口感觉到拓扑发生变化,发送tcn BPDU
对端会回复一条tca=1拓扑变化确认
当交换机收到根交换机范洪的网络变化tc=1的配置BPDU才能老化原来的路径,学习新的路径
2 没有直连检测:
本地不存在阻塞端口,若某个端口断开,将发送次优BPDU(以本地为根)给其他邻居交换机,其他交换机无视该数据,进行20s hold time计时,到时时阻塞接口进入15s侦听,15s学习=总50s
由于线路故障,Sw2 20s后老化了源路径,认为自己是根,向sw3发送bpdu,sw3收到两条bpdu,因此会检测到链路变化,由于链接s1的路径最优,所以向s1发送tcnBPDU,s1回复一条tc=1的配置bpdu,交换机将原来的路径老化,并学习新的路径
1 收敛慢
learning到forwarding需要15s学习mac地址
Listening到learning需要15s 加速老化时间
无论上述用了多少秒,最大等待时间总是15s
发送tcnBPDU的时间过长
2 链路利用率低
备份端口只在华为中提出
备份端口备份成为指定端口
预备端口将来预备成为根端口
预备端口和备份端口的相同点,正常情况下都不进行数据转发
RSTP中端口状态变成了三种,将stp状态前三种合成一种,因为不学习mac也不转发数据
三种状态:
BPDU stp和rstp的区别:
stp: 配置BPDU TCN BPDU
rstp:RST BPDU(快速生成树bpdu)
标志位
RSTP快速生成树:
收敛速度快:
Sw3当网络发生变化,马上启动一个 TC while 计时器:2倍的hellp时间,直接发送tcBPDU 给s2,四秒内,老化原来的mac地址,形成新的地址,s2收到后重复上述动作直到发给根交换机。
多个rstp的集合就是mstp
Instance 实例:rstp
单个实例树的弊端:
建立两棵树,pc1发数据时,lsw4是根,pc2发数据时,lsw5是根从而解决单个实例树的弊端
配置步骤
默认交换机上有实例0
Mstp和arrp做联动时,mstp的主根一定是arrp的主
当网络中有mstp,stp rstp时,最后会以stp运行,他们的模式依旧是mstp和rstp,但是发的bpdu报文是stp
当mstp的交换机和stp的交换机相连时,发送的是stp的报文,当stp迁移走了,换了一个mstp的交换机时,不会自动回到mstp
【swb】stp mcheck手动迁移回mstp
配置mstp最大跳数
默认最大跳数20跳
Stu max-hops 30 修改最大跳数
四个保护
【系统】Stp bpdu-protection(stp,bpdu保护开启)
指定端口保护(根的保护)
从指定接口收到一个优先级比指定端口还低的端口pbdu,则交换机进入阻塞状态,保护自己永远为根
【指定接口】Stp root-portection 在指定端口下开启根的保护
环路保护
三个交换机之间使用光钎连接,由于光纤是由两条线路构成,一条收一条发,一旦收的根端口down掉,发的线路没有问题,此时阻塞端口启用,会形成环路。
解决方法,长时间收不到bpdu ,就把该端口阻塞掉
TC-BPDU保护 TC
如果恶意用户一直发送tc-bpdu,那么链路中的路径就会一直老化,此时设置一个阈值,超过上限就会丢弃该bpdu
默认接受tc上限为1
修改命令:stp tc-portection threshold 2