生成树协议(STP,Spanning Tree Protocol)是一种网络协议,旨在防止以太网网络中的环路。网络环路可能导致广播风暴,从而使网络瘫痪。STP通过为网络创建一个无环的逻辑拓扑来解决这个问题。以下是STP的关键概念和工作原理:
STP的基本概念
- 根桥(Root Bridge):
STP算法通过选择一个网络中的根桥(Root Bridge)作为拓扑结构的逻辑中心。根桥是具有最低桥ID的交换机。桥ID由桥优先级和交换机的MAC地址组合而成。 - 路径成本(Path Cost):
路径成本用于确定从交换机到达根桥的最佳路径。STP选择路径成本最低的路径作为网络中的活动路径。 - 端口角色:
- 根端口(Root Port): 每个非根桥都有一个指向根桥的端口,称为根端口。
- 指定端口(Designated Port): 每个网络段都有一个负责传输流量的端口,称为指定端口。
- 非指定端口(Non-designated Port): 关闭以防止环路的端口。
- 端口状态:
- 阻塞(Blocking): 不转发数据帧,只接收BPDU(桥协议数据单元)信息。
- 侦听(Listening): 准备好转发数据帧,并删除旧的MAC地址表项。
- 学习(Learning): 学习MAC地址并更新MAC地址表。
- 转发(Forwarding): 转发数据帧。
- 禁用(Disabled): 端口未参与STP操作。
- BPDU结构:
桥协议数据单元(BPDU,Bridge Protocol Data Unit)是生成树协议(STP)用于交换信息以防止网络环路的关键数据包。BPDU包含关于网络拓扑的信息,帮助交换机决定生成树的结构。
BPDU数据包有两种类型:配置BPDU和TCN(Topology Change Notification)BPDU。配置BPDU用于交换生成树信息,而TCN BPDU用于通知网络拓扑的变化。
配置BPDU字段如下:
- 协议标识符(Protocol Identifier):
- 长度:2字节
- 描述:用于标识BPDU属于哪个协议。STP的协议标识符通常为0x0000。
- 版本(Version):
- 长度:1字节
- 描述:指示BPDU的版本号。STP的版本号通常为0。
- BPDU类型(BPDU Type):
- 长度:1字节
- 描述:指示BPDU的类型,配置BPDU的类型值为0x00。
- 标志(Flags):
- 长度:1字节
- 描述:包含标志位,指示拓扑变化(TC,Topology Change)和拓扑变化确认(TCA,Topology Change Acknowledgment)等信息。
- 根桥ID(Root Identifier):
- 长度:8字节
- 描述:包含根桥的优先级和MAC地址。用于标识网络中当前的根桥。
- 根路径成本(Root Path Cost):
- 长度:4字节
- 描述:从当前交换机到根桥的路径成本。用于计算到根桥的最佳路径。
- 发送桥ID(Bridge Identifier):
- 长度:8字节
- 描述:包含发送BPDU的桥的优先级和MAC地址。
- 端口ID(Port Identifier):
- 长度:2字节
- 描述:发送BPDU的端口ID,用于标识交换机上的端口。
- 消息年龄(Message Age):
- 长度:2字节
- 描述:BPDU在网络中存在的时间,用于防止旧的BPDU在网络中循环。
- 最大老化时间(Max Age):
- 长度:2字节
- 描述:BPDU在网络中保留的最长时间。
- 端口间隔时间(Hello Time):
- 长度:2字节
- 描述:交换机发送BPDU的时间间隔,默认值通常为2秒。
- 转发延迟(Forward Delay):
- 长度:2字节
- 描述:端口从侦听状态到学习状态以及从学习状态到转发状态的等待时间。
TCN BPDU字段
TCN BPDU非常简单,仅包含协议标识符、版本和BPDU类型三个字段,用于通知网络中的拓扑变化。
BPDU的作用
- 选择根桥: 通过交换BPDU,各交换机决定网络中的根桥。
- 防止环路: BPDU包含的信息帮助交换机选择适当的端口状态(阻塞、转发等),防止环路。
- 拓扑变化通知: 当网络拓扑发生变化时,通过TCN BPDU通知其他交换机,促使网络重新计算生成树。
STP的工作原理
- 选择根桥:
所有交换机通过交换BPDU来选举出网络中的根桥。根桥是具有最低桥ID的交换机。 - 确定根端口:
每个非根桥通过计算到根桥的路径成本,选择路径成本最低的端口作为根端口。 - 确定指定端口:
每个网络段选择一个具有最低路径成本的端口作为指定端口。 - 阻塞非指定端口:
STP将其他可能导致环路的端口置于阻塞状态,以防止网络中产生环路。