一、STP
1 基本概念
STP(Spanning Tree Protocol)即IEEE 802.1D,其作用主要有三个,第一是eliminate logical loops消除逻辑环,第二自动选取最有效的网络路径,第三是当某条链路失效时,自动切换到备份链路,实现所谓的failover功能。STP协议有很多种类,可分为STP(802.1D)、RSTP(802.1W)、MSTP(802.1S)、PVST/PVST+ PVRST/PVRST+。STP的基本原理是通过在交换机之间传递一种特殊的协议报文,网桥协议数据单元(Bridge Protocol Data Unit,简称 BPDU),来确定网络的拓扑结构。
1.1 STP基本术语
- 根桥(ROOT):在一个交换网络中,有且只能有一个根桥(根交换机),STP的主要作用就是在一个交换网络中计算出一棵无环的STP树。
- 非根桥:只要不是根桥,就是非根桥(非根交换机)。
- 桥ID(Bridge ID):BID由优先级+MAC地址组成。
- 端口ID(Port ID):PID由优先级+端口号组成。
- 根路径开销(Root Path Cost):RPC 路径成本的计算和链路的带宽相关联;根路径成本就是到根网桥的路径中所有链路的路径成本的累计和;
- BPDU(Bridge Protocol Data Unit):桥协议数据单元,用于网桥之间传递BPDU来交互协议信息。BPDU分为 配置BPDU 和 TCN BPDU。配置BPDU用来进行生成树的计算和维护生成树拓扑的报文。TCN BPDU是当拓扑结构改变时候,用来通知相关桥设备网络拓扑结构发生变化的报文。
1.2 端口角色
- 根端口(Root Port):每一个非根交换机都需要选举一个RP(基于设备选举),用于接收根桥发出的BPDU。
- 指定端口(Designated Port):每条链路都会选举一个DP,在一条链路中,离ROOT根桥交换机最近的就是DP(基于链路选举)。
- 候补端口(Alernate Port):为根端口(RP)的备份端口,最终宿命为阻塞。
1.3 STP端口状态
- Disable :不接收也不转发帧,不学习MAC地址,不参与生成树计算(端口没连线,或者端口shutdown)
- Blocking:不接收也不转发帧,接收但不发送BPDU ,不学习MAC地址(AP/BP) ,直接丢弃对端发过来的数据帧。
- Listening:不接收也不转发帧,接收并且发送BPDU ,不学习MAC地址(RP/DP) 过渡状态
- Learning:不接收也不转发帧,接收并且发送BPDU ,学习MAC地址(RP/DP) 过渡状态
-
Forwarding:接收并转发帧,接收且发送BPDU,学习MAC地址 最终状态
1.4 STP端口变化过程
1.首先链路up。
2.初始为blocking状态,在迁移到Listening状态时决定谁是RP和DP。
3.Listening状态需要等15秒进入到Learning状态(确定端口角色)。
4.Learning状态再等15秒进到Forwarding(学习MAC表项)。
5.最终达到Forwarding状态,STP完成收敛。
也就是说当使用标准生成树时,现网当中启用新端口,会存在30S的监听+学习时间,这30S时间中,端口是不转发任何数据的。
2 选举规则
2.1 选举简介
1.首先选举根桥ROOT。
2.每个非根交换机选举根端口RP。
3.每条链路选举出一个指定端口DP。
4.剩余端口为AP端口(阻塞)。
2.2 选举步骤
2.2.1 根桥的选举(ROOT)
1.首先选举root(根桥),通过BID进行选举,BID由优先级与桥MAC组成。2字节桥优先级,6字节MAC地址(6*8=48bit) 。
- 比较优先级
- 默认优先级32768相同的情况 下,比较桥MAC的地址,都是越小越优。
2.2.2 根端口选举(RP)
Root根桥选后之后进行 Root Port根端口选举。每个非根交换机都要选择一个根端口,用来接收ROOT根桥的BPDU。
选举规则:
1.RPC根路径开销(跟链路带宽有直接关系)。(越小越优)
2.比较发送者的桥ID(BID,由优先级与桥MAC组成)。(越小越优)
3.比较发送者的端口ID(PID,由优先级与端口号组成)。(越小越优)
4.比较接受者的端口ID(PID,由优先级与端口号组成)。(越小越优)
举例:
1.下图可以看出,SW4需要选举RP端口,但是去往根桥无论是通过SW2还是SW3,路径开销都是一致的,只能比较发送者BID,最终SW2这条链路更优秀,SW4的E0/0选举为RP。
2.SW5需要选举RP,可以看出RPC和BID都是一致的,通过发送者PID进行选举,很明显SW3 E0/3这条链路更优,SW5 E0/1端口被选举为RP端口。
3.SW6需要选举RP,在链路上的这个HUB2可以看做是将一根线劈成两半,RPC和BID是一致的,发送者PID是E1/1,只能通过接收者PID进行选举,SW6 E0/0选举为RP。
2.2.3 选举指定端口DP
在STP中,选完RP端口后下一步选举 指定端口DP。每条链路都会选举一个DP,一条链路中,离ROOT根桥交换机最近的就是DP。
选举规则:
1.RPC根路径开销(跟链路带宽有直接关系)。(越小越优)
2.发送者的桥 ID(BID,由优先级与桥MAC组成)。(越小越优)
3.发送者的端口ID(PID,由优先级与端口号组成)。(越小越优)
2.2.4 选举替代端口AP
最后是选择AP端口,AP端口是RP端口备份。端口被选举为AP后,端口将会被阻塞,从而达到破环的目的,在这个过程中,端口只会监听BPDU,不会中继BPDU,更不会转发业务流量。
选举规则:
如果一个端口在一条链路上收到另外一个网桥的更好的 BPDU,但不是最好的,那么这个端口成为替换端口。
3 BPDU数据包分析
BPDU报文共有两种类型:配置BPDU与TCN BPDU。一般情况下,配置BPDU是根桥发送给各个桥的报文;而TCN BPDU是当网络拓扑中的桥发现网络拓扑发生变化时,向根桥发送的报文。
3.1 配置BPDU
字段 | 描述 |
---|---|
Protocol Identifier(协议ID) | 生成树协议ID,总是为0 |
protocol version Identifier(协议版本号) | 用于描述当前使用的协议版本号:STP(802.1D)传统生成树,值为0;RSTP(802.1W)快速生成树,值为2;MSTP(802.1S)多生成树,值为3; |
BPDU Type(BPDU类型) | 用于描述当前BPDU消息类型:配置BPDU类型0x00,用于建立、维护STP拓扑;TCN BPDU类型0x80,传达拓扑变更消息;RSTP/MSTP类型0x02; |
BPDU Flags(BPDU标志位) | 由8位组成,只使用最高位和最低位,其余6位保留。最低位=TC(Topology Change,拓扑变化)标志,最高位=TCA(Topology Change Acknowledgement,拓扑变化确认)标志 |
Root Identifier(根ID) | 用于描述当前的根桥ID,由2字节的桥优先级+6字节的MAC地址组成。 |
Root Path Cost(根路径开销) | 用于描述发送该BPDU报文的端口累计到根桥的开销 |
Bridge Identifier(桥ID) | 用于描述发送该BPDU的桥ID,由2字节的桥优先级+6字节的MAC地址组成。 |
Port Identifier(端口ID) | 由优先级+端口号组成。指示发送该BPDU报文的端口ID,即“发送端口ID”。 |
Message Age(消息生存时间) | 指示该BPDU报文的生存时间,即端口保存BPDU的最长时间,过期后将删除,要在这个时间内转发才有效,如果配置BPDU是直接来自根桥的,则Message Age为0,如果是其他桥转发的,则配置BPDU报文经过一个桥,Message Age增加1 |
MAX age(最大生存时间) | 指示BPDU消息的最大生存时间,也即老化时间 |
Hello Time(Hello消息定时器) | 指示发送两个相邻BPDU的时间间隔,根桥通过不断发送STP维持自己的地位,Hello time 是发送的间隔时间 |
Forward Delay(转发延时) | 最大延迟时间,默认15s,端口从listening -> learning 或 learning -> forwarding 的转态需要时间。 |
3.2 TCN BPDU
TCN示例:
1.当拓扑发生变化时,交换机首先会发送一个TCN BPDU来通告根桥。
2.根桥会首先回复一个TCA,表明我已经收到了你发送的TCN通告。
3.ROOT根桥向全网泛洪TC=1的配置BPDU,持续35秒(20+15 maxage+forwarddelay)
4.交换机在收到TC=1的这35S内,所有的交换机的老化时间保持为15秒,直到收到tc=0的配置BPDU后,重新将mac老化时间修改为300。
4 STP的一些重要特性
4.1 Portfast
PortFast是为了让接入的非交换机设备快速进入转发(Forwarding)状态。假如一台Server接入到了交换机,与交换机连接的是Server的网卡,这个接入是不会改变交换机的STP拓扑的。但默认情况下,接入Server或Server有重启等操作后,端口都要再次经历Blocking–Listening–Learning–Forwarding这个过程,这对于网卡设备是没有必要的,所以Cisco交换机可以开始PortFast功能,跳过Listening和Learning,直接进入Forwarding状态,这可以使服务器网络快速上线。 开启了PortFast的端口,如果检测到接入的是一台Switch,就会按正常的顺序走Listening–Learning–Forwarding的过程,如果检测到是非交换机,就会让端口快速进入Forwarding状态。
4.2 Uplinkfast
如下图,当S3的RP端口失效时,E0/1接口将从AP-RP,状态需要经历listening-learning,最少30秒才能进入到转发状态,当开启uplinkfast后,立即切换成Forwarding状态,跳过延时。
4.3 BackboneFast
-
如下图,如果SW2 E0/0这条链路失效,SW2会认为自己为ROOT,他会向SW3发送BPDU。SW3收到这个次优BPDU后,会选择忽略,等待max age(20S)后,SW3 E0/1 从AP-DP(15S+15S)端口,给SW2发送一个更优的BPDU,SW2知道自己不是ROOT后,停止发送BPDU,SW3 E0/1变为DP,共耗时max age+listening+learning (20S+15S+15S=50S)。
-
当开启backbonefast后,SW2给SW3发送次优BPDU,SW3会从自己的RP端口发送RLQ(ROOT link query),如果收到SW1发来的响应,确认根桥还在,会把SW3的E0/1接口直接从blocking-listening状态。启用backbonefast会减少20S的max age时间,不需要去硬等老化时间,会主动去找ROOT进行确认。
-
如果配合Uplinkfast,端口状态可以秒级切换。
4.4 BPDUGuard
- 该接口在收到BPDU报文后,会立即切换到err-disable状态
- 常搭配portfast特性一起使用,用于连接主机
由于配置了portfast特性,接口可以可以快速进入到fwd状态。但是由于人员误操作接交换机而可能产生了环路风险。带网管的交换机会发送bpdu,当交换机收到bpdu后,马上意识到连接的不是PC,而是交换机.可能出现环路风险,直接将端口shutdown,进入err-disable,这种down与administratively管理down并不相同,这种是err-down,需要手工shutdown,no shutdown才可打开该接口
4.5 Root Guard
Root Guard可以使STP免受Bridge Priority小的新接入的Switch抢了现有根桥的位置,也就是防止更优的BPDU抢占ROOT。开启后,当有一个新接入的交换机的Bridge Priority比现有根桥小时,这个端口会被置于Root Inconsistent状态,它会被Block掉而不会转发和接收任何数据。
5 标准STP的缺陷
5.1 收敛时间长
在默认情况下,STP的收敛时间为30S(Listening+learning各15S),在某些场景下,收敛时间更是长达50S(例如根桥故障,不向外发送BPDU,交换机需要先等待20S的老化时间,再加上30S的Listening+learning),在这个时间段内,会导致网络长时间的中断。
5.2 拓扑变化时收敛机制不灵活
想象一种场景,当企业上下班时间,每个员工将自己的PC进行开关机的操作,现网当中就会出现大量的TCN BPDU,影响设备的性能,而这种PC机器其实不需要参加到生成树计算当中。
二、RSTP
1 基本概念
Rapid Spanning Tree Protocol(RSTP),快速生成树协议,是传统Spanning Tree Protocol的升级版本,由802.1D进化为802.1W。传统STP的收敛时间(Convergence Time)太慢,当有拓扑发生变化,整个网络需要30秒或更多时间才能恢复到稳定状态,这是许多业务场景上无法接受的,RSTP的出现就是为了缩短收敛时间(Convergence Time),以适应更严苛的使用环境的需求。
1.1 基本术语
- 端口角色:根端口RP、指定端口DP、替代端口AP(Alternate port)、备份端口BP(backup port)
- 端口状态:转发(Forwarding)、丢弃(discarding)、学习(learning)
- RSTP BPDU flags标志位与STP有所不同
- 边缘端口(edge port):边缘端口会节省30S的延时,端口UP后会立即进入转发状态,且端口的UP/DOWN不会触发拓扑变更,他不参与生成树的计算,主要是连接PC机器。它本身会有很多保护机制防环,例如边缘端口如果收到BPDU报文会马上变为一个普通端口,加入到生成树的计算中。
1.2 端口角色
相比STP来说,RSTP只有根端口、替代端口、备份端口。
-
根端口:在一个交换网络中,有且只能有一个根桥(根交换机),主要作用就是在一个交换网络中计算出一棵无环的STP树。
-
替代端口:Alternate port(AP)为RP的备份端口。如果一个端口在一条链路上收到另外一个网桥的更好的 BPDU,但不是最好的,那么这个端口成为替换端口。
-
备份端口:backup port(BP)为DP的备份端口。由于学习到自己发送的配置BPDU报文而阻塞的端口。
备注:在一些资料中,也有把edge port边缘端口当做一类端口角色,但我个人认为这只是RSTP的一种特性,因为从交换机的角色role里面,没有一种角色叫做边缘端口角色,个人认为只能称之为RSTP的一种特性或者叫状态。
1.3 端口状态
相比stp来说,RSTP只有转发(Forwarding)、丢弃(discarding)、学习(learning)。
端口状态 | 说明 |
---|---|
Forwarding(转发) | 在这种状态下,端口既转发用户流量又处理BPDU报文。 |
Learning(学习) | 这是一种过渡状态。在Learning下,交换设备会根据收到的用户流量,构建MAC地址表,但不转发用户流量,所以叫做学习状态。Learning状态的端口处理BPDU报文,不转发用户流量。 |
Discarding(丢弃) | Discarding状态的端口只接收BPDU报文。 |
2 RSTP报文
2.1 与STP对比
RSTP相比STP来说,STP有两种类型的报文格式:配置BPDU和TCN BPDU。而RSTP只有RST BPDU一种,与STP的格式基本一致,最大的变化在于BPDU flags字段做出改变,在STP的FLAG标记中只用了TCA和TC,而RSTP中原先空余的6位全部有了新的定义。
以下为STP报文:
以下为RSTP报文:
2.2 BPDU Flags
字段 | 作用 |
---|---|
TCA | 保留但无用,因为在RSTP中并没有TCN BPDU,取值永远为0 |
Agreement | PA机制中的同意位 |
Forwarding | Forwarding标志位,表示端口处Forwarding状态 |
Learning | Learning标志位,表示端口处于Learning状态 |
Port role | 角色位2bit组成 ,有四种组合。00 :未定义;01:AP/BP 替代端口/备份端口;10:RP根端口;11:DP指定端口 |
Proposal | PA机制中的提议位 |
TC | RSTP中的拓扑改变通知 |
3 RSTP核心内容—P/A机制
3.1 传统STP缺乏反馈机制所面临的问题
-
现网当中新增链路Link1,在SWA和ROOT之间。
-
A及ROOT在Link1链路两端的接口都将进入listening状态,A在收到ROOT发来的BPDU后,计算出自己的端口角色,A的link1接口为RP。
-
A将中继ROOT发过来的BPDU,从自己的两个DP端口发送给B和C,C继续发送给D。
-
当D收到从C发来的BPDU后,明显ROOT发来的BPDU比C发过来的优先级更优,所以P1端口角色为AP,进行阻塞。
-
当A的端口角色确定后,他有一个30S的收敛时间(listening+learning),30S后才能进入转发状态,而如果此时B和C需要往外发送数据是不行的,因为此时A正在收敛,而如果从D走的话,P1端口又是阻塞的,此时ABC通讯会出现问题。
-
STP缺陷就在此,缺少反馈机制,必须硬等30S的收敛时间。
3.2 P/A机制
P/A机制正是解决STP中缺少反馈的这个问题而出现的,P/A协商可以让交换机的RP和DP的互联接口快速进入转发状态。
端口角色:
P0=指定端口;
P1=根端口;
P2=替代端口;
P3=指定端口;
P4=边缘端口;
-
首先ROOT 的DP在处于Discarding和Learning状态时,会发送P=1的报文。
-
A在收到一个最优BPDU后,他知道自己p1端口是一个RP,A会启动sync同步,临时阻塞DP端口。
——P2是AP端口,已经阻塞的端口状态保持不变
——P4是边缘端口不参与生成树运算
——P3是唯一可能会发生环路的接口,DP端口,临时阻塞DP -
在完成SYNC同步后,A发送一个 agreement置位的消息。
-
ROOT在收到agreement置位的消息后,状态立即转变为Forwarding。此时A的P3仍然为阻塞状态,继续往下PA扩散,直到网络的末梢,PA到AP端口,无法响应P=1后,不再需要PA为止。
3.3 P/A机制的前提
1.什么场景发送Proposal置位的RST BPDU?
处在Discarding或者Learning的DP口就会发送p=1的rst bpdu
2.什么场景响应Proposal置位的RST BPDU?谁响应谁?
只有RP端口角色才会响应P=1的RST BPDU
3.什么是SYNC同步
SYNC同步的作用就是把DP的Forwarding状态临时性的变为Discarding.先临时性的避免出现环路。AP端口本来堵塞,EP端口不参与生成树计算接是终端也不会出环,只有DP Forwarding端口转发才可能出环。.
3.4 P/A机制报文分析
拓扑:
1.两台交换机加电以后,开始交互BPDU,SW2收到更优的BPDU后,会马上停止发送BPDU。
2.SW1的e0/0端口进入Discarding状态,发送RST BPDU中把Proposal置1.
3.SW2 在收到proposal置位的BPDU时,开始将自己的所有端口进行SYNC同步。
4.在所有端口都进入Discarding状态之后,SW2向SW1发送agreement置位的BPDU。
5.SW1在收到回应以后,端口立马从Discarding转变为Forwarding状态。
三、MSTP
1 基本概念
- Multiple Spanning Tree protocol (MSTP)多重生成树协议,是由802.1w的快速生成树(RSTP)扩展而来。
- RSTP虽然解决了收敛速度的问题,但是也是per vlan的spanning tree,意思是说他是基于每个VLAN一棵树,当VLAN数目非常多的时候,将面临庞大的管理问题,其次是对于交换机的硬件资源也是一个巨大的挑战。
- MSTP使用instance的方式将VLAN进行分组,同一组的instance的vlan共用一棵树,将多个VLAN放在一个instance进行统一管理。
- 在RSTP中没有区域的概念,MSTP将整个网络进行划分到不同的区域(region),region有自己独立的拓扑,region之间互不干涉,每个region类似于一个个国家。每个region被看做是一个虚拟的switch,每个虚拟交换机会进行一个spanning tree的运算,这个就是CIST(Common and Internal Spanning Tree),CIST不会影响每个region内部的生成树。
2 配置MSTP的参数
MSTP有三个参数,当三要素相同时,才认为是同一个域:
-
configuration Name(域名):同一个Region的交换机使用相同的Configuration Name
-
Revision Number(修订版本):可进行自定义,默认为0
-
Instance(实例):实例与VLAN的对应关系
3 MSTP报文
-
协议类型标识符(protocol Version Identifier):0为STP,2为RSTP,3为MSTP
-
前35个字节BPDU 和 RST BPDU相同,从36个字节开始为MSTP专有字段。
-
MST配置标识,表示MST域的标签信息,包含4个字段:Configuration Identifier Format Selector:固定为0。Configuration Name:“域名”,32字节长字符串。Revision Level:2字节非负整数。Configuration Digest:利用HMAC-MD5算法将域中VLAN和实例的映射关系加密成16字节的摘要。只有MST Configuration Identifier中的四个字段完全相同的,并且互联的交换机,才属于同一个域。