在设计网络时,工程师总喜欢在核心交换机之间加冗余链路——主链路断了备用链路自动顶上,这样网络不会因为一根光纤坏了就瘫痪。但二层交换网络(交换机之间用网线或光纤连接的网络)有个头疼的问题:如果两台交换机之间同时接了两根线,就形成了"环路",广播包和未知单播包会在环路里无限转发,最终把整个网络的带宽占满,这就是臭名昭著的"广播风暴"。生成树协议(Spanning Tree Protocol,简称STP)就是专门解决这个问题的,IEEE 802.1D是它的标准版本,今天就好好聊聊STP的工作原理、端口角色,以及为什么企业网络里离不开它。
STP的核心思想很简单:把交换网络的物理拓扑自动变成一个逻辑上的"树"结构——没有任何环路的树,所有交换机之间有且只有一条路径可达。如果树里的某条路径断了,STP能自动把原来被阻塞的冗余路径"解封",恢复网络连通。这个过程完全自动,不需要工程师手动配置。那STP怎么知道哪台交换机是"根"、哪个端口该阻塞呢?靠的是一种叫BPDU(桥协议数据单元)的特殊数据包。交换机启动后会互相交换BPDU,BPDU里包含交换机的"桥ID"(Bridge ID,由优先级加MAC地址组成)和"根路径开销"(RPC,到根交换机的累计开销)。通过交换这些信息,所有交换机就能算出网络里的根是谁、自己离根的路径有几条、哪条是最优路径。
理解STP最重要的是搞清楚三个概念:根桥(Root Bridge)、根端口(Root Port)、指定端口(Designated Port)。根桥是整个网络的"老大"——桥ID最小的那台交换机就是根桥,整个网络只会有一个根桥。根端口是每台非根交换机上离根桥最近的那个端口——"最近"指的是根路径开销最小,如果两台交换机同时接根桥,那端口的对端MAC地址最小的那个成为根端口。指定端口是每条物理链路上唯一负责转发数据的端口——根桥的所有端口都是指定端口;非根桥上,除了根端口,其他端口如果是自己所在链路的指定者,也可以成为指定端口。既不是根端口也不是指定端口的,就是阻塞端口,不转发用户数据(只监听BPDU),这就是"树"上被剪掉的冗余路径。
STP的工作过程分三个阶段。第一个阶段是"选举根桥":网络里所有交换机都认为自己是根桥,互相发BPDU,桥ID小的胜出,最后只有一台被大家公认为根桥。第二个阶段是"选举根端口和指定端口":每台非根交换机选出自己的根端口,每条链路选出一个指定端口,剩下的端口进入阻塞状态。第三个阶段是"拓扑稳定":整个网络变成了一个无环的树,所有端口都处于转发或阻塞状态,不再有BPDU的频繁交换。但网络拓扑是会变化的——某根线断了、某台交换机挂了,STP需要重新计算。但传统的STP(802.1D)在拓扑变化时收敛很慢,一般要30到50秒,这个等待时间在生产网络里是不可接受的。所以后来IEEE推出了RSTP(快速生成树,802.1W),收敛时间缩短到1到2秒,现在生产网络里用的基本都是RSTP而不是原始的STP了。
实际网络设计中关于STP的几个实战经验。第一,根桥的位置很重要——根桥应该放在网络的核心位置,比如核心交换机,而不是边缘交换机,这样整个生成树的路径最短、开销最小。不要让STP自己选举根桥,要在交换机上手动配置根桥优先级(把核心交换机的优先级设得低一点,比如4096,默认是32768)。第二,接入层交换机上的端口一般不需要参与生成树计算——如果某个端口只接了一台PC机(不是交换机),可以把它设为PortFast模式,跳过监听和学习阶段直接进入转发,PC开机就能上网。但如果PortFast端口接了交换机,就会产生环路,所以很多交换机默认会在PortFast端口收到BPDU时自动关闭PortFast。第三,STP不是万能的——如果网络里有多个VLAN,每个VLAN应该有自己的生成树(PVSTP,每VLAN生成树),这样可以让不同VLAN阻塞不同的冗余链路,从而实现负载均衡。
最后说几个初学者容易搞混的概念。STP是二层协议,跟三层路由协议(OSPF、RIP)没关系,它只管交换机之间的二层路径。生成树是"单向阻塞"——一条链路的两端端口,只有一个会被阻塞,另一个继续转发,这样保证整个拓扑是树而不是有环的图。如果有3台交换机两两相连(三角形拓扑),STP会阻塞其中一条链路的一个端口,把三角形变成直线。总的来说,STP是交换网络的基础协议,虽然现在有更先进的二层技术(比如TRILL、SPB),但绝大多数企业网络里,STP/RSTP依然是二层防环的主力工具,学会它是网络工程师的必修课。
上一篇:Snowflake财报爆了:AI开始给数据云重新定价
下一篇:没有了