1.1STP出现的背景
STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞以消除环路。由于局域网规模的不断增长,STP已经成为了当前最重要的局域网协议之一。
在上图的网络情况中,会产生如下三种情况
广播风暴
假设交换设备上没有启用STP协议。如果HostA发出广播请求,那么广播报文将被其他两台交换设备的端口port1接收,并分别从端口port2广播出去,然后端口port2又收到另一台交换设备发过来的广播报文,再分别从两台交换设备的端口port1转发,如此反复,最终导致整个网络资源被耗尽,网络瘫痪不可用。
MAC地址表不稳定
假设上图所示的网络中没有广播风暴,HostA发送一个单播报文给HostB,如果此时HostB临时从网络中移去,那么交换设备上有关HostB的MAC地址表项也将被删除。此时HostA发给HostB的单播报文,将被交换设备S1的端口port1接收,由于S1上没有相应的MAC地址转发表项,该单播报文将被转发到端口port2上,然后交换设备S2的端口port2又收到从对端port2端口发来的单播报文,然后又从port1发出去。如此反复,在两台交换设备上,由于不间断地从端口port1、port2收到主机A发来的单播报文,交换设备会不停地修改自己的MAC地址表项,从而引起了MAC地址表的抖动。如此下去,最终导致MAC地址表项被破坏。
1.2 STP基本概念
STP(Spanning Tree Protocol)生成树协议.是IEEE 802.1D中定义的数据链路层协议,用于解决在网络的核心层构建冗余链路里产生的网络环路问题,通过在交换机之间传递网桥协议数据单元(Bridge Protocol Data Unit,简称BPDU),通过采用STA生成树算法选举根桥、根端口和指定端口的方式,最终将网络形成一个树形结构的网络,其中,根端口、指定端口都处于转发状态,其他端口处于禁用状态。如果网络拓扑发生改变,将重新计算生成树拓扑。
1.2.1 一个根桥
树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)概念。
对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定。
1.2.2 两种度量
生成树的生成计算有两大基本度量依据:ID和路径开销。
Ⅰ ID
ID又分为:BID(Bridge ID)和PID(Port ID)。
BID:桥ID
IEEE 802.1D标准中规定BID是由16位的桥优先级(Bridge Priority)与桥MAC地址构成。BID桥优先级占据高16位,其余的低48位是MAC地址。
在STP网络中,桥ID最小的设备会被选举为根桥。
Ⅱ PID:端口ID
PID由两部分构成的,高4位是端口优先级,低12位是端口号。
PID只在某些情况下对选择指定端口有作用。
路径开销
路径开销(Path Cost)是一个端口变量,是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。
在一个STP网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成,这个值叫做根路径开销(Root Path Cost)。它是数据从根端口出方向发送的开销值.
1.2.3 三要素选举
从环形网络拓扑结构到树形结构,总体来说有三个要素:根桥(root)、根端口(RP)和指定端口(DP)。以下结合下图介绍三要素。
Ⅰ 根桥RB(Root Bridge)
通过比较BPDU中的BID较小的充当.BID由优先级和MAC地址组成 。先比较可管理优先级,再比较背板的MAC地址。
Ⅱ 根端口RP(Root Port) 选举顺序为RPC,对端BID,本端PID,对端PID
所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能STP的端口中,根路径开销最小者,就是根端口。很显然,在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。用于接收root最优的BPDU。
Ⅲ 指定端口DP(Designated Port) 选举顺序为RPC,本端BID,本端PID,对端PID
每个线路上只有一个指定端口,用于发出和中继最优的BPDU
Ⅳ 阻塞端口AP
既非根端口又非指定端口的为阻塞端口AP
1.2.4 四个比较原则
STP选举有四个比较原则,构成消息优先级向量:{ 根桥ID,根路径开销,发送设备BID,发送端口PID }
STP网络中的其他设备收到配置BPDU消息后,将比较表2中所述的字段,四个基本比较原则如下:
Ⅰ 最小BID:用来选举根桥。运行STP协议的设备之间根桥ID字段选择最小的BID。
Ⅱ 根路径开销:用来在非根桥上选择根端口。在根桥上,每个端口到根桥的根路径开销都是0。
Ⅲ 最小发送者BID:当一台运行STP协议的设备要在两个以上根路径开销相等的端口之中选择根端口时,通过STP协议计算,将选择接收到的配置消息中发送者BID较小的那个端口。上图所示,假设S2的BID小于S3的BID,如果S4的A、B两个端口接收到的BPDU里面的根路径开销相等,那么端口B将成为根端口。
Ⅳ 最小PID:用于在根路径开销相同的情况下,不阻塞最小PID的端口,而是阻塞PID值较大的端口。下图所示的情况下PID才起作用,S1的端口A的PID小于端口B的PID,由于两个端口上收到的BPDU中,根路径开销、发送交换设备BID都相同,所以消除环路的依据就只有PID。
1.2.5 五种端口状态
disable 未启用状态或端口状态为down.端口不仅不处理BPDU报文,也不转发用户流量。
blocking 阻塞状态 端口仅仅接收并处理BPDU,不转发用户流量。
listening 侦听状态 确定端口角色,将选举出根桥、根端口和指定端口。
learning 学习状态 设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。
forwarding 转发状态 端口既转发用户流量也处理BPDU报文。
对于STP,影响端口状态和端口收敛有以下3个参数。
Hello Time 2S
运行STP协议的设备发送配置消息BPDU的时间间隔,用于设备检测链路是否存在故障。设备每隔Hello Time时间会向周围的设备发送hello报文,以确认链路是否存在故障。
当网络拓扑稳定之后,该计时器的修改只有在根桥修改后才有效。新的根桥会在发出的BPDU报文中填充适当的字段以向其他非根桥传递该计时器修改的信息。但当拓扑变化之后,TCN BPDU的发送不受这个计时器的管理。
Forward Delay 15S 临时环路时间为30-50s
设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成临时环路。为此,STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。
Max Age 20S 合同延续期
端口的BPDU报文老化时间,可在根桥上通过命令人为改动老化时间。
Max Age通过配置BPDU报文的传输,可保证Max Age在整网中一致。运行STP协议的网络中非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:
如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文。
如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败
1.3 STP拓扑变化
桥ID、路径开销和端口ID等信息,所有这些信息都是通过BPDU协议报文传输。BPDU包括配置BPDU和TCN BPDU.
- 在网络拓扑发生变化后,下游设备会不间断地向上游设备发送TCN BPDU报文。
- 上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其它端口也有可能收到TCN BPDU报文,但不会处理。
- 上游设备会把配置BPDU报文中的Flags的TCA位设置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
- 上游设备复制一份TCN BPDU报文,向根桥方向发送。
- 重复步骤1、2、3、4,直到根桥收到TCN BPDU报文。
- 根桥把配置BPDU报文中的Flags的TC位置1后发送,通知下游设备直接删除桥MAC地址表项。缩短转发延时.MAC地址表的刷新时间为15S。