目录
一、前言
二、交换机线路冗余产生的问题:
1、广播风暴
2、MAC地址表漂移
3、多帧复制
三、STP生成树协议(802.1D):
1、STP传输的数据包类型:
1.配置BPDU:
2.TCN BPDU
3.BPDU数据包
2、802.1D --STP选举:
1.根网桥选举:
2.根端口选举:
3、指定端口选举:
4.非指定端口
3、802.1D ---STP接口状态:
4、802.1D的收敛时间:
5、802.1D算法的缺点:
6、802.1D配置命令:
五、PVST
六、PVST+
1、设计了部分的加速
2、兼容802.1q的trunk封装
七、快速生成树 (RSTP、802.1w)
1、快速的原理:
2、RSTP的改进点:
改进点1:更改了端口角色
改进点2:修改了接口状态
改进点3:对配置BPDU的报文进行了修改
改进点4:对配置BPDU的处理逻辑进行修改
改进点5:快速收敛机制
保护机制
3、RSTP配置命令
八、MSTP/MST/802.1S (多生成协议 )
分组实验:
一、前言 三层架构 ---冗余 :线路冗余 设备冗余 网关冗余 电源冗余
线路冗余 -----二层网络桥接环路
因为路由器的路由表是有相对完善的计算所得,且存在防环规则;故路由器物理链路上实施备份时,一般不会出现环路;
但交换转发数据依赖MAC表(CAM表),该表的生成规则非常简单(记录产生),没有防环设计,故只要交换机使用链路备份,就将出现二层环路;
CAM:将MAC地址+接口编号+VLAN ID进行哈希运算后,存储的哈希值,二进制格式保存;
二、交换机线路冗余产生的问题:
三层架构 ---冗余 :线路冗余 设备冗余 网关冗余 电源冗余
线路冗余 -----二层网络桥接环路
因为路由器的路由表是有相对完善的计算所得,且存在防环规则;故路由器物理链路上实施备份时,一般不会出现环路;
但交换转发数据依赖MAC表(CAM表),该表的生成规则非常简单(记录产生),没有防环设计,故只要交换机使用链路备份,就将出现二层环路;
CAM:将MAC地址+接口编号+VLAN ID进行哈希运算后,存储的哈希值,二进制格式保存;
1、广播风暴
广播帧在二层网络中形成顺时针和逆时针的环路,并且无限循环,最终导致设备宕机,网络瘫痪
2、MAC地址表漂移
MAC地址在交换机中的刷新时间为5min,一个接口可以对应多个MAC;但一台交换机上同一MAC地址只能对应一个接口;
MAC地址漂移是指由于相同帧的拷贝在交换机的不同端口上被接收引起的,两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象
两个端口都在发送消息时,会使得交换机MAC地址表频繁动荡,修改MAC地址对应的出接口。多次修改后,交换机会察觉到MAC地址发生漂移
MAC地址表的动荡,数据包无法正常到达目的地的,消耗设备的性能
3、多帧复制
在交换机循环的同一数据帧可能被多次复制传送到目的站点。
三、STP生成树协议(802.1D):
STP生成树协议:在二层交换网络中,通过逻辑阻塞部分接口,实现从根交换机到所有节点唯一的路径,且为最佳路径生成一个没有环路的拓扑,当最佳路径故障时个别阻塞接口打开以形成备份链路
STP的主要作用:
消除环路:通过阻断冗余链路来消除网络中可能存在的环路。
链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。
STP生成树协议是针对线路冗余,线路冗余如果没有消除环路会产生诸如广播风暴等问题
STP标准的生成树协议是由IEEE组织颁布的802.1D标准(最早的生成树协议,公有)
802.1D生成树规定在一个交换网络中只能存在一颗树!!!
生成树在生成过程中,应该尽量的生成一棵星型结构,且最短路径树;
802.1D PVST/PVST+(CISCO) RSTP(CISCO) /802.1W(公有) MSTP=802.1S
1、STP传输的数据包类型:
STP生成树中主要是传输BPDU包(B指的是网桥,PDU指的是数据协议单元),BPDU是交换机间沟通互动收发的数据
STP中一共存在两种BPDU数据包:①配置BPDU,②TCN BPDU
1.配置BPDU:
只有根网桥可以发送,在交换网络初始状态所有交换机均定义自己为根网桥,在交换网络中发送配置BPDU;之后整个STP网络中所有的交换机均收到其他设备的BPDU数据包,然后网络中的交换设备会基于数据包中的参数进行比对,选举根网桥;最后所有非根网桥将不再发送BPDU数据包,而仅仅只是接受和转发根网桥发送的BPDU数据包(发送的周期2s,hold time 20s)
2.TCN BPDU
本地设备在产生链路故障后,网络拓扑发生变化时,根据STP生成树协议,产生链路故障的设备会通过修改BPDU数据包中的内容,然后转发到本地所有STP接口(此时转发的是TCN BPDU数据包),来做到加快收敛以达到重新刷新STP网络中所有交换机的MAC地址表记录。
而邻居交换机在收到TCN BPDU数据包后,会先将数据包中的TCA标记位置1然后转发回复给故障设备(TCN BPDU ACK)用于可靠传输。之后再逐级转发TCN BPDU到根网桥,根网桥再通过发送TC标记位置为1的配置BPDU包给所有交换机(目的:让STP网络中的所有交换机的MAC地址表的老化时间临时从300s修改为15s)
非根交换机无法发送配置BPDU,但是可以转发和接受BDPU信息(故障设备发送的TCN BPDU就是通过修改并转发配置BPDU信息)
3.BPDU数据包
1)配置BPDU数据包
包含整个生成树的相关配置参数:比如根交换机ID,发送BPDU的交换机的ID,端口ID,端口开销,路径开销,hello时钟,maxage时钟,forward delay 时钟等等。并且配置BPDU,只有根交换机可以发送,别的交换机只有接受和转发。
2)TCN BPDU数据包
TCN BPDU数据包中仅包含三个参数:协议ID,协议版本ID,BPDU的类型
3)BPDU参数字段描述
协议版本ID:
在BPDU数据包中,协议ID字段的值为:802.1D值为0,802.1W值为2,802.S值为3
BDPU类型Type:
配置BPDU报文值为0x00 ,TCN BPDU报文为0x80
标志位:
该字段(8bit)用于描述网络拓扑变化的标志,在STP中只使用了最低位(TC/拓扑变更标志)和最高位(TA/拓扑变更确认标志),其他6位暂时保留。
根桥ID:
根桥ID标志位字段为8个字节,记录根交换机的ID
网桥ID(BID):
网桥占位为8个字节,这个字段是为了区分交换网络中的交换机,每个交换机需要设置一个ID进行标识,BID由两部分组成,前两个字节为优先级,后六个字节为交换机的MAC地址
支持STP协议的交换机必须拥有MAC地址,一般的二层交换机,只有一个SVI接口,使用交换机接口中MAC地址最小的作为交换的MAC地址;但是在三层交换机,可能存在多个MAC地址,则将在所有MAC地址中选择数值最小的MAC地址作为BID中的MAC地址。
BID=优先级+MAC地址
优先级:2个字节,理论取值范围为0-65535(2^16),但是真实取值范围为0-61440,BID的初始值的默认值为32768[1000.0000.0000.0000](越小越优)。
优先级一共16位,但是只使用前4位(所以每一位代表4096),所以在优先级修改的时候,只能按照4096的倍数进行修改。后面的12位是扩展系统ID,在802.1D和802.1W中均保留,只有在802.1S(多生成树协议)中启动
MAC地址则是选取交换机各个端口中MAC地址最小的作为BID的MAC地址
根路径开销(RPC):
到达根桥的STP路径开销
接口ID(PID):
字段2字节,由两部分组成,前四位为优先级,后12为该接口的编号
2、802.1D --STP选举:
根网桥 根端口 指定端口 非指定端口
1.根网桥选举:
发送配置BPDU,一个生成树实例中,有且仅有一台交换机为根交换机
选举规则:比较BPDU中的BID = 网桥优先级 0---65535 默认32768 越小越优 ---可以修改
= MAC 地址数值 越小越优 ---唯一
注意:傻瓜交换机(不能配置的)交换机没有MAC地址,只有可以进行配置的交换机可以远程登录的交换机,故具有MAC地址
例如:三台交换机ABC,默认优先级都为32768,则比较MAC地址参数
2.根端口选举:
在每台非根网桥上有且仅有一个接口;该非根网桥上距离根网桥最近的接口,该接口用于接收来自根的BPDU,同时用于转发用户数据
选举规则:
1.比较cost值 ----入方向的cost值最小
场景:
上图E0/0/1 距离根网桥入方向的cost值为19,E0/0/2入方向为38,因此SW2上E0/0/1为根端口
交换机cost与带宽的关系:
cost值 不同带宽存在不同cost802.1d 标准 802.1T标准10M=100 ......100M =19 1000M =200001000M=4 100M=20000010000M=2超过100000M=1
2,若入方向cost值相同时,比较接口对端上级设备的BID(优先级+MAC地址)----小优
场景:
3.若上级BID相同,比较上级设备的PID,小优
PID接口id = 优先级(接口优先级) 0-255 默认128 小优
= 优先级相同,比较接口编号数值(如e0/0/1)
场景:
4.上级设备的PID相同,则比较本地PID
场景:
3、指定端口选举:
在每一条选举的链路上有且仅有一个,转发来自根网桥的BPDU,根端口的对端为指定端口,根网桥上的所有接口均为指定;转发用户数据
1.接口最短转出(出方向)最小cost值
场景:
2.若cost值相同,则比较本地的BID
场景:
3.若BID相同,则比较本地PID
场景:
4.本地PID相同,直接阻塞
场景:
注:还有场景就是交换机连接的100M网线因意外传输数据的1236和接收4578铜丝相融,导致成环
4.非指定端口
以上所有角色选举完成后,剩余各个接口的角色;该接口处于阻塞状态;接口阻塞是逻辑上的,并不是接口被关闭;该接口处于可以接收到数据,但不进行转发的状态;
3、802.1D ---STP接口状态:
Down: 所有接口通电后进入下一状态
侦听 :交换机收发BPDU,选出所有角色;根端口、指定端口15s后进入学习状态;非指定端口进入阻塞
学习:学习终端设备发出数据帧中的源mac地址,生成交换机的MAC表(CAM表);15s后进入转发状态
转发:根端口、指定端口可以开始转发终端的数据帧
阻塞:逻辑阻塞
4、802.1D的收敛时间:
1.初次收敛 30s 15s侦听+15s学习
2.网络拓扑结构发生变化时:
1)存在直连检测:本地仅存的一个阻塞端口可以接收到来自根网桥的BPDU;需要30s收敛
2)非直连检测 --- 20s hold time等待+30s收敛=50s
5、802.1D算法的缺点:
1、收敛速度慢
2、链路利用率低 – 备份链路正常不转发数据
注:在实际工程中,STP只要正常运算就会生成一个无环的网络结构;但角色位置不好,可能导致网络效率低下;至少应该保障根网桥的位置处于 三层架构中的汇聚层; 在交换机连接AP时,应该保障AP所在接口不被其他物理接口阻塞;
6、802.1D配置命令:
[SWA]stp pathcost-standard ? 默认华为使用802.1t标准 dot1d-1998 IEEE 802.1D-1998 dot1t IEEE 802.1T legacy Legacy[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
PVST仅提供了链路利用低的一个思路,但他本身问题解决的并不彻底,因为一个VLAN一个树,那如果整个交换网络VLAN数量过多,则将导致树的数量过多。每棵树都需要存在2s一次的配置BPDU的泛洪,则将导致流量过大。
基于VLAN的生成树协议, 依然沿用了802.1D的运算规则;区别在于一个VLAN中存在一棵树
PVST cisco私有 基于vlan的生成树协议
在每个vlan内,存在一棵树,每棵树的工作原理同802.1d一致;不同vlan的BPDU区别在于网桥优
先级;
优先级=4096倍数+vlan id 人为仅可修改4096倍数备份,且只能修改为4096的整倍
仅支持 trunk干道封装为ISL(cisco私有封装)
缺点:1、收敛慢 ---802.1D
2、树多 ----cisco存在独立芯片处理
3、私有 ---不支持802.1q的trunk 仅支持ISL干道
六、PVST+
在PVST的基础上进行了升级,;
1、设计了部分的加速
端口加速(接入层连接用户的接口)----使连接终端的交换机接口不参与生成树选举,省去30s
上行链路加速-针对直连检测(接入层设备方可配置)---阻塞端口直接成为根端口,进入转发状态,转发---同时配置加速的设备,其网桥优先级和cost值自动加大
骨干加速—针对次优BPDU 所有交换机均可配置 但只能节省20s的hold time ,在收到次优BPDU时,不能节省30s收敛
2、兼容802.1q的trunk封装
缺点:1、收敛慢(加速不彻底)
2、树多(仅cisco存在单独的芯片,友商无法负荷)
生成树根网桥的位置:-----三合一
汇聚层 ----结构中心 数据中心根网桥 -----链路中心网关 -----一个网段中心
七、快速生成树 (RSTP、802.1w) cisco的RSTP --- 基于vlan的快速生成树 - ----一个vlan一棵树 PVST+的升级
公有RSTP(802.1w) --- 整个交换网络一棵树 802.1d的升级
RSTP主要解决的是802.1D收敛速度慢的问题,并没有解决链路利用率低的问题,所以---还是一个交换网络一棵树---可以向下兼容802.1D
1、快速的原理: 取消了计时器,而是在一个状态工作完成后,直接进入下一状态;分段式同步,两台设备间逐级收敛;使用请求和同意标记;依赖标记位的第1和第6位BPDU的保活为6s;hello time 2s;将端口加速(边缘接口)、上行链路加速、骨干加速集成了兼容802.1d和PVST,但802.1d和PVST没有使用标记位中的第1-6位,故不能快速收敛;因此如果网络中有一台设备不支持快速收敛,那么其他开启快速收敛的设备也不能快速;
cisco的RSTP --- 基于vlan的快速生成树 - ----一个vlan一棵树 PVST+的升级
公有RSTP(802.1w) --- 整个交换网络一棵树 802.1d的升级
RSTP主要解决的是802.1D收敛速度慢的问题,并没有解决链路利用率低的问题,所以---还是一个交换网络一棵树---可以向下兼容802.1D
当tcn消息出现时,不需要等待根网桥的BPDU,就可以刷新本地的cam表;
切记:接口默认为半双工时,即便运行RSTP,依然基于慢速的802.1D算法来收敛;
2、RSTP的改进点: 改进点1:更改了端口角色
802.1D :根端口(RP),指定端口(DP),非指定端口(NDP)
802.1W:根端口,指定端口,替代(Alternate)端口,备份端口(Backup)端口,替代端口和备份端口都是需要被阻塞的端口)
替代端口:由于学习到其他交换机发送的配置BPDU报文而变成阻塞端口,他提供了从指定桥到根网桥的另一条路径,所以可以作为根端口的备份端口。而一个根端口失效,则将最优的替代端口将成为根端口,直接进入转发状态。
备份端口:由于学习到自己发送的配置BPDU报文而变成阻塞端口,他提供了从指定端口的备份,如果指定端口失效,则备份端口将直接替代指定端口,进入转发状态。
改进点2:修改了接口状态
---从根据端口---用户
802.1D:
禁用,阻塞,侦听,学习,转发
802.1W:
丢弃(Discarding):状态:不转发用户流量,且不学习MAC地址
学习状态(Learning): 不转发用户流量,但是学习MAC地址
转发状态(Forwarding);既可以转发用户流量,也可以学习MAC地址
改进点3:对配置BPDU的报文进行了修改
RST变更核心:Agreement:确认位 Proposal:请求位
P/A机制 ---快速收敛的重大举措
RSTP通过P/A机制来保证一个指定接口得以从转发状态快速进入转发状态,从而加速了生成树的收敛速度。 在P/A机制中存在一个同步状态,实际上就是将其他全部接口设置为丢弃状态,防止临时环路的产生
改进点4:对配置BPDU的处理逻辑进行修改
1.在拓扑收敛完成之后,配置BPDU不在是只有根网桥主动发送,而是所有非根网桥也会每个2s发送一个BPDU.注意,发送的内容还是根网桥的配置BPDU
2.更短的超时时间。在802.D中,如果在一个MAX AGE时间中,没有收到配置BPDU,则认为上游失效;在802.W中,一个接口在超时时间(3个周期---6s)没有收到BPDU,则认为和邻居协商失败。
改进点5:快速收敛机制
1.根端口和指定端口的快速切换---利用替换端口和备份端口
2.设置边缘接口---指的是交换机连接终端的接口,因为连接终端所以下面不会出现环路,所以这些接口可以手工配置成边缘接口,一旦配置为边缘接口后,他们将第一时间切换为转发状态
int g0/0/0 stp edged-port enable ----将一个接口激活为边缘接口 将设置边缘接口的状态迅速切换为转发状态(一般设置在连接终端的接口上) stp bpdu-filter enable ---启动接口STP-BPDU的过滤器
保护机制
注意:因为边缘接口使用人工配置,为避免人为失误,STP存在保护机制,即当一个边缘接口收到其他交换设备发送BPDU,则将立即切换
在802.1D中,变更信息需要层层上报至根网桥处,由根网桥下发变更通知(TC置1的BPDU),逐级扩散到整个交换网络,交换网络,这样效率低;在802.1W中,变更通知将直接由变更点设备发出,直接泛洪到整个交换网络。
3、RSTP配置命令
1.修改生成树模式为RSTP
[sw1]stp mode rstp
2.修改用于连接PC接口为边缘接口
边缘接口---用于连接PC的接口,一旦被设定为边缘接口;将不再进行BPDU的发送,且不进行STP的收敛,直接为转发状态; 但若该接口收到了对端的BPDU,将失去边缘特性,重新正常收敛;
[sw1]interface GigabitEthernet 0/0/1[sw1-GigabitEthernet0/0/1]stp edged-port enable
3.修改网桥优先级
[sw1]stp priority ? INTEGER<0-61440> Bridge priority, in steps of 4096
4.快速定义根网桥角色 -----常用
[sw1]stp root ? 快速定义根网桥角色 primary Primary root switch secondary Secondary root switch
5.修改接口优先级
[sw1-GigabitEthernet0/0/1]stp port priority ? 修改接口优先级 INTEGER<0-240> Port priority, in steps of 16
6.修改接口cost
[sw1-GigabitEthernet0/0/1]stp cost ? 修改接口cost INTEGER<1-200000000> Port path cost
八、MSTP/MST/802.1S (多生成协议 )
华为设备默认使用MSTP多生成协议
多生成协议为了解决链路利用率低的问题,他引用了新的概念---instance---实例---组。所谓实例,可以理解为一个或多个VLAN的集合
我们为了区分不同的instance,我们引用instance ID,由12位二进制构成,他的取值范围为0-4094 --与vlan-id相关,华为默认存在instance 0 ,并且默认所有vlan都属于instance 0。
BID优先级中的后面12位:扩展系统ID---用于携带Instance ID
MSTP还引入了一个域(region)的概念 ----类似于ospf中区域的概念,当一个交换网络过大时,可以将其分为多个MST域。如果网络规模较小,可以划分为一个。
继承了快速生成树的基础; 将多个vlan放置于一个组内,基于每个组一棵生成树;
不同组间的BPDU中优先级= 4096倍数+组号
[r1]stp mode mstp
默认存在组0,且所有vlan默认处于该组;优先级= 32768+0
分组实验:
将交换机划分到同一个MST域中要保证3个参数必须相同
1.相同的域名
2,相同的修订等级
3,相同的vlan和instance的映射关系
需求:现交换网络存在100个vlan,要求vlan1-50走以sw1为根的生成树路径,vlan 51-100走sw3为根的生成树路径。
实验配置:三台交换机配置一致1.交换机中创建VLANvlan batch 2 to 1002.配置trunk干道port-group group-member e0/0/1 to e 0/0/2port link-type trunk port trunk allow-pass vlan all3.更改生成树模式[sw1]stp mode mstp ---华为默认使用MSTP[sw1]stp enable 4.创建MST域[sw1]stp region-configuration --进入MST域配置视图[sw1-mst-region]region-name a ----设置域名 所有设备应在一个域内[sw1-mst-region]instance 1 vlan 1 to 50 --将VLAN按照需求划分进实例中[sw1-mst-region]instance 2 vlan 51 to 100[sw1-mst-region]active region-configuration --- 激活MST域的配置(必须配置该指令)注意:根据需求设置主备根,此处配置不一致[sw1]stp instance 1 root secondary -----将sw1中的实例1设置为备用根[sw1]stp instance 2 root primary -----将sw1中的实例2设置为主根
切记:若将创建某个组,但该组内的vlan,在本交换机上没有创建,同时没有为该vlan服务的接口;该组将没有任何信息;整个交换网络中所有设备的分组信息必须完全一致;
由于组1和组2都是以sw1为根网桥,不能实现分流,因此我们需要让sw3成为组2的根网桥,并且组1和组2在各自的根网桥上实现备份
定义本地为组1 的主根,组2 的备份根SW1:[sw1]stp instance 1 root primary ---- 优先级修改为0[sw1]stp instance 2 root secondary ---- 优先级修改为4096SW3:[sw3]stp instance 2 root primary [sw3]stp instance 1 root secondary
实验结果:
SW1:
SW3:
SW2:
其余修改优先级、cost的配置命令
[sw1]stp instance 1 priority ? INTEGER<0-61440> Bridge priority, in steps of 4096[sw1]interface GigabitEthernet 0/0/1[sw1-GigabitEthernet0/0/1]stp instance 1 cost ? INTEGER<1-200000000> Port path cost[sw1-GigabitEthernet0/0/1]stp instance 1 port priority ? INTEGER<0-240> Port priority, in steps of 16