2、生成树协议(STP)原理:STP的基本概念、BPDU报文结构、根桥选举过程
各位好,咱们今天聊聊生成树协议,也就是STP。说实话,这玩意儿是网络工程师的必修课,也是我当年入行时觉得最绕的一个协议。但搞懂了它,你就能明白交换机是怎么在物理环路上“拆桥”的。
2.1 STP的基本概念
先问个问题:为什么要有STP?
你想想看,在二层网络中,如果交换机之间用两条线连起来,形成了物理环路,那广播帧就会在环路里无限转发,最终导致广播风暴,整个网络瘫痪。我刚开始做项目时,就亲眼见过一个同事因为误接了一根网线,导致整栋楼的网络卡死。嗯,那场面,真是“一锅粥”。
STP的核心思想很简单:逻辑上切断冗余链路,只保留一条最优路径。当主链路挂了,再自动激活备份链路。说白了,就是“留一手,但平时不用”。
STP的三大核心功能:
- 消除环路:通过阻塞某些端口,打破物理环路。
- 链路冗余:当主链路故障时,自动启用备份链路。
- 自动收敛:网络拓扑变化时,重新计算生成树。
我个人习惯把STP比作一个“选举系统”。所有交换机先选出一个老大(根桥),然后其他交换机根据距离老大的远近,决定自己的端口角色。端口角色主要有三种:
- 根端口(RP):非根桥上,离根桥最近的端口。
- 指定端口(DP):每条链路上,离根桥最近的端口。
- 阻塞端口(AP):既不是RP也不是DP的端口,逻辑上被阻塞。
这里有个避坑指南:我曾经遇到过有人把“阻塞端口”理解为“物理断开”。其实不是的,端口只是逻辑上不转发数据帧,但BPDU报文照收不误。它一直在“监听”网络状态,随时准备上岗。
2.2 BPDU报文结构
STP能正常工作,全靠一种叫BPDU(Bridge Protocol Data Unit)的报文在交换机之间“通风报信”。BPDU每隔2秒发一次,就像心跳一样。
BPDU的报文结构,我建议你记住几个关键字段。其他的,用到时再查表就行。
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 协议标识 | 2 | 固定为0x0000,表示STP |
| 协议版本 | 1 | STP为0,RSTP为2 |
| BPDU类型 | 1 | 0x00表示配置BPDU,0x80表示TCN BPDU |
| 根桥ID | 8 | 优先级(2字节)+ MAC地址(6字节) |
| 根路径开销 | 4 | 到根桥的累计路径开销 |
| 发送桥ID | 8 | 发送该BPDU的交换机标识 |
| 端口ID | 2 | 发送端口标识(优先级+端口号) |
| 消息老化时间 | 2 | 默认20秒 |
| 最大老化时间 | 2 | 默认20秒 |
| Hello时间 | 2 | 默认2秒 |
| 转发延迟 | 2 | 默认15秒 |
你看,BPDU里最重要的就是根桥ID和根路径开销。这两个字段决定了谁当老大,以及你离老大有多远。
小技巧:抓包时,你可以用Wireshark过滤BPDU报文。过滤表达式是 stp 或 bpdu。我习惯在排查环路问题时,先抓个BPDU看看根桥是谁,心里就有底了。
2.3 根桥选举过程
根桥选举,说白了就是比谁“更牛”。怎么比?看两个东西:优先级和MAC地址。
选举规则很简单:
- 先比桥优先级(Bridge Priority),数值越小越牛。默认是32768。
- 如果优先级一样,再比MAC地址,MAC地址越小越牛。
举个例子:
交换机A:优先级 32768,MAC 00-11-22-33-44-01
交换机B:优先级 32768,MAC 00-11-22-33-44-02
交换机C:优先级 4096, MAC 00-11-22-33-44-03
谁会是根桥?
答案是交换机C。因为它的优先级是4096,比32768小。虽然A和B的MAC地址更小,但优先级优先,所以C胜出。
选举过程是这样的:
- 一开始,每台交换机都以为自己是根桥。它们会发送BPDU,里面填上自己的桥ID。
- 当交换机收到邻居的BPDU时,会比较对方的根桥ID和自己的根桥ID。
- 如果对方的根桥ID更优(优先级更低或MAC更小),就更新自己的根桥信息,并转发这个更优的BPDU。
- 这个过程会一直扩散,直到所有交换机都认同同一个根桥。
我记得有一次在数据中心做割接,新加了一台交换机,结果它把自己的优先级设成了0(最低)。好家伙,它直接抢了根桥的位置,导致整个网络的流量路径全变了。嗯,从那以后,我每次上线新设备,都会先检查一下STP优先级配置。
注意:根桥选举不是一劳永逸的。如果根桥挂了,或者有更优的交换机加入,会触发重新选举。这个过程需要30-50秒(STP收敛时间),所以生产环境中建议使用RSTP(快速生成树协议),收敛时间能缩短到1秒以内。
最后总结一下:STP通过BPDU报文交换信息,选举出一个根桥,然后其他交换机根据根桥的位置,决定端口角色,最终形成一棵无环的逻辑树。你想想看,这就像在一个迷宫里,大家先选出一个领路人,然后所有人跟着领路人的方向走,自然就不会绕圈子了。