泛洪:当交换机收到某一个数据帧时,交换机会从该VLAN本交换机除进入接口外所有的接口转发该数据帧的过程。
为了保证交换网络高可用性,在交换机之间使用冗余链路,由于网络中的泛洪机制可能造成二层的桥接环路,会导致:
1、广播风暴;
2、Mac地址表的不稳定;
3、数据帧的重复拷贝;
二层广播风暴:主机A给主机C发送了一个ARP广播帧,1交换机广播给2交换机,2交换机又会广播发送给交换机1,如此循环;重复循环发送同一个数据帧会在不同的接口处刷新同一条Mac地址映射,会导致Mac地址表不稳定;每当1发出的数据帧被循环一次,主机C都需要回复一个数据,数据帧重复拷贝;
- 解决思路:让某个接口暂时不转发数据,打破交换网络中的环路;(针对交换网络的所有环路中,关闭某个接口)
1、生成树协议的类型
- STP(标准生成树协议,又称802.1D);
- RSTP(快速生成树协议,又称802.1W);
- MSTP(多生成树协议,又称802.1S);
思科:802.1D:PVST(per-VLAN spanning tree:基于VLAN的生成树协议);802.1W:PVRST+(基于VLAN的快速生成树协议)。基于VLAN是一个VLAN生成一棵树;
cisco:
如图:
PVSTP,PC0传输数据时,走Switch0–Switch1之间链路;PC1传输数据时,走Switch2–Switch1之间的链路;每一个VLAN建立一棵树;缺点:当一个交换网络中存在的VLAN较多时,就会有过多的树,占用过多资源;
2、802.1D ;标准生成树 BPDU :网桥协议数据单元,分为配置BPDU–config-BPDU和拓扑变更BPDU–TC-BPDU;
-
配置BPDU —— config-BPDU:用于生成树的选举以及重收敛
-
拓扑变更BPDU —— TC-BPDU:通知交换机网络结构发生变化,交换网络出现了拓扑变更
网络初步搭建的时候,交换机之间使用config-BPDU来生成树;构建完成后如果网络结构发生变换,则使用TC-BPDU来重新修改生成树。
BPDU(Bridge Protocol Data Unit)的数据结构:
华为:
思科:
-
Protocol ID:2字节,标识数据帧是一个BPDU的数据帧;
-
Version:1字节,BPDU版本;STP为0,RSTP为2,MSTP为3;
-
Message type: 2字节,信息类型,代表着BPDU 的类型 (0x00 配置 0x80 拓扑TC);
- 0x00:STP的Configuration BPDU
- 0x80:STP的TCN BPDU(Topology Change Notification BPDU)
- 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)
-
Flags :1字节,标记位,在802.1D 中,用于标识BPDU 是拓扑变更BPDU还是拓扑变更确认BPDU;
- 0 bit(左边、高位bit)表示 “ TCN(拓扑变更BPDU) ”;
- 最后一位 7 bit(右边、低位bit)表示 “ TCA(拓扑变更确认BPDU) ”;
-
Root ID :8字节,根标识符,用于标记一颗树的树根。与根网桥的BID 一致。
-
Cost of path : 4字节,路径开销。在华为设备中,称作 RPC (root path cost 根路径开销)。
-
Bridge ID :8字节,网桥标识符, BID , 用于标识本设备在本生成树的唯一性。
-
Port ID :2字节,端口标识符, PID ,用于标识设备上某接口的唯一性。
-
Message age :2字节,在思科中默认为30s,就是对应的MAC地址条目的老化时间,(但实际上该时间为此BPDU 经过的跳数);华为中,代表着该BPDU传递的跳数,最大20跳(默认值为0,每经过一台交换机 值+1)
- Max-hop :默认为20 ,收到BPDU之后 将message age中的时间与max-hop进行比较,若小 于,则正常使用该BPDU ,若大于,则忽略BPDU;
-
Max-age : 2字节,最大时间,可以理解为hello包的超时时间。默认时间为20s ;------ 第一个状态的切换时间;
-
hello time: 2字节,默认为2s ,BPDU 发送的间隔;
-
Forward delay : 2字节,转发延时,端口状态切换等待的时间,默认为15s;
BID:
BID 组成:BID优先级字段(4bit)+ 扩展系统ID(12bit)+ Mac地址(6字节,48bit);
BID用来选举根网桥;MAC地址使用来保证BID的唯一性;
BID 作用: 1、比较BID优先级 ;2、比较MAC地址;
BID 优先级: 4 bit,默认值为32768(1000) ,范围0-65535(实际范围0-61440[1-14,默认为8]),越小越优。BID 优先级单位4096.调整BID优先级时值必须为4096的倍数;
扩展系统ID: 8 bit,在802.1D和802.1W 无意义,在802.1S中有用的;
Mac地址: 为交换机背板地址池中所有MAC地址中最小的,MAC地址越小越优;
PID:
PID:端口标识符;2个字节组成,
PID 组成:PID优先级(4bit构成)+端口标识符(12bit构成);
PID 作用:1、比较PID优先级;2、Port number;
PID 优先级 :默认值为128,范围0255(实际使用范围0240),单位16;
端口标识符(Port number):标识交换机接口唯一性;
RID:根ID;最优质的BID
RPC:
华为:
802.1T 标准,cost范围0-2000000
COST = RPC + PC
COST: 开销值
PC:path cost 路径开销;
RPC:root path cost 根路径开销
不同交换机计算链路对应的RPC值也不相同
思科:
802.1D-1998
10G----- 2
1G ------ 4
100M—19
10M-----100
不同带宽的链路使用不同的cost (该cost值是内部编码的),非线性过程。
修改Cost值的计算方法:
[sw 1]stp pathcost-standard ? dot1d-1998 IEEE 802.1D-1998 dot1t IEEE 802.1T legacy Legacy
修改交换机的Cost值计算方法需要非常谨慎,如果需要修改必须保证交换网络中所有设备的STP设备使用的计算方法一致;
端口状态:
1、disable —关闭状态1、关闭生成树协议;2、接口物理关闭;
2、blocking —阻塞状态;不能发送BPDU,可以接受BPDU,不能发送和接送和数据;
3、listening —监听状态;可以发送、接收BPDU,不能发送和接收数据;(进行生成树选举)
4、learning —学习状态,可以发送BPDU,不能发送和接收数据;(学习Mac地址表) —目的:限制未知单播帧的泛洪;
5、forwarding —转发状态;可以发送并接收BPDU和数据帧;
最终状态:blocking、forwarding
端口角色:
1.根端口 (RP:Root Port),存在于非根网桥之上,一个非根网桥仅有一个根端口,用于接收来自于根的 BPDU;
2.指定端口(DP:Designated Port),在一条链路中有且仅有一个,用于转发BPDU;
3.阻塞端口(NDP:Not Designated Port)被逻辑上关闭的接口;
生成树选举:
1.选举 根网桥 (标识一颗树,在一个生成树中有且仅有一个)
选举规则: 最小的BID(先比较BID优先级,再比较MAC地址)
2.选举端口角色
选举根端口:1.接口最小的开销值(RPC+PC)2.最小的BID(发送方的) 3.最小的PID(发送方的)
选举指定端口:1.本设备根端口到根网桥的开销值最小的交换机上的接口 2.最小的BID(本交换机)3.最小的PID(本设备)
园区网分层结构
出口层(OR):广域网接入;出口策略;带宽控制;
核心层(CO):高度转发;服务器接入;路由选择;
汇聚层(GS):流量汇聚;链路冗余;设备冗余;路由选择;(策略控制)
接入层(AS):用户接入;接入安全;访问控制;
配置:
华为交换机默认的配置模式不是标准的802.1D生成树协议;
选择生成树的类型:
[Huawei]stp mode ? mstp Multiple Spanning Tree Protocol (MSTP) mode rstp Rapid Spanning Tree Protocol (RSTP) mode stp Spanning Tree Protocol (STP) mode [sw1]stp mode stp #使用标准生成树协议; Info: This operation may take a few seconds. Please wait for a moment...done.
查看STP协议中的信息(BPDU):
[sw1]display stp -------[CIST Global Info][Mode MSTP]------- CIST Bridge :32768.4c1f-cc79-32e5 Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 CIST Root/ERPC :32768.4c1f-cc5c-02af / 400000 CIST RegRoot/IRPC :32768.4c1f-cc79-32e5 / 0 CIST RootPortId :128.5 BPDU-Protection :Disabled TC or TCN received :41 TC count per hello :0 STP Converge Mode :Normal Time since last TC :0 days 0h:12m:22s Number of TC :9 Last TC occurred :Ethernet0/0/5
查看已启动接口状态:
[sw1]display stp brief MSTID Port Role STP State Protection 0 Ethernet0/0/1 DESI FORWARDING NONE 0 Ethernet0/0/2 DESI FORWARDING NONE 0 Ethernet0/0/3 DESI FORWARDING NONE 0 Ethernet0/0/4 DESI FORWARDING NONE 0 Ethernet0/0/5 DESI FORWARDING NONE 0 Ethernet0/0/6 DESI FORWARDING NONE [sw2]display stp brief MSTID Port Role STP State Protection 0 Ethernet0/0/1 ROOT FORWARDING NONE 0 Ethernet0/0/2 ALTE DISCARDING NONE 0 Ethernet0/0/3 ALTE DISCARDING NONE 0 Ethernet0/0/4 ALTE DISCARDING NONE 0 Ethernet0/0/5 ALTE DISCARDING NONE 0 Ethernet0/0/6 ALTE DISCARDING NONE #在华为802.1W中将阻塞端口分为两种,一类叫做备份,另一类叫做替代;
修改BID优先级:
[Huawei]stp priority ? INTEGER<0-61440> Bridge priority, in steps of 4096 [sw1]stp priority 28672 #将sw1的BID优先级修改为28672;
同样也可以指定root和备用root(将接口优先级设定为0和4096):
[sw1]stp root ? primary Primary root switch secondary Secondary root switch [sw1]stp root primary [sw1]stp root secondary
修改接口cost值:
[sw1]interface GigabitEthernet 0/0/1 [sw1-GigabitEthernet0/0/1]stp cost ? INTEGER<1-200000000> Port path cost
修改接口PID的优先级:
[sw1-GigabitEthernet0/0/1]stp port priority ? INTEGER<0-240> Port priority, in steps of 16
关闭监听对话:
[sw1]user-interface console 0 [sw1-ui-console0]idle-timeout 0 0
802.1D工作过程简述:
当交换机接口启动STP协议后,有disable状态切换至blocking状态;等待20s之后,由blocking状态切换至listening状态,进行生成树的选举;选举产生根端口、指定端口和阻塞端口;阻塞端口有listening状态切换至blocking状态;根端口和指定端口则等待15s(Forward delay)后,由listening状态切换至learning状态;进行Mac地址的学习,建立Mac地址表;之后等待15秒之后由learning状态切换至forwarding状态;收敛完成。
在交换机初次进入learning状态时,所有交换机都会发送config-BPDU,进行根网桥、根端口、指定端口、阻塞端口的选举;当收敛完成时,只有根网桥会继续发送config-BPDU,对树中非根网桥进行信息的传达;指定端口负责将根端口收到的BPDU进行转发,转发的BPDU会将其中的BID替换为自己的BID,RTC值会修改为转发交换机的RTC值(标准是802.1T);
802.1D 重新收敛:
重新收敛是指网络已经收敛完成,当网络结构发生变换时,由链路状态出现故障的直连交换机;在链路根端口所在交换机一直向根网桥发送TCN-BPDU(网络拓扑变更BPDU),直到收到根网桥回复的TCA(网络拓扑变更确认BPDU)才会停止,之后会由根网桥统一下发配置BPDU进行收敛;
*STP协议工作全过程:
STP通过4个步骤来保证网络中不存在二层环路。
- 在交换网络中选举一个根桥(Root Bridge,RB )
- STP的计算需要一个参考点,而根网桥(root交换机)就是这个参考点,它是STP经计算得到的这棵无环的树的树根。
- 桥ID最小的交换机将成为根桥。
- 对于一个交换网络而言,正常情况下只会存在一个根桥。
- 如下图所示,SW1、SW2及SW3的桥优先级都是32768,因此MAC地址最小的SW1成为网络中的根桥。
- STP的正常工作依赖于该协议所使用的报文的正常交互,这种报文就是BPDU (Bridge Protocol Data Unit,网桥协议数据单元),BPDU中
包含着几个重要的数据(根ID、RPC、网桥ID、桥ID),这些数据是STP进行无环拓扑计算的关键。
-
需要注意的是,根桥的地位是具有可抢占性的。
-
在上图网络拓扑中,在STP完成收敛后,若网络中接入了一台新的交换机,而且这台新增的交换机的优先级为4096,比现有根桥SW1的优先级更高,那么该新增的交换机将成为网络中的新根桥,与此同时,STP将重新收敛、重新计算网络拓扑,在这个过程中有可能引发网络震荡,从而对业务流量的正常转发造成影响,所以根桥角色的稳定性是十分重要的。
-
在每个非根桥上选举一个根接口(Root Port,RP )
- 在一个交换网络中,除了根桥之外的其他交换机都是非根桥,
- STP将为每个非根桥选举一个根接口,所谓根接口,实际上是非根桥上所有接口中收到最优BPDU的接口(通过根端口接受来自根的BPDU),可以简单地将其理解为交换机在STP树上“朝向”根桥的接口。
- 非根桥可能会有一个或多个接口接入同一个交换网络,STP将在这些接口之中选举出一个(而且只会选一个)根接口。
- 在STP收敛完成之后,根桥依然会周期性地向网络中发送BPDU,而非根桥则会周期性地在自己的根接口上收到BPDU(非根桥会存储收到的BPDU,缺省老化时间20s),并沿着STP树向下游转发(根桥、非根桥都会通过指定端口向下游发送经过自己计算的BPDU报文)。
- 如下图所示的网络中,SW2及SW3均为非根桥,以SW3为例,在STP收敛过程中,它在自己的Port1及Port2接口上都会收到BPDU,SW3会将这两个BPDU进行比较,收到最优BPDU的接口Port1将成为根接口(RPC较小)。
- 选举指定接口(Designated Port, DP )
- STP将在每个网段中选举一个指定接口,这个接口是该网段内所有接口中到达根桥的最优接口。并且,指定接口还负责向该网段发送BPDU。
- 对于非根桥而言:
- 首先,所有接口中收到最优BPDU的接口将成为该设备的根接口(根ID->RPC->网桥ID->接口ID),
- 然后,该非根桥使用自己接收的最优BPDU为本设备上的其他接口各计算一个BPDU,
- 最后,使用计算出的BPDU与接口上所维护的BPDU(接口自身也会从网络中收到BPDU,并将BPDU保存起来)进行比较,如果前者更优,那么该接口将成为指定接口,并且其所保存的BPDU也被前者替代,交换机将替代后的BPDU从该指定接口转发给下游交换机;如果后者更优,那么该接口将成为非指定接口(非指定接口指的是既不是根接口,又不是指定接口的接口)。
- 简单来说,对于非根桥而言,根接口的选举过程是非根桥将自己所收到的所有BPDU进行比较,而指定接口的选举过程则是非根桥用自己计算出的BPDU跟别的设备发过来的BPDU进行比较。
- 如下图所示网络中,在SW1与SW2之间的网段中,SW1的Port1被选举为指定接口;在SW1与SW3之间的网段中,SW1的Port2被选举为指定接口。
- 一般而言,根桥的所有接口都是指定接口。
- STP还会在SW2及SW3之间的网段中选举一个指定接口,最终SW2的Port2接口胜出(网桥ID较小),成为该网段的指定接口。
- 阻塞非指定接口,打破二层环路
- 经STP计算后,如果交换机的某个(或者某些)接口既不是根接口又不是指定接口,我们将这种接口称为非指定接口,那么该接口将会被STP阻塞,如此一来网络中的二层环路也就被打破了。
- 如下图所示的网络中,SW3的Port2由于既不是根接口,又不是指定接口,因此被阻塞。
- 被阻塞的接口既不会接收也不会转发业务数据(业务数据有别于BPDU,可以简单理解为用户的应用数据),
- 另外被阻塞的接口也不会发送BPDU,但是会持续侦听BPDU,以便感知网络拓扑的变更情况。



