自上世纪90年代初期以来,运行生成树协议(STP)的以太网设备已部署在许多网络中。许多企业对STP习以为常,并没有按照行业***实践来配置它。STP错误比比皆是;在过去的15年间,我们亲眼目睹了同样的错误一犯再犯。就这样一款得到公认的协议而言,我们居然还没有摆脱这些类型的STP配置错误,这未免让人惊讶。本文就介绍了几种最常见的STP错误,并给出了解决办法。
IEEE 802.1D生成树协议(STP)由Radia Pearlman在1985年发明,当时他还供职于数字设备公司(DEC)。STP是一种第2层协议,在网桥之间运行,旨在帮助建立无环路(loop-free)的网络拓扑结构。网桥协议数据单元(BPDU)是以太网交换机(实际上就是多端口网桥)之间发送的数据包,负责搭建根网桥(root bridge)、计算通向根的***路径以及阻止形成环路的任何端口。因而生成的树(根在顶端)覆盖局域网中的所有网桥,生成树这个名称由此得来。如果你想了解STP,不妨阅读Radia所写的小诗《Algorhyme》(http://www.youtube.com/watch?v=iE_AbM8ZykI)。
生成树在以默认的配置设置防止环路方面很有效。因而,许多人忘了调整任何参数,仅仅接受默认设置了事。这导致好多人忽视了网络设计中的STP;多年后,许多企业组织惊讶地发现存储的网络问题居然与生成树有关。有许多方法可以优化STP,但是如果STP没有配置好,那么网络无法得益于这些新的功能特性。
生成树的问题
这张图显示了通常错误配置的生成树环境,表明了本文探讨的许多常见错误。
1. 没有配置根网桥。
许多企业组织对生成树习以为常,仅仅接受默认的配置设置了事。这使得网络环境中的所有交换机都使用32678这一默认的根网桥优先级值。如果所有交换机都有同一个根网桥优先级,那么MAC地址***的那只交换机将被建立为根网桥。许多网络并没有配置成单只交换机有一个较低的根网桥优先级,这会迫使那只核心交换机被建立为任何或所有虚拟局域网(VLAN)的STP根。在这种情况下,MAC地址偏低的小型接入层交换机就有可能是STP根。这种情况势必会增加一些性能开销,导致会聚时间较长(由于根网桥重新建立)。
如上图所示,作为STP根的交换机实际上是核心交换机2,因为它拥有的MAC地址恰好低于核心交换机1。
一条***实践就是为“主”(核心)交换机配置较低的STP优先级,那样一只交换机将是根网桥,其他任何核心交换机会有高一点的优先级值;万一主核心网桥失效,它们就会自动接过重任。万一出现网桥故障,在交换机上配置“不同层次”的STP优先级将查明哪只交换机应该是根网桥。这样一来,STP网络运行起来就更具有确定性了。
在核心思科交换机上,你应该用这个命令配置主根交换机:
Core-Sw1(config)# spanning-tree vlan 1-4096 root primary
在核心思科交换机上,你应该用这个命令配置次根交换机:
Core-Sw2(config)# spanning-tree vlan 1-4096 root secondary
这两个命令的最终效果会将主交换机端口的网桥优先级设为8192,将次交换机的根网桥优先级设为16384。
2. 使用IEEE 802.1D,而未使用Rapid-STP。
典型的IEEE 802.1D协议有下列默认计时器:15秒用于侦听,15秒用于学习,20秒用于最长生存时间超时。生成树中的所有交换机都应该认同这些计时器,不鼓励你修改这些计时器。这些较旧的计时器对一二十年前的网络来说也许够用了,而如今,这些30秒至50秒的会聚时间实在太慢了。
如今,许多交换机能够支持快速生成树协议(IEEE 802.1w),可是很少有网络管理员启用该功能。快速生成树协议(RSTP)大大缩短了会聚时间,其秘诀在于使用端口角色,使用通过指定端口在网桥之间发送消息这种方法,计算备用路径,以及使用更快速的计时器。因而,如果可以使用RSTP,企业组织应该尽量使用。如果贵企业仍拥有无法使用RSTP的交换机,也别担心:针对通向老式STP交换机的那些接口,RSTP交换机会切回到传统的802.1D操作方式。
3. 阻塞的上行链路。
生成树的任务就是防止环路形成。为此,它学习了解通向根的次***路径,让这些不太理想的链路处于阻塞模式。如果交换机之间有多条并行路径,那么其中一条路径将被选择进入阻塞模式,防止两只交换机之间出现环路。这样一来,拥有多条上行链路只适用于主链路故障切换,而不是为这条路径提供更高的带宽。
在上图中,你可以看到交换机D的这种情况。通向交换机2的链路是通向根网桥的***路径,而通向交换机1的次***路径处于STP阻塞状态。因此,只有一条链路的带宽可供上行通信使用。
我们希望能够利用这两条上行链路来转发流量、增加带宽,那样我们可以使用某种链路聚合技术,比如端口信道/以太网信道(LACP (IEEE 802.3ad),PAgP),或者某种多机箱端口信道(MC-LAG IEEE 802.3AX/AY),或者使用拥有虚拟端口信道(vPC)的思科Nexus交换机。
另一种选择就是使用可堆叠交换机,并配置每个上行链路端口,连接至堆叠交换机中的不同交换机。由于堆叠交换机可以配置成它就是一只交换机,那样可以使用端口信道;从生成树的角度来看可以将两条链路当成一条链路,这两条链路都可以用来转发流量。其他选择能够取得同样这个效果,比如思科的6500虚拟交换系统(VSS)。
4.超过STP的***规模。
我们都生活在这样的城市:缺少统一协调的城市规划,道路总是拥挤不堪、无法顺畅通行。同样,网络常常像白杨树那样生长。网络当中出现新增的设备,但是网络很少重新设计架构,除非购置了一套全新的网络。随着新的交换机添加到局域网环境中,生成树不断随之变化。
一些大型网络环境支持的应用程序依赖整个网络上的第2层连接,这类网络环境应该意识到这种生长。要是网络拓扑超过STP的***规格,这些企业会遇到问题。802.1D规范建议,生成树的网桥跳数(bridge hop)不超过7段。如果有许多“雏菊链式”交换机,很可能出现这种情况。参阅上图,就会发现连一种简单的网络拓扑也会超过生成树的这一***规模。
像医院和大学校园这些组织的网络拥有庞大的局域网环境,跨整个网络延伸单一的VLAN。它们应该认识到其生成树的规模。这些组织应该将局域网交换环境的情况记入文档,并且寻找过于频繁的拓扑变更通知(TCN),从而定期检查生成树的规模。#p#
5. VTP域。
企业组织面临的困难常常牵涉VLAN隧道协议(VTP)以及它与STP有怎样的关系。VTP这种机制可以帮助在单一局域网交换环境中建立和维护VLAN。VTP服务器可以建立新的VLAN,然后自动为VTP客户机配置那些新的VLAN。随后,那些VTP客户端交换机上的端口被分配到这个新的VLAN。VTP有助于让VLAN编号在局域网交换环境中保持一致性。很早以来就存在与VTP有关的问题,许多人建议将VTP配置成透明模式。
一些企业组织抽时间来配置VTP域,并配置VTP服务器和客户机。一些企业组织还在所有交换机上使用同一个VTP域名,即便在所有地方都是如此。如果使用第2层城域以太网服务,并将其配置成802.1Q干线,这就会开始引起问题。
上图描述了这个问题。该例子中的交换机都有同样的VTP域名。数据中心与灾难恢复站点之间的连接使用了802.1Q干线,但是只允许三个VLAN接入这条干线。因此,灾难恢复站点的交换机了解所有的VLAN,使用生成树来确定城域以太网链路是VLAN 10、20和30通向根的路径。然而,灾难恢复站点的交换机认为,它是该干线上未使用的其他VLAN的STP根。这可能会引起问题,因为现在环境有两只交换机认为自己是VLAN 40、50和60的STP根。
使用VTP的企业应该慎重使用,知道哪些交换机是VTP服务器或客户机,使用VTP密码,删除不再提供服务的交换机上的配置和VTP信息,并且在不需要VTP的场合下考虑禁用VTP。
6. STP与HSRP不一致。
许多企业组织拥有冗余核心交换机,它们还为所连接局域网上的计算机充当第3层默认网关。像HSRP、VRRP、GLBP及其他这些首跳冗余协议为只配置一个单一默认网关IP地址的主机提供了默认网关冗余机制。
如果HSRP活动默认网关不是为该VLAN充当STP根的同一只第2层/第3层交换机,问题就会随之而来。上图表示,交换机1是HSRP活动路由器,但它不是任何VLAN的STP根。交换机2是STP根,但它配置成HSRP备用路由器。这就形成了非***流量路径,可能会导致核心交换机间的干线上出现更严重的拥塞状况。
使用首跳冗余协议的企业应该确保,活动默认网关与STP根相一致。
7. 没有控制STP。
由于那么多的企业组织只是接受交换机厂商在生成树方面的默认设置,它们并没有***化控制STP。企业可能没有配置生成树,以防止无意中添加的未授权交换机形成环路。许多企业使用思科的PortFast接口设置,帮助为连接到我们知道不运行STP的计算机的端口迅速调出交换机端口。激活端口之前,让端口连接至等待侦听和学习状态的计算机毫无意义。
结合使用PortFast和BPDU-Guard是***实践,那样如果通过该接口收到BPDU,它可以防御性地关闭端口。
激活这项功能的思科IOS全局命令如下:
Core-Sw1(config)# spanning-tree portfast edge bpduguard
激活这项功能的思科IOS接口配置命令如下:
Core-Sw1(config-if)# spanning-tree bpduguard enable
如果交换机已配置好了任何端口信道,那么配置以太网信道保护机制(EtherChannel guard)是个好主意。
激活这项功能的思科IOS全局命令如下:
Core-Sw1(config)# spanning-tree etherchannel guard misconfig
企业还应该在连接至服务器的所有接入交换机端口上使用根保护机制(Root Guard)。
激活这项功能的思科IOS接口配置命令如下:
Core-Sw1(config-if)# spanning-tree guard root
有时候,刀片服务器嵌入了以太网交换机,这类服务器也应该考虑到STP设计和配置当中。应该将这些交换机的配置与其他任何STP设备一视同仁,其配置应该补充网络环境中的其他交换机。
8. 不一致的生成树度量指标。
在过去,生成树使用16位值作为网桥使用的链路成本,以计算通向根的最短路径。若使用这些较老的16位度量指标,10Mbps链路的成本为100,1Gbps链路的成本为4。然而,这些度量指标已跟不上链路速度的需要,现在有了32位长路径成本。若使用较新的32位度量指标,1Gbps链路的成本为20000,10Gbps链路的成本为2000,而100Gbps链路的成本为200。
想在思科交换机上启用长路径成本,只要输入这个全局配置命令。
Core-Sw1(config)# spanning-tree pathcost method long
如果网络里面既有使用16位路径成本值的交换机,又有使用32位路径成本值的交换机,就会出现问题。因此,配置方面做到一致很重要,力求让你的所有网络设备都使用32位长路径成本这一较新的度量指标。
9. 禁用生成树。
我们偶尔会碰到这种网络:生成树协议故意被禁用。也许是网络管理员觉得,不需要STP,因为网络没有任何的线缆环路。也许是网络管理员觉得,禁用STP可以缩短第3层会聚时间。然而,我本人亲眼目睹过这一幕:有人擅自添加了一条线缆后,STP被禁用的网络出现了全面瘫痪。这导致了“致命的特大数据包风暴”,原因是数据包在环路中不断转发。不像第3层环路:IP数据包的TTL值会减小,直至为零,随后数据包被丢弃,第2层环路则允许数据包不断转发,而不减小TTL。
让STP处于启用状态是个***实践,即便可能不需要它。其道理在于,这是一种成本低廉的保险机制,可以防止环路。在现代交换机上运行STP并不会带来任何明显的开销。每秒只有几个配置BPDU并不会大大增加带宽使用量。STP瘫痪的风险实在太高了。因此,禁用了STP的企业应该重新启用它。
其他常见问题
企业在局域网交换机方面还会常犯另外几个配置错误。许多企业使用VLAN编号1,这给思科交换机的安全带来了一些影响。如果VLAN 1用作思科交换机上的“原生VLAN”,问题也会出现。思科交换机上的其他常见问题与网络管理员没有标记原生VLAN有关。还有无数的交换机间链路没有经过配置,以限制干线上允许VLAN。
想了解如何保护局域网交换机,不妨参阅思科出版社出版、Eric Vyncke和Christopher Paggen合著的《局域网交换机安全:黑客对你的交换机知多少?》一书(http://www.ciscopress.com/store/lan-switch-security-what-hackers-know-about-your-switches-9781587052569)。
结束语
我们在评估网络状况时,经常会在客户的网络中遇到这些问题。有时候,上述九大问题会全部集中出现在一个环境中。如果企业组织纠正这些生成树问题,可以改善应用程序性能、缩短会聚时间、提高弹性以及减少网络停运时间。每家企业都应该好好阅读本文,确定本企业的设备有没有存在这些错误。审查网络、查找这几类问题,并且主动采取措施来解决这些问题,这很重要。STP方面的这些改进有望提升网络的稳定性、性能、弹性以及会聚速度。
英文:9 Common Spanning Tree Mistakes