1、第一部分 STP 基础STP 概述生成树协议(STP,Spanning-Tree Protocol)是一种 2 层协议,通过一种专用的算法来发现网络中的物理环路并产生一个逻辑的无环(loop-free)拓扑结构。STP 生成了一个无环的树形结构,包括可以在整个 2 层网络范围内扩展的叶和枝。如上图这样一个高冗余度的网络,如果没有 STP 的存在,将会产生大量的广播环路,严重影响性能。生成树协议和其他协议一样,是随着网络的不断发展而不断更新换代的。在生成树协议发展过程中,老的缺陷不断被克服,新的特性不断被开发出来。l 广播环路当主机 A 发送一个目的地址为 FF-FF-FF-FF-FF-FF 的
2、广播帧时,该 frame 将传至 CAT-1 和 CAT-2,当达到 CAT-1 的端口 1/1 时,CAT-1 按照标准透明桥接算法将数据帧从除去入端口,将其泛洪到其他每个端口,包括 CAT-1 的 1/2 端口,从端口 1/2 发出的数据帧会到达下方以太网中的所有节点,包括 CAT-2 的端口 1/2。同样 CAT-2 也做这样的处理,此后广播报文就会在 CAT-1 和 CAT-2 之间的链路成几何级数的增长。广播环路比路由环路更危险,在以太网帧结构只包含两个 MAC 地址、一个类型字段和一个循环冗余校验(CRC),并将网络层的包作为数据部分的内容,它没有像路由器那样,存在一个 TTL 域
3、,对于一个路由环路而言,一个报文跳过 255 条后,就会被丢弃。而广播路由环路的报文将永远不会被丢弃。同时反复广播,其报文数量呈几何级数增长。* 桥接表受损除了广播风暴外,单播帧也会引起网络瓶颈。当主机 A 此前已经拥有一条主机 B 的 ARP 条目,希望 ping 主机 B,但主机B 临时从网络移除,并且交换机上相应于 B 的桥接表项已经被删除。假定任何一个交换机都没有运行 STP,则当帧到达CAT-1 1/1 后,CAT-1 找不到目的地址,则 CAT-1 1/2 产生泛洪,同时 CAT-2 收到后,将主机 A 的位置改变到一个错误的端口上。此后帧还沿反方向循环。在端口 1/1 和 1/2
4、 之间反复改变,导致 CPU 负载极大。生成树算法算法(algorithm)就是一个公式或者解决特定问题的一组步骤。算法通常依赖于一组规则,有明确的开始和结束。l*网桥 IDSTP 的特征就是生成树算法。生成树算法是根据一组参数来进行判别。 网桥 ID(BID,Bridge ID)是一个 8 字节的字段,包含一个数字有序对,如图,头 2 个字节的十进制数成为网桥优先级(Bridge Priority),后 6 字节是 MAC 地址(16 进制)。网桥优先级是一个用来衡量网桥在生成树算法中优先权的十进制数,2 的 16 次方,取值为 0-65535。缺省值为 32768。BID 的 MAC 地址
5、是交换机的 MAC 地址之一。每个交换机都有一个 MAC 地址池,每个 STP 实例使用一个,作为按 VLAN生成树实例(每个 VLAN 一棵)的 BID。具体算法:BID 的比较方式如下,假设(s,t)和(u,v)分别为两个 BID,数对中的第一个值为优先级,第二个为 MAC 地址,则比较规则如下:If s listening (f0/24 原来处于 blocking 状态)03:51:32: STP: VLAN0200 sent Topology Change Notice on Fa0/2403:51:32: STP: VLAN0200 Fa0/23 - blocking03:51:47
6、: STP: VLAN0200 Fa0/24 - learning (listening -learning 15s 时间)03:52:02: STP: VLAN0200 Fa0/24 - forwarding (learning 时间为 15s)STP 时间STP 运作受 3 个定时器的控制: HELLO 时间(根网桥发送配置 BPDU 的时间间隔) 缺省 2s 这个值实际上只控制配置 BPDU 在根网桥上生成的时间,其他网桥则把它们从根网桥接收到的 BPDU 向外通告。换言之,如果在 220 秒内由于网络故障而没有收到新的 BPDU,非根网桥在这段时间内就停止发送周期 BPDU。如果这种情
7、况持续超过 20s,也就是超过最大存活期,非根网桥就使原来存储的 BPDU 无效,并开始寻找新的根端口。 转发延迟(侦听状态或学习状态的持续时间) 缺省 15s 网桥在侦听状态和学习状态所花费的时间。只用转发延迟就控制了转发和学习两个状态。15 秒这个值是假定网络的最大规模为 7 段网桥跳数;BPDU 的最大丢失个数为 3 以及 HELLO 时间间隔为 2 秒的情况下得到的。这个转发延迟计时器同样可以用来控制网桥表在网络拓扑发生变化后的生存时间。 最大存活期(存储 BPDU 的时间) 缺省 20s 就是网桥在丢弃 BPDU 前用来备份存储它的时间。STP 的 BPDU 格式STP BPDU 帧
8、格式随着所使用的协议类型变化。下图显示了 IEEE 802.1D 生成树协议的 BPDU 帧格式。Cisco 专有的 BPDU 帧格式:标准帧格式n 帧控制域总是 01 n 目的地址域指定了在桥街租地址表中所规定的目的地址,在 IEEE STP BPDU 帧中,这个n 地址为 0x800143000000 n 原地址域指明了交换机所使用的基本 MAC 地址 n 路由选择信息域仅在 Cisco STP BPDU 中有,RIF 必须为 0x0200 n 逻辑链路控制域控制所有 STP BPDU 的帧类型,这个域被设置为 0x424203BPDU 内各域的格式。除端口 ID 域外,两种 STP 的
9、BPDU 内所有的域都是共同的。在 IEEE 和 Cisco STP BPDU 帧中,端口 ID 域定义了起源网桥的传送端口。协议标志(2) 版本(1) 消息类型(1) 标志(1) 根 ID(8) 根路径开销(4) 网桥 ID(8) 端口 ID(2) 消息生存时间(2) 最大生存时间(2) Hello 周期(2) 转发延迟(2)协议标志、版本和消息类型域总是被置为 0标志域包括下列的一种:n 拓扑变化(TC)位,该信号指示拓扑变化并指明该 BPDU 是一个拓扑变化通告( TCN)BPDU。该位没有置位,则说明BPDU 是一个配置 BPDU。n 拓扑变化确认(TCA)位,该位被置位表示确认收到一
10、个 TC 位被置位的配置信息其他域包括:n 根 ID 域通过列出 2 字节的优先级和紧跟的 6 字节 ID 指明根交换机n 根路经开销域指明从网桥发送该配置消息的网桥到跟交换机的路径开销n BID 域指明发送该消息的网桥的优先级和 IDn 端口 ID 域表明该配置消息的发送端口号(IEEE 或者 Cisco)。该域使得由于多个网桥相连而产生的环路可以被检测并纠正n 消息生存时间域指示自从根发送完当前配置消息已经过了多长时间n 最大生存时间指示当前配置消息何时被删除n hello 时间域指示根网桥配置消息的时间间隔n 转发延迟域指示在拓扑变化后网桥在转到新状态之前需要等待多长时间。如果网桥转换的
11、过快,可能并非所有网络链路都已经准备好了改变状态,于是会导致环路。拓扑变化和 STPSTP 通过使用一组定时器来避免在网络中出现桥接环路,如果一个稳定的 STP 进程出现变化可能需要 3050s 的时间才能收敛到新的拓扑(Max Age 20s + 2 次 forward delay 15s)。当网络在收敛过程时,那些已经不可达的物理地址仍旧存在于交换表中,交换机仍然会尝试向无法达到的设备转发数据帧。STP 在拓扑变化的机制中,要求迅速清空交换表以删除不可达的物理地址。防止交换机将一些数据帧转发到那些不可达的设备。 下图为一个拓扑变化过程:1. 交换机 D 注意到拓扑变化 2. 交换机 D 从
12、根端口发出一个拓扑变化通知(TCN,Topology Change Notice)BPDU,最终目的地为根交换机。TCN BPDU 通过 BPDU 中值为 0x80 的一个字节类型域表明。网桥持续发送 TCN BPDU 直到该网段的指定网桥响应一个TCA“拓扑变更响应(Topology Change Acknoledgment)”配置 BPDU,类型 TCA 是通过 1 字节标志域中的最高比特位指明的。 3. 该网段的指定网桥(Cat-B)发送一个 TCA 配置 BPDU 到源网桥(Cat-D)。交换机 B 也从根端口发送一个目的地为根交换机的 TCN BPDU 4. 当根交换机收到(上游)T
13、CN BPDU,就发送配置 BPDU 通告发生了一个拓扑变化 TC。根交换机在配置中保持拓扑变化的时间等于转发延迟加最大生存时间. (即会持续 15+20 秒发送 17 个 TC)5. 一个网桥收到( 下游) 从根交换机发出的拓扑变化(TC )配置消息,用转发延迟定时器(15s)使全部地址表项超时(而RSTP 则使用立即 flush 转发表)。这使得比默认设备通常需要 5 分钟更快的时间来使整张表超时快了很多。网桥将持续这一个过程知道不再从根交换机收到拓扑变化配置消息* 备份根交换机通常拓扑变化中,如果根桥出现问题,将会极大地影响网络的 STP 收敛时间,此时, cisco 采用了一种备份根桥
14、的策略。如下图:其实质上是根据根网桥选举规则进行处理的,配置命令为: Spaning-tree vlan vlan-id root primaySpaning-tree vlan vlan-id root secondary这 2 条命令的作用是修改 BID 中的 Priority 值,该命令仅在 Catalyst 6500,4500,3750 ,3550,2950 上支持配置 STPl 默认配置:特性 默认设置-使能状态 只有 vlan1生成树模式 PVST+(RSTP 和 MSTP 不启动)交换机优先级 32768生成树端口优先级(基于每个端口) 128生成树端口开销 1000Mbps:4
15、100Mbps:1910Mbps:100生成树 VLAN 优先级(基于每个 VLAN) 128生成树 VLAN 开销 1000Mbps:4100Mbps:1910Mbps:100生成树定时器 Hello 时间: 2 秒转发延迟时间: 15 秒最大生存时间: 20 秒传输数据包: 6 个 BPDUs 包案例:sw1#show spann vlan 1VLAN0001Spanning tree enabled protocol ieeeRoot ID Priority 32769Address 000b.5f2c.2080Cost 19Port 23 (FastEthernet0/23)Hello
16、 Time 2 sec Max Age 20 sec Forward Delay 15 secBridge ID Priority 32769 (priority 32768 sys-id-ext 1)Address 000d.6564.0280Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 300Interface Role Sts Cost Prio.Nbr Type- - - - - -Fa0/18 Desg FWD 19 128.18 P2pFa0/23 Root FWD 19 128.23 P2pFa0/2
17、4 Altn BLK 19 128.24 P2p配置 STP 的模式交换机支持 3 种模式:PVST+、RSTP 和 MSTP,默认设置为 PVST+配置过程:1) 进入全局配置模式 configure terminal2) 设置 STP 模式spanning-tree mode pvst|rapid-pvst|mst3) 验证结果show spanning-tree summaryshow spanning-tree interface 接口show running-config配置根交换机配置过程:1) 全局模式 configure terminal2) 设置 STP 根交换机spanni
18、ng-tree vlan vlan 号 root primary diameter 网络直径|hello-time 秒 diameter:用来指定网络的直径。指定了网络直径后,交换机会自动针对此直径设定最优的hello 时间、转发延迟和最大时间,这能大大减少收敛时间。Hello-time:人工指定 hello 时间覆盖自动计算值3) 验证配置show spanning-tree detail案例:sw1(config)#do show span vlan 200 (查看 vlan 200 的生成树状态)VLAN0200Spanning tree enabled protocol ieeeRoo
19、t ID Priority 32968Address 000b.5f2c.2080Cost 19Port 23 (FastEthernet0/23)Hello Time 2 sec Max Age 20 sec Forward Delay 15 secBridge ID Priority 32968 (priority 32768 sys-id-ext 200)Address 000d.6564.0280Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 300Interface Role Sts Cost Prio.N
20、br Type- - - - - -Fa0/23 Root FWD 19 128.23 P2pFa0/24 Altn BLK 19 128.24 P2p可以看出这台交换机 sw1 不是根交换机,它的 fa0/23 端口是根端口,fa0/24 处于阻塞,它的优先级为 32768+vlan 号200=32968我们现在开始配置,将 sw1 调整为根交换机sw1(config)#spanning-tree vlan 200 root primarysw1#show span vlan 200VLAN0200Spanning tree enabled protocol ieeeRoot ID Prio
21、rity 24776Address 000d.6564.0280This bridge is the root (这里显示是 Vlan200 的根交换机)Hello Time 2 sec Max Age 20 sec Forward Delay 15 secBridge ID Priority 24776 (priority 24576 sys-id-ext 200)(它会自动调整交换机优先级为 24576)Address 000d.6564.0280Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 15Interfa
22、ce Role Sts Cost Prio.Nbr Type- - - - - -Fa0/23 Desg FWD 19 128.23 P2pFa0/24 Desg FWD 19 128.24 P2p配置备份根交换机会将默认的交换机的优先级 32768 变为 28762,作为根交换机的一种备份配置过程:1) 全局模式 configure terminal2) 设置 STP 根交换机spanning-tree vlan vlan 号 root second diameter 网络直径|hello-time 秒 diameter:用来指定网络的直径。指定了网络直径后,交换机会自动针对此直径设定最优的
23、 hello 时间、转发延迟和最大时间,这能大大减少收敛时间。取值范围为 2 到 7Hello-time:人工指定 hello 时间覆盖自动计算值,取值范围为 1 到 103) 验证配置show spanning-tree detail配置端口优先级配置过程:1) 进入全局模式 configure terminal2) 进入接口模式 interface 接口3) 如果接入端口spanning-tree port-priority 优先级优先级:取值范围 0-240,默认为 128,可以使用0,16,32,48, 64,80,96,112 ,128,144,160,176 ,192, 208,2
24、24,240如果是中继接口spanning-tree vlan vlan 号 port-priority 优先级4) 验证配置show spanning-tree interface 端口show spanning-tree vlan vlan 号案例:sw2#show span vlan 200VLAN0200Spanning tree enabled protocol ieeeRoot ID Priority 32968Address 000b.5f2c.2080This bridge is the root Hello Time 2 sec Max Age 20 sec Forward
25、Delay 15 secBridge ID Priority 32968 (priority 32768 sys-id-ext 200)Address 000b.5f2c.2080Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 300Interface Role Sts Cost Prio.Nbr Type- - - - - -Fa0/23 Desg FWD 19 128.23 P2pFa0/24 Desg FWD 19 128.24 P2p可以看到 sw2 是根交换机,因为它的 MAC 地址低sw1#show sp
26、an vlan 200VLAN0200Spanning tree enabled protocol ieeeRoot ID Priority 32968Address 000b.5f2c.2080Cost 19Port 23 (FastEthernet0/23)Hello Time 2 sec Max Age 20 sec Forward Delay 15 secBridge ID Priority 32968 (priority 32768 sys-id-ext 200)Address 000d.6564.0280Hello Time 2 sec Max Age 20 sec Forward
27、 Delay 15 secAging Time 300Interface Role Sts Cost Prio.Nbr Type- - - - - -Fa0/23 Root FWD 19 128.23 P2pFa0/24 Altn BLK 19 128.24 P2p我们同时也看到交换机 sw1 的 vlan200 的情况,其中 fa0/23 是根端口,fa0/24 是处于阻塞状态Sw1#conf tSw1(config)#interface f0/24Sw1(config-if)#spanning-tree vlan 200 port-priority 64我们将端口 fa0/24 的优先级调
28、整为 64,默认为 128Sw2#conf tSw2(config)#interface f0/24Sw2(config-if)#spanning-tree vlan 200 port-priority 64查看修改后的情况sw1#show span vlan 200VLAN0200Spanning tree enabled protocol ieeeRoot ID Priority 32968Address 000b.5f2c.2080Cost 19Port 24 (FastEthernet0/24)Hello Time 2 sec Max Age 20 sec Forward Delay
29、15 secBridge ID Priority 32968 (priority 32768 sys-id-ext 200)Address 000d.6564.0280Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 300Interface Role Sts Cost Prio.Nbr Type- - - - - -Fa0/23 Altn BLK 19 128.23 P2pFa0/24 Root FWD 19 64.24 P2p发现现在 fa0/24 是根端口,它的端口优先级为 64,而 fa0/23 处于了阻塞状态
30、了配置路径开销如果想改变帧从某个交换机到根所经过的路径,需要仔细地计算当前的路径开销,然后改变目标路径上的端口开销。路径开销是通过配置 STP 路径上的各个端口开销来规定的。端口开销值小的端口被选做用于帧的转发,如果开销相同的,就选择端口号小的端口选择过程:(优先级依次递减 )路径开销(path cost)网桥 ID (Bridge ID)端口优先级(Port Priority)配置过程:1) 全局模式 configure terminal2) 进入接口模式interface 接口3) 设置 STP 端口路径开销接入接口spanning-tree cost 开销值开销值为:1-20000000
31、0中继接口spanning-tree vlan vlan 号 cost 开销值vlan 号:1-4094开销值:1-200000000spanning-tree vlan vlan 号 root second 4) 验证配置show spanning-tree interface 接口show spanning-tree vlan vlan 号show running-config案例:我们接着前面的例子继续,前面我们修改了 sw1 的 fa0/24 的端口优先级从 128 调整为 64,使其成为了转发端口,现在我们配置端口路径开销sw1(config)#interface f0/23sw1(
32、config-if)#spanning-tree vlan 200 cost 8 我们将 vlan 200 的端口开销调整为 8)sw1(config-if)#endsw1#show spanning-tree vlan 200VLAN0200Spanning tree enabled protocol ieeeRoot ID Priority 32968Address 000b.5f2c.2080Cost 8Port 23 (FastEthernet0/23) (发现端口转变为 fa0/23)Hello Time 2 sec Max Age 20 sec Forward Delay 15 s
33、ecBridge ID Priority 32968 (priority 32768 sys-id-ext 200)Address 000d.6564.0280Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 15Interface Role Sts Cost Prio.Nbr Type- - - - - -Fa0/23 Root FWD 8 128.23 P2pFa0/24 Altn BLK 19 64.24 P2p我们可以看到虽然 fa0/24 的端口优先级为 64,但因为 fa0/23 端口的路径开销小,所以选择
34、了 fa0/23配置 vlan 的优先级先要了解 mac 地址缩减(MAC address reduction)和网桥 ID 优先级(Bridge ID Priority)的概念(和网桥优先级有区别)。有些交换机支持 4096 个 VLAN,MAC 地址缩减将 STP 的 MAC 地址需求从每个 VLAN 或者每个 MISTP 实例一个减少为一台交换机一个,在 PVST+下最多支持 4096 个 VLAN,或者 16 个有唯一标识符的 MISTP 实例,而且不需要增加交换机所需的 MAC 地址的数量。启用 MAC 缩减后,存储在生成树 BPDU 中的网桥标识符就包含了被称为系统 ID 扩展的额
35、外字段,它和网桥优先级组合后,系统 ID 扩展作为 VLAN 或者 MISTP 实例的唯一标识符。未启用 MAC 地址缩减的网桥标识符-| 网桥优先级(2 字节) | MAC 地址(6 字节) |-启用 MAC 地址缩减的网桥标识符-| 网桥优先级(高 4 位) | 系统 ID 扩展(低 12 位) | MAC 地址(6 字节) |-| 网桥 ID 优先级 |-所以要注意,当启用了 MAC 地址缩减时,高 4 位用于确认网桥的优先级,这就意味着有 16 种可能的网桥 ID 优先级:0,4096,8192 ,12288,16384,20480,24576 ,28672 ,32768,36864,
36、40960,45056 ,49152,53248,57344,61440。配置过程:1) 进入全局模式 configure terminal2) 进入接口模式 interface 接口3) 配置某 vlan 的优先级spanning-tree vlan vlan 号 priority 优先级优先级取值:4096,8192,12288,16384,20480,24576 ,28672 ,32768,36864,40960,45056 ,49152,53248,57344,61440案例:我们一般还是通过 spanning-tree vlan vlan 号 root primary 命令来设置配置
37、 STP 定时器在根交换机上可以配置 hello、最大生存时间、转发延迟时间和传输延迟计数配置过程:1) 进入全局配置模式 configure terminal2) 配置 hello 时间,默认为 2 秒spanning-tree vlan vlan 号 hello 秒数秒数取值:1-10 秒,默认为 2 秒3) 配置转发延迟时间spanning-tree vlan vlan 号 forward-time 秒数秒数取值:4-30 秒,默认为 15 秒4) 配置最大生存时间spanning-tree vlan vlan 号 max-age 秒数秒数取值:6-40 秒,默认为 20 秒5) 配置传
38、输延迟计数spanning-tree transmit hold-count bpdu 数bpdu 数:是指 1 秒钟内传输 bpdu 数据包数,取值为 1-20,默认为 66) 验证配置show spanning-tree vlan vlan 号show spanning-tree detail案例:sw1(config)#spanning-tree vlan 200 hello-time 1sw1(config)#spanning-tree vlan 200 forward-time 10sw1(config)#spanning-tree vlan 200 max-age 15sw1#sh
39、ow spann vlan 200VLAN0200Spanning tree enabled protocol ieeeRoot ID Priority 24776Address 000d.6564.0280This bridge is the rootHello Time 1 sec Max Age 15 sec Forward Delay 10 secBridge ID Priority 24776 (priority 24576 sys-id-ext 200)Address 000d.6564.0280Hello Time 1 sec Max Age 15 sec Forward Del
40、ay 10 secAging Time 300Interface Role Sts Cost Prio.Nbr Type- - - - - -Fa0/23 Desg FWD 19 128.23 P2pFa0/24 Desg FWD 19 128.24 P2p案例:CCIE-LAB 题目( YY)在 SW1 上把 fa0/7 划分到 vlan14 中,并且把 SW1 指定为 VLAN14 的根交换机,且 VLAN14 的 max-age 为 16 秒,forward-delay 为 14 秒,hello 为 2 秒配置命令SW1Conf tInterface fa0/7Switchport ac
41、cess vlan 14ExitSpanning-tree vlan 14 root primarySpanning-tree vlan 14 hello-time 2Spanning-tree vlan 14 max-age 16Spanning-tree vlan 14 forward-time 14验证show spanning-tree vlan 14-CCIE-LAB 题目(V148)High-priority traffic is running on VLAN_C. Make sure, once the corresponding switch ports have been
42、activated, the time spent listening for a topology change is shortened to 5 seconds. 配置:spanning-tree vlan 22 forward 5配置负载可以根据 STP 的一些特性实现基于 STP 的负载均衡,如下图:方法一:修改端口优先级我们按照如上图,进行配置:1) 进入全局模式 config terminal2) 进入中继接口 interface 接口 13) 修改端口优先级spanning-tree vlan 8-10 port-priority 104) 进入另中继接口 interface
43、接口 25) 修改中继端口的优先级spanning-tree vlan 3-6 port-priority 10方法二:修改端口路径开销我们按照如上图,进行配置:1) 进入全局模式 config terminal2) 进入中继接口 interface 接口 13) 修改端口路径开销spanning-tree vlan 2-4 cost 304) 进入另中继接口 interface 接口 25) 修改中继端口的优先级6) spanning-tree vlan 8-10 cost 30案例:CCIE-LAB(版本 148)题目要求:Load balance between the trunks,
44、meeting the following requirements: Use trunk 1 for VLAN_BB1(VLAN 10) and VLAN_BB2(VLAN 40) traffic. Use trunk 2 for VLAN_B(VLAN 22) and VLAN_C(VLAN 62). If one of the trunks should fail, all VLAN traffic should still be send across the trunk. Restrict the traffic crossing the trunk to the VLANs used in this lab. Do NOT change the path cost. 配置:SW1 和 SW2interface f0/23switch trunk allowed vlan 10,22,40,62spanning-tree vlan 10 port-priority 64spanning-tree vlan 40 port-priority 64interface f0/24switchport trunk allowed vl