标准生成树

一、生成树概述

STP(Spanning-tree Protocol,生成树协议)是用于消除二层环路的协议。因为STP是IEEE制定的802.1D标准,所以也通常叫做802.1D协议。如果所有VLAN属于一个生成树实例,那么就叫做CST(Common Spanning-tree Protocol,公共生成树协议),CST/RSTP也可以用于MST中,将独立的MST看作是单个设备,采用STP/RSTP将这些MST域连接起来组建成更大的二层防环树。

二、生成树原理

1、STP基本工作原理

某网络是由多个二层交换机和冗余二层链路所组成的,所有二层交换机开始运行STP。以下是STP工作的各个阶段:

  • 收敛阶段:所有交换机开始侦听和发送config BPDU,所有交换机开始将收到的config BPDU进行选举,依次选举出根桥、非根桥交换机的根端口(RP)、所有交换机的指定端口(DP),并阻塞剩余端口,当RP、DP的端口状态为forwarding,阻塞端口状态为blocking时,STP收敛完成。

  • 拓扑变更:某台交换机参与生成树计算的端口发生up/down,该交换机“向上”发送TCN BPDU通告根桥发生拓扑变更,根桥将TC置位,以此通告整个二层网络拓扑变更,生成树重新进入收敛阶段,等待收敛完成。

2、BPDU

BPDU用于交换STP信息,包括选举制度、环路识别、拓扑变更、端口角色等。交换机接收到BPDU后,根据其中的字段执行操作。默认情况下启用STP的交换机,每2s向所有端口发送一次config BPDU,当拓扑变更时才会发送TCN BPDU。BPDU分为两类:config BPDU、TCN BPDU。config BPDU用于计算STP,TCN BPDU用于通告拓扑变更。

交换机会向每个端口发送BPDU,BPDU帧首部为src MAC=端口MAC,dst MAC=STP组播地址。BPDU帧结构:

  • protocol id:标识STP

  • BPDU type:标识BPDU类型(config BPDU / TCN BPDU)

  • BPDU flags:TC位,用于响应TCN BPDU

  • Root identifier:根桥BID

  • Root path cost:发送者到根桥的路径开销

  • Bridge identifier:表示发送者BID

  • Port identifier:表示发送者端口ID

  • Hello time:BPDU发送间隔

  • 转发延迟:标识交换机端口必须等待listening、learning状态的时间

1)BID

BID(8 bytes)= 桥优先级(2 bytes)+ MAC地址

BID是启用STP的交换机的唯一标识,同时BID是BPDU中最重要的信息之一,用于选举。桥优先级范围为0-65535,默认32768(4096的倍数),越小越优。

2)PID

PID(2 bytes)= 端口优先级(1bytes)+ 端口索引

PID是启用STP的交换机的端口唯一标识。端口优先级范围为0-255,默认128,越小越优。

3)根路径开销

根路径开销指的是本交换机到达根桥交换机的路径总开销,越小越优,与接口带宽有关。长短路径开销方法:

  • 短路径开销方法:初始的STP版本中采用的路径开销方法,使得它不能区分高于20Gbps的链路。

  • 长路径开销方法:弥补了短路径开销方法,标准定义于IEEE 802.1t。

etherchannel链路带宽为所有捆绑链路的总带宽。

Nexus Series Switches默认采用短路径开销。

4)端口角色

交换机在STP选举过程中,涉及到以下几个端口角色:

  • 根端口(RP):位于非根桥上,去往根桥的最优路径端口,每台交换机中只有一个根端口。

  • 指定端口(DP):位于根桥与非根桥上,根桥所有端口都是指定端口,每条链路上只有一个指定端口。

  • 阻塞端口(BP):不转发数据帧。

总结交换机收发BPDU的特点。启用STP的交换机每2s发送一次Config BPDU,交换机收到BPDU后做两件事情,第一件事就是比较收到的BPDU中的BID和自身的BID谁更小,如果对方小就停止发送自身的BPDU,转发BID小的BPDU。第二件事就是将根桥的BPDU存储在本地,以维持端口角色和端口状态,如果在Max-age时间内收到根桥BPDU,则刷新Max-age,否则本地删除根桥BPDU,重新开始收敛。举个例子,BP在Max-age内没收到BPDU,则清除根桥BPDU,BP端口状态发生切换,从Blocking经过30s转发延迟过渡到Forwarding。

Max-age即BPDU最大存储时间

3、STP选举制度

STP为了防止网络中的环路,通过三步得到一个无环的二层网络:根桥选举、根端口选举、指定端口选举。

1)根桥选举

启用STP的交换机会被选举出一个交换机作为根桥,选举规则就是BID小的当选

如果所有交换机的桥优先级相同,那么比较MAC地址小的当选

网络初始时,所有交换机都认为自己是根桥,从所有端口上每2s发一个config BPDU,帧的主要内容就是认为自己是根桥(Root identifier填自己的BID),随着发送和接收config BPDU。交换机开始对比收到的config BPDU中的Root identifier和自己的BID进行比较,如果这个Root identifier比自身BID大,则忽略该来源帧,如果发现Root identifier比自身的小,则承认选举失败,停止发送config BPDU,改而转发来自该来源config BPDU。随着收敛的进行,根桥被选举出来了。

根桥以默认2s为周期发送config BPDU,其他非根桥交换机转发来自根桥的config BPDU。

2)根端口选举

非根桥交换机上的端口选举,以交换机为单位选举出一个RP,RP到根桥路径是最优的。到根桥路径的优劣是通过开销来决定。路径开销是去往根桥所有链路的累计开销值,而RP是通向根桥具有最低开销值得端口。选举规则:

  • 带有最低路径开销的端口当选

  • 如果路径开销相同,则比较邻居端口发送来的PID,小的当选

SW3和G0/0/2和G0/0/0的RP比较是通过对端PID来比较的,对端PID小的则被选举为RP。

3)指定端口选举

以链路为单位选举出一个DP,选举规则:

  • 根桥的端口都是DP

  • 到达根桥最低的路径开销

  • 最低的发送者BID

  • 最低的发送者端口ID

4)阻塞剩余端口

4、STP端口状态

STP是否收敛完成需要看端口状态。为了避免在生成树形成时发生环路,RP和DP是不允许立即转发数据帧的,实际上这些端口会强制停留在一些中间状态。

交换机端口具备五种状态,即Disabled、Blocked、Listening、Learning、Forwarding。收敛完成则指的就是端口状态达到稳态,稳态即Blocking、Forwarding,RP、DP最终端口状态是Forwarding,BP最终端口状态是Blocking。

  • Disabled:接口不可操作。

  • Blocked:收BPDU(以从邻居交换机获取根桥的位置与BID),不收发普通数据帧,不学习MAC地址(Max-age=20s)。

  • Listening:收发BPDU,不收发普通数据帧,不学习MAC地址,转发延迟15s后进入下一状态。

  • Learning:收发BPDU,不收发普通数据帧,学习MAC地址,转发延迟15s后进入下一状态。

  • Forwarding:收发BPDU、数据帧,学习MAC地址

注意收敛完成后需要维持网络的稳定就需要维持端口状态的稳定,而端口状态的稳定则是依靠Config BPDU的收发。

默认的hello为2s、转发延迟15s、max-age为20s

5、STP拓扑变更机制

STP会保持稳定直到拓扑变化发生。拓扑变化包括链路变化(即端口状态up/down)、添加新的接入交换机、STP参数调整。

拓扑变化发生后,会在RP发送TCN BPDU来通知根桥“拓扑变更,STP需要重新收敛”,该TCN BPDU不包含实际变更内容,仅用于通知根桥。TCN BPDU触发机制:

  • 任何参与STP计算的端口物理状态up/down会触发TCN BPDU

  • 非根桥在DP收到TCN BPDU

Step1. 感知链路变更:SB感知到链路故障(触发任何参与STP计算的端口物理状态up/down会触发TCN BPDU规则),从RP发送一个TCN到SC(触发非根桥在DP收到TCN BPDU规则),从DP接收到TCN的SC回复SB一个TCN ACK并且从RP发送TCN,根桥从DP收到TCN,根桥得知拓扑变更。

Step2. 生成树TCN通告:根桥将config BPDU中的TC置位,根桥在规定时间内(转发延迟+Max age)持续发送config BPDU,其他交换机收到并转发TC置位的config BPDU,使用转发延时计时器来加速更新CAM中的表项(表项寿命从300s变为15s)。

Step3. STP重新收敛:所有接收到TC置位的config BPDU的交换机开始重新进行STP计算(即STP重新开始收敛),包括CAM表更新、端口状态转换等。

无意义的拓扑变更对网络是有影响的,比如PC关机,access接口会检测到端口down而发送TCN BPDU。如果大量的PC开关机就会导致网络中存在大量的TCN BPDU,这会导致二层网络不稳定。可以通过在接入层交换机的下行接口上设置portfast来优化网络。

三、生成树配置

1、根桥配置

spanning-tree vlan 2-100 priority 4096

查看生成树信息:show spanning-tree active  (端口状态、hello time、max age、forward delay、根桥信息)

查看生成树特性信息:show spanning-tree summary

查看生成树接口状态:show spanning-tree int E1/1

2、备根桥配置

spanning-tree vlan 2-100 priority 8192

3、其他交换机配置

spanning-tree vlan 2-100 priority 32768

4、可选配置

修改接口根路径开销:spanning-tree vlan 2-100 cost x
修改接口优先级:spanning-tree vlan 2-100 port-priority y
调整hello time:spanning-tree vlan 2 hello-time xsec   (默认2s)
调整forward delay:spanning-tree vlan 3 forward-time ysec  (默认15s)
调整max-age:spanning-tree vlan 4 max-age zsec (默认20s)