介绍STP/RSTP的定义和目的。
定义以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。
与众多协议的发展过程一样,生成树协议也是随着网络的发展而不断更新的,从最初的IEEE 802.1D中定义的STP到IEEE 802.1W中定义的快速生成树协议RSTP(Rapid Spanning Tree Protocol),再到最新的IEEE 802.1S中定义的多生成树协议MSTP(Multiple Spanning Tree Protocol)。
生成树协议中,MSTP兼容RSTP、STP,RSTP兼容STP。三种生成树协议的比较如表10-1所示。
表10-1 三种生成树协议的比较
STP
形成一棵无环路的树,解决广播风暴并实现冗余备份。
- 收敛速度较慢。
无需区分用户或业务流量,所有VLAN共享一棵生成树。
RSTP
- 形成一棵无环路的树,解决广播风暴并实现冗余备份。
- 收敛速度快。
MSTP
- 形成多棵无环路的树,解决广播风暴并实现冗余备份。
- 收敛速度快。
- 多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的路径转发。
需要区分用户或业务流量,并实现负载分担。不同的VLAN通过不同的生成树转发流量,每棵生成树之间相互独立。
目的在以太网交换网中部署生成树协议后,如果网络中出现环路,生成树协议通过拓扑计算,可实现:
- 消除环路:通过阻塞冗余链路消除网络中可能存在的网络通信环路。
- 链路备份:当前活动的路径发生故障时,激活冗余备份链路,恢复网络连通性。
STP出现的背景STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞以消除环路。由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。
图10-1 典型局域网络示意图
STP基本概念一个根桥树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)概念。
对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备收到该配置BPDU后,如果优先级比自己的配置BPDU高,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己STP端口存储的配置BPDU信息,否则会丢弃该配置BPDU。
两种度量生成树的生成计算有两大基本度量依据:ID和路径开销。
ID
ID又分为:BID(Bridge ID)和PID(Port ID)。
路径开销
路径开销(Path Cost)是一个端口变量,是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。
在一个STP网络中,某端口到根桥的路径开销就是所经过的各个桥上的各端口的路径开销累加而成,这个值叫做根路径开销(Root Path Cost)。
三要素选举从环形网络拓扑结构到树形结构,总体来说有三个要素:根桥、根端口和指定端口。以下结合图10-2介绍三要素。
图10-2 STP网络结构
根桥RB(Root Bridge)
根桥就是网桥ID最小的桥,通过交互配置BPDU协议报文选出最小的BID。
根端口RP(Root Port)
所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能STP的端口中,根路径开销最小者,就是根端口。很显然,在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。
指定端口DP(Designated Port)
指定桥与指定端口的描述见表10-2。
表10-2 指定桥与指定端口的含义
对于一台设备而言
与本机直接相连并且负责向本机转发配置消息的设备
指定桥向本机转发配置消息的端口
对于一个局域网而言
负责向本网段转发配置消息的设备
指定桥向本网段转发配置消息的端口
如图10-3所示,AP1、AP2、BP1、BP2、CP1、CP2分别表示设备S1、S2、S3的端口。
图10-3 指定桥与指定端口示意图
一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根非指定端口都处于阻塞(Blocking)状态,它们只接收STP协议报文而不转发用户流量。
四个比较原则STP选举有四个比较原则,构成消息优先级向量:{ 根桥ID,根路径开销,发送设备BID,发送端口PID }。
配置BPDU中携带本端口的主要信息如表10-3所示。
表10-3 四个重要信息字段
根桥ID
每个STP网络中有且仅有一个根。
根路径开销
发送配置BPDU的端口到根桥的距离,决定了到根桥的路径开销。
发送设备BID
发送配置BPDU的设备的BID。
发送端口PID
发出配置BPDU的端口的PID。
STP网络中的其他设备收到配置BPDU消息后,将比较表10-3中所述的字段,四个基本比较原则如下:
- 最小BID:用来选举根桥。运行STP协议的设备之间根据表10-3所示根桥ID字段选择最小的BID。
- 最小根路径开销:用来在非根桥上选择根端口。在根桥上,每个端口到根桥的根路径开销都是0。
- 最小发送者BID:当一台运行STP协议的设备要在两个以上根路径开销相等的端口之中选择根端口时,通过STP协议计算,将选择接收到的配置消息中发送者BID较小的那个端口。如图10-2所示,假设S2的BID小于S3的BID,如果S4的A、B两个端口接收到的BPDU里面的根路径开销相等,那么端口B将成为根端口。
- 最小PID:用于在根路径开销相同的情况下,不阻塞最小PID的端口,而是阻塞PID值较大的端口。如图10-4所示的情况下PID才起作用,S1的端口A的PID小于端口B的PID,由于两个端口上收到的BPDU中,根路径开销、发送交换设备BID都相同,所以消除环路的依据就只有PID。图10-4 应用到PID进行比较的拓扑
五种端口状态运行STP协议的设备上端口状态如表10-4所示。
表10-4 STP端口状态
Forwarding
端口既转发用户流量也处理BPDU报文。
只有根端口或指定端口才能进入Forwarding状态。
Learning
设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。
过渡状态,增加Learning状态防止临时环路。
Listening
确定端口角色,将选举出根桥、根端口和指定端口。
过渡状态。
Blocking
端口仅仅接收并处理BPDU,不转发用户流量。
阻塞端口的最终状态。
Disabled
端口不仅不处理BPDU报文,也不转发用户流量。
端口状态为Down。
端口状态迁移机制如图10-5所示。
图10-5 STP端口状态迁移图
说明:华为技术有限公司数据通信设备缺省情况处于MSTP模式,当从MSTP模式切换到STP模式,运行STP协议的设备上端口支持的端口状态仍然保持和MSTP支持的端口状态一样,支持的状态仅包括Forwarding、Learning和Discarding,如表10-5所示。
表10-5 MSTP端口状态
Forwarding
在这种状态下,端口既转发用户流量又处理BPDU报文。
Learning
这是一种过渡状态。在Learning下,交换设备会根据收到的用户流量,构建MAC地址表,但不转发用户流量,所以叫做学习状态。
Learning状态的端口处理BPDU报文。
Discarding
Discarding状态的端口只接收BPDU报文。
对于STP,影响端口状态和端口收敛有以下3个参数。
Hello Time
运行STP协议的设备发送配置消息BPDU的时间间隔,用于设备检测链路是否存在故障。设备每隔Hello Time时间会向周围的设备发送hello报文,以确认链路是否存在故障。
当网络拓扑稳定之后,该计时器的修改只有在根桥修改后才有效。新的根桥会在发出的BPDU报文中填充适当的字段以向其他非根桥传递该计时器修改的信息。但当拓扑变化之后,TCN BPDU的发送不受这个计时器的管理。
Forward Delay
设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成临时环路。为此,STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。
Forward Delay Timer指一个端口处于Listening和Learning状态的各自持续时间,默认是15秒。即Listening状态持续15秒,随后Learning状态再持续15秒。这两个状态下的端口不转发用户流量,这正是STP用于避免临时环路的关键。
Max Age
端口的BPDU报文老化时间,可在根桥上通过命令人为改动老化时间。
Max Age通过配置BPDU报文的传输,可保证Max Age在整网中一致。运行STP协议的网络中非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:- 如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文。
- 如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。
如果配置BPDU是根桥发出的,则Message Age为0。否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文经过一个桥,Message Age增加1。
IEEE 802.1D中对参数定义如表10-6。
表10-6 STP参数
Hello Time
200厘秒(2秒)
100~1000
Max Age
2000厘秒(20秒)
600~4000
Forward Delay
1500厘秒(15秒)
400~3000
如图10-1所示网络中,会产生如下两种情况:广播风暴导致网络不可用。
环路产生广播风暴,广播风暴会导致网络不可用。图10-1中,假设交换设备上没有启用STP协议。如果HostA发出广播请求,那么广播报文将被其他两台交换设备的端口port1接收,并分别从端口port2广播出去,然后端口port2又收到另一台交换设备发过来的广播报文,再分别从两台交换设备的端口port1转发,如此反复,最终导致整个网络资源被耗尽,网络瘫痪不可用。
MAC地址表震荡导致MAC地址表项被破坏。
即使是单播报文,也有可能导致交换设备的MAC地址表项混乱,以致破坏交换设备的MAC地址表。
假设图10-1所示的网络中没有广播风暴,HostA发送一个单播报文给HostB,如果此时HostB临时从网络中移去,那么交换设备上有关HostB的MAC地址表项也将被删除。此时HostA发给HostB的单播报文,将被交换设备S1的端口port1接收,由于S1上没有相应的MAC地址转发表项,该单播报文将被转发到端口port2上,然后交换设备S2的端口port2又收到从对端port2端口发来的单播报文,然后又从port1发出去。同时,交换设备S2的端口port1也会接收HostA发给HostB的单播报文,然后又从port2发出去。如此反复,在两台交换设备上,由于不间断地从端口port1、port2收到主机A发来的单播报文,交换设备会不停地修改自己的MAC地址表项,从而引起了MAC地址表的抖动。如此下去,最终导致MAC地址表项被破坏。