STP能够检测并防止2层桥接环路的形成。可以存在多条并行的路径,但只使用一条路径来转发数据帧,并基于IEEE 802.1D桥协议标准。
802.1w作为一种增强的生成树,在拓扑发生变化时可提供比传统生成树更快的收敛速度。 Cisco交换机在PVST+(每 VLAN 生成树)或Rapid-PVST+(快速每VLAN 生成树)中为每个VLAN运行单独的 STP 实例(instance)。运行RPVST的交换机之间需要配置 Trunking。 对于工业标准 IEEE 802.1Q的Trunk链路来说,所有的 VLAN只需一个STP 实例。公共生成树(CST)使用VLAN 1通信。 PVST+作为Cisco私有的扩展技术,允许交换机在CST与PVST之间互操作。PVST桥协议数据单元(BPDU)在802.1Q Trunk链路上以隧道方式传输。Catalyst交换机默认运行PVST+。 快速PVST+是一种混合模式的STP,其使用了结合了 PVST基础的IEEE 802.1w(快速生成树)。快速PVST+兼容IEEE 802.1w,但须使用Cisco扩展技术来支持每VLAN生成树。 基于IEEE 802.1s标准的多生成树(MST)对802.1w RSTP进行扩展,使其拥有多个STP实例。 a. MST向下兼容802.1D、802.1w及PVST+模式的STP。 b. 使用公共VLAN和STP实例的多个交换机组成一个MST区域。 c. MST可产生PVST+的BPDU,用来实现协议之间的互操作性。 d. MST支持最多16个STP实例。 交换机在每个Hello时间间隔(默认2秒)都会向所有接口发送BPDU。 BPDU不能被交换机直接转发,其用于进一步计算并产生新的 BPDU。 交换机发送两种类型的BPDU。 a.配置BPDU。 b.拓扑变更通告(TCN)BPDU。
01 选举根桥
桥ID最小的交换机将成为生成树的根桥。桥 ID(BID)由两字节的优先级字段和6字节的MAC地址组成。优先级字段范围为0~65535,默认是32768。
02 选举根端口
每台非根桥交换机上将选举出一个根端口,或称为离根桥“最近”的端口。“最近”指端口带有最低的根路径开销值。开销值携带于BPDU中。沿路上每台非根桥交换机都会在BPDU的入站端口上增加本地端口开销值。随着新的BPDU的产生,根路径值开销逐渐累积。
03 选举指定端口
在每个网段上,其中一台交换机的端口将选举成为指定端口,用于处理此网段的流量,网段中宣告最低根路径开销的端口选举成为指定端口。
04 移除桥接环路
既不是根端口又不是指定端口的交换机端口将被置于阻塞状态。此步骤将中断所有桥接环路,否则,将会形成环路。
当STP选举遇到先决条件相同或称为平局时,最重决策基于以下一系列条件。 1.最小的BID。 2.最低的根路径开销。 3.最小的发送方的BID。 4.最小的端口ID。 默认情况下,交换机端口具有如下表中定义的路径开销值。
默认下,工作在 RPVST+模式下的Catalyst交换机使用“短模式”,即16比特的路径或端口开销值。当网络中的端口速率小于1Gbit/s 时,短模式范围的开销值已经足够。
不过,如果存在10Gbit/s或速率更高的端口,需要将网络中所有交换机设置成使用“长模式”,即32比特的路径开销范围,这样做可确保所有的交换机计算根路径开销值的一致性。
每台交换机的端口须经历一系列的端口状态改变。
01 禁用状态(disabled)
端口被管理性的关闭或由于故障引起的端口关闭(MST称此状态为丢弃状态(discarding))。
02 阻塞状态(blocking)
此端口状态出现在端口初始化之后。处于阻塞状态的端口不能接收或传输数据,不能向自己的地址表添加MAC地址,只能接收BPDUs。如果检测出存在桥接环路,或者端口失去其根端口或指定端口的状态,那么它将返回到阻塞状态(MST称此状态为丢弃状态)。
03 侦听状态(listening)
如果某端口可成为根端口或指定端口,该端口将进入侦听状态。侦听状态的端口不能接收或传输数据,也不能向自己的地址表中添加MAC地址可以收发BPDU(MST称此状态为丢弃状态)。
04 学习状态(learning)
在转发延时计时器到期后(默认 15 秒),端口将进入学习状态.学习状态的端口不能传输数据但可收发BPDU,此状态下可学习MAC地址并可将地址加入到地址表中。
05 转发状态(forwarding)
在第2个转发延时计时器到期后(默认15秒),端口将进入转发状态。此状态下的端口可以收发数据、学习MAC地址及收发BPDUs。
如果交换机的某个端口进入了转发状态(启动了 PortFast 技术除外),将产生拓扑变更信号。
如果交换机的某个端口从转发或学习状态进入阻塞状态,将产生拓扑变更信号。
为了发送拓扑变更信号,交换机会在每个Hello时间间隔从根端口向外发送TCN BPDU。直到上行的指定桥邻居确认了 TCN BPDU。邻居会在自身的根端口上继续中继TCN BPDU直到根桥收到为止。
根桥通过发送配置BPDU来将拓扑变更通知给整棵生成树,这种BPDU设置了拓扑变更位(TC)。此操作将导致所有的下行交换机将其地址表老化时间(默认300秒)减少到转发延时(默认15秒),使得交换机将不活动的MAC地址更快的刷新出地址表
STP根保护(Root Guard)特性用来在交换网络内强制根桥位置及身份。在端口启用了Root Guard特性后,如果该端口收到了更优的BPDU,那么Root Guard将停用此端口。此技术用于避免其他交换机意外地成为根桥。
应该在所有不应出现根桥的端口上启用STP Root Guard 特性,这样做保护了当前主根桥和备根桥的选择。
单向链路检测(UDLD)提供了一种检测单向传输链路的方法,使得STP无法常规检测出来或阻止的路由环路和流量黑洞得以防止。
工作在2层的UDLD发送含有设备ID与端口ID的数据包至交换机端口所连的邻居设备。同时,邻居将任何收到的UDLD 数据包原路发回,以便让它的邻居知道该数据包已经被对端邻居识别。UDLD消息以消息间隔(message interval)时间发出,通常默认值为15秒。
UDLD可工作在两种模式下:
普通模式(normal mode)
单向链路作为一种错误被检测并报告出来,但不做其他动作。
主动模式 (aggressive mode)
单向链路作为一种错误被检测并报告出来,在8次尝试(1秒一次,共8秒)重新建立链路后停用端口。停用的端口须手工重新启用。
STP环路防护(Loop Guard)技术用来在根端口(root port)和替换根端(alternate root port)上检测BPDU的缺失。如果收不到BPDU,非指定端口将被临时停用,用来防止非指定端口错误的成为指定端口并进入转发状态。
对于所有可能活动STP拓扑来说,应该在所有根端口和替换根端口(两者都是非指定端口)上启用STP Loop Guard。
来看一个STP运作的例子,如下图所示为3台Catalyst交换机互连成的三角形拓扑网络。RP代表根端口,DP代表指定端口,F代表处于转发状态的端口,X代表处于阻塞状态的端口。
生成树算法过程如下:
01 选举根桥
所有3台交换机都具有相同的桥优先级(都为默认值32768)。但Catalyst A具有最小的MAC地址(00-00-00-00-00-0a),故Catalyst A选举成为根桥。
02 选举根端口
在每台非根桥交换机上计算出最低的根路径开销。在Catalyst B上为端口1/1,其端口路径开销为 0+19, Catalyst C上为端口1/1,其根路径开销同样是 0+19。
03 选举指定端口
根据规定,根桥上的所有端口都将成为各自网段的指定端口。因此,Catalyst A上的端口1/1与1/2都为指定端口。Catalyst B端口1/2与Catalyst C 端口1/2 共享一个网段,须在两端口之间选举出一个指定端口。这两个端口的根路径开销都为0+19+19,即38,出现了平局。再选出最低的发送方的BID,故Catalyst B(MAC 地址最小)的端口1/2 选举成为指定端口。
04 既不是根端口又不是指定端口的所有端口将处于阻塞状态
唯一剩下的Catalyst C上端口1/2,既不是根端口,又不是指定端口。该端口将进入阻塞状态(图中X所示 )。
01(可选)启用或禁用 STP
(global) [no] spanning-tree [vlan vlan]
默认情况下, STP 启用在 VLAN 1 和任何新创建的 VLAN 中。如果未指定具体的 VLAN,将在所有 VLAN 上启用或禁用 STP。要知道如果禁用了 STP,将不能检测并防止桥接环路的形成。交换机应始终启用 STP。
02(可选)设置交换机的 STP 模式
spanning-tree mode (pvst I mst I rapid- pvst]
默认情况下,所有 Catalyst 交换机为每个 VLAN 的 STP 实例运行 PVST+模式的 STP。想要配置成其他的STP模式,须明确使用选项rapid-pvst(带有IEEE兼容性的每 vlan 802.1w)或mst。
03(仅适用于 MST)激活一个 MST 实例
(1)进入 MST 配置模式
spanning-tree mst configuration
(2)定义 MST 区域
(mst )name name
(mst )revision revision-number
使用name(最多32字符的文本字符串)来定义MST区域。如果未指定区域名,系统将不使用区域名。用户可以使用区域修订号来指出区域配置改变的次数。
修订号revision-number(0~65535,默认为 1)须明确地设定,并且不会随区域配置变化自动递增。
(3)将一个或多个VLAN映射到实例中
instance instance-id vlan vlan-range
此命令用于将vlan号( 1~1005、1025~4094)映射到 MST instance(0~15)中。映射关系将保存在MST区域缓存中。
(4)退出 MST 配置模式
(mst)end
输入end命令将退出并返回到特权模式。同时配置的改变立即生效。但如果想永久保存MST配置,须将配置保存至NVRAM中。
04(可选)放置根桥交换机
(global)spanning-tree vlan vlan root {primary | secondary} [diameter net-diameter ][hello-time hello-time]
或
(global) spanning-tree mst instance-id root {primary | secondary} [diameter net-diameter ][hello-time hello-time]
带有参数 primary 的命令将使交换机成为若干 VLAN(1~1005和1025~4094)或指定的STP 实例(1~16,如未指定即VLAN 1)的主根桥。网桥优先级的修改规则如下:如果大于8192,将被设置成8092;
如果小于8192,将被设置成比当前根桥优先级更小的值。可以使用关键字 secondary来指定备根桥或次根桥,以防主根桥失效。这里,网桥优先级将被设置成16384(对于MST来说,根桥优先级被设置成24576,备根桥被设置成 28672)。
关键字diameter指定了网络中两端点之间的直径,即网桥或交换机的数量(1~7,默认为7)。可同时设定Hello时间间隔(默认2秒钟)。
网络直径的设置将导致系统自动计算并修改其他STP计时器值。可使用其他命令明确地调整计时器值,不过调整直径隐藏了计时器计算的复杂性。
05(可选)调整网桥的优先级
(global)spanning-tree vlan vlan priority priority [diameter net-diameter ][hello-time hello-time]
或
(global)spanning-tree mst instance-id priority priority [diameter net-diameter ][hello-time hello-time]
用户可以直接将网桥优先级修改成其他数值,而不是自动获得的主备根桥的优先级。优先级可基于每VLAN或STP实例来设定。选项instance-list指定了实例号,可使用逗号或连字符来定义一个或一组实例。
如果想强制某台交换机成为根桥,应为此交换机配置一个比在VLAN或STP实例中其他所有交换机都要低的优先级。对于PVST+来说网桥优先级范围介于 0~65535(默认为 32768),不过,当启用扩展 VLAN 支持功能后,优先级只能设定成以下固定数值:0(优先级最高)、4096、8192、12288、16384、20480、24576、28672、32768、36864、40960、45056、49152、53248、 57344和61440(优先级最低)。
06(可选)阻止端口成为STP根端口
(interface) spanning -tree rootguard
此命令将在端口或接口上启用 STP Root Guard(根保护)特性。如果连接到此端口的网桥通告一个更低的桥ID并成为了根桥,此端口将进入root-inconsistent(侦听)STP状态。当此端口不再能检测到根桥的BPDU时,将退回到正常的工作状态。
07(可选)调节根路径开销
(1)(可选)设置端口开销取值范围
(global) spanning-tree pathcost defaultcost-method [long I short]
默认下, PVST+的交换机使用 short 模式(16 比特)端口开销值。如果有10Gbit/s或以上的端口,应在网络中的所有交换机上将端口开销取值范围设定为 long 模式(32 比特)。MISTP、 MISTP-PVST+及 MST 默认使用“长模式”的端口开销。
(2)设定所有VLAN或实例的端口开销
此命令可将所有VLAN或STP实例的端口开销设定成cost (短模式或 MISTP模式下为 1~65535,在长模式下为 1~200000000)。
(3)设定每 VLAN 或每个实例的端口开销
(interface) spanning-tree vlan vlan-id cost cost
或
(interface) spanning-tree mst instance-id cost cost
此命令可将 VLAN vlan-id 或 STP 实例 instance-id(0~15)的端口开销设定为 cost(短模式为 1~65535,长模式为 1~200000000)。
08(可选)调节端口优先级
(1)设定所有 VLAN 或实例的端口优先级
此命令将端口优先级设定成priority(2~255)。
(2)设定每 VLAN 或每个实例的端口优先级
(interface) spanning-tree vlan vlan-list port-priority priority
或
(interface)spanning-tree mst instance-id port-priority priority
此命令将VLAN vlan-id或STP实例instance-id(0~15)的端口优先级设定为
09(可选)使用 UDLD 检测单向连接
(1)在交换机上启用 UDLD
默认情况下, UDLD 处于停用状态。在将 UDLD 应用在特定端口之前须先将其启用。Supervisor IOS 中可使用关键字 aggressive 来在所有以太网光纤端口上全局地启用UDLD主动模式。
(2)(可选)调整UDLD消息间隔计时器
此命令将 UDLD 消息时间间隔设定成interval(7~90 秒,默认 60 秒)。
(3)在特定端口上启用UDLD
( interface) udld [enable I disable ]
在交换机上全局启用 UDLD 后, UDLD 将默认启用在所有以太网光纤端口上。默认下,在所有的以太网双绞线介质端口上, UDLD处于停用状态。
(4)(可选)在特定端口上启用UDLD主动模式
( interface) udld aggressive
在端口上启用 UDLD 主动模式之后,当系统检测到单向连接时将停用此端口。问题修正后须手动地重新启用该端口。在 Supervisor IOS 中,可使用特权命令udld reset来重新启用所有被UDLD停用的端口。
10(可选)使用 Loop Guard 特性来增强 STP 的稳定性
( interface) spanning-tree loopguard
Loop Guard(环路防护)特性应只启用在已知的根端口或替换根端口上。例如,接入层交换机的上行端口一定是根端口或替换根端口,原因是这些端口离根桥最近(假定用户将根桥放置在了网络的中心位置)。