STP笔记(理论)
0.相关协议
STP(Spanning Tree Protocol)生成树协议 RSTP(Rapid Spanning Tree Protocol)快速生成树协议 MSTP(Multiple Spanning Tree Protocol)多生成树协议
1.STP介绍
STP(Spanning Tree Protocol)是一个用于局域网中消除环路的协议,它的标准是IEEE 802.1D。STP通过将部分冗余链路强制为阻塞状态,其他链路处于转发状态,将环形网络结构修剪成无环路的树形网络结构,可实现消除环路。当处于转发状态的链路不可用时,STP重新配置网络,并激活合适的备用链路状态,恢复网络连通性。
2.为什么需要STP
在一个复杂的网络环境中,由于冗余备份的需要,网络设计者都倾向于在设备之间部署多条物理链路,其中一条作主用链路,其他链路作备份,偶然或必然中都会导致环路产生。环路会产生广播风暴,最终导致整个网络资源被耗尽,网络瘫痪不可用。环路还会引起MAC地址表震荡导致MAC地址表项被破坏。
STP技术可以有效的解决环路问题,运行该协议的设备通过彼此交互信息来发现网络中的环路,将部分冗余链路强制为阻塞状态,其他链路处于转发状态。最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断增生和无限循环,避免设备由于重复接收相同的报文造成处理能力下降。 当网络中存在物理环路,会产生广播风暴,广播风暴最终会导致网络资源耗尽,交换机死机。 STP协议可以在逻辑上断开环路,防止广播风暴的产生。当线路故障时,阻塞端口被激活,恢复通信,起备份线路的作用。
3.STP包含两种含义
狭义的STP是指IEEE 802.1D中定义的STP协议。 广义的STP包括IEEE 802.1D中定义的STP、IEEE 802.1W中定义的快速生成树协议RSTP(Rapid Spanning Tree Protocol)和IEEE 802.1S中定义的多生成树协议MSTP(Multiple Spanning Tree Protocol)。 STP是基础的数据链路层的管理协议,用于二层网络的环路检测和预防。但是,STP拓扑收敛速度慢。 RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:局域网内所有的VLAN共享一棵生成树,不能按VLAN阻塞冗余链路,所有VLAN的报文都沿着一棵生成树进行转发。 MSTP通过设置VLAN映射表(即VLAN和生成树实例的对应关系表),把VLAN和生成树实例联系起来。同时它把一个交换网络划分成多个域,每个域内形成多棵生成树实例,生成树实例之间彼此独立。MSTP提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
4.STP工作过程
1.确定交换机角色 根交换机:整个交换网络中,有且只有一个; 非根交换机:剩余的其他交换机,都称之为非根交换机。 每一个非根交换机都会计算出一条去往根交换机的最短的、无环的2层数据转发路径,并且该路径最终是“转发”状态(Forwarding)。 桥ID (Bridge ID),由优先级和MAC地址组成。 优先级:默认值32768(2字节) MAC地址:交换机主板地址(6字节) 选举原则:(选择桥ID小的做为根交换机) 首先比较优先级,越小越好 其次比较MAC地址,越小越好 2.确定端口角色 根端口:每一个非根交换机上,有且只有一个,距离根交换机最近的端口。 指定端口:每一个“网段”中,有且只有一个,距离根交换机最近的端口。 非指定端口:其他所有端口,都叫做“非指定端口”。 端口ID:端口优先级 + 端口号 端口优先级:默认值128,取值范围 0 ~ 240,步长 16 3.确定端口状态 交换机端口的5中STP状态 Disabled/Down 关闭 指的是当前端口没有启动STP Listening 侦听 此时侦听的是网络中的所有BPDU,目的是为了确定交换机和端口的角色;端口在该状态停留15s; Learning 学习 该阶段主要是学习端口上收到的数据帧的源MAC地址,从而形成MAC地址表;端口在该状态停留15s; Forwarding 转发(最终状态) 该状态实现数据包(用户/应用数据包)的发送和接收。 Blocking 阻塞(最终状态) 该状态不能发送和接收数据包(用户/应用数据包),只能接收BPDU;
5.BPDU(桥协议数据单元)
STP采用的协议报文是BPDU(Bridge Protocol Data Unit),也称为配置消息。STP通过在设备间传递BPDU报文来确定网络的拓扑结构,并完成生成树的计算。BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00(使用组播发送BPDU)。 STP协议的BPDU报文分为以下两种: --配置BPDU(Configuration BPDU):用来进行生成树计算和维护生成树拓扑的报文。 --TCN BPDU(Topology Change Notification BPDU):拓扑变化通知BPDU,是在网络拓扑发生变化时,用来通知相关设备的报文。 STP: 只有当STP无环转发路径树(拓扑)发生变化的时候,才会产生并发送;并且是感知到该变化的交换机,产生TCN BPDU,只发送给根交换机,然后再由根交换机转发给其他的所有非根交换机。 RSTP: 发现拓扑变更的交换机,会产生TCN BPDU,直接发送给与自己相连的其他所有交换机。
配置BPDU报文字段
字段名 | 字段名 | 字节 |
---|---|---|
Protocol Identifier | 协议ID | 2 |
Protocol Version Identifier | 协议版本号 | 1 |
BPDU Type | 报文类型 | 1 |
Flags | 标记域 | 1 |
Root Identifier | 根网桥ID | 8 |
Root Path Cost | 根路径成本 | 4 |
Bridge Identifier | 发送网桥ID | 8 |
Port Identifier | 端口ID | 2 |
Message Age | 报文老化时间 | 2 |
Max Age | 最大老化时间 | 2 |
Hello Time | 访问时间 | 2 |
Forward Delay | 转发延迟 | 2 |
BPDU重要字段 其中,Root Identifier、Root Path Cost、Bridge Identifier、Port Identifier字段是配置BPDU报文的核心内容:
Root Identifier:当前根桥的BID。 Root Path Cost:根路径开销。路径开销(Path Cost)是一个端口变量,是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。根路径开销就是某端口到根桥所经过的各个桥上的各端口路径开销的累加值。 Bridge Identifier:本交换设备的BID。 Port Identifier:发送该BPDU的端口ID。PID由两部分构成的,高4位是端口优先级,低12位是端口号。 这四个字段构成了消息优先级向量,一般用{ 根桥ID,根路径开销,发送设备BID,发送端口PID }形式表示。当一个网桥收到配置BPDU报文时,只有当发送者的BID或端口的PID两个字段中至少有一个和本桥接收端口不同,BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。
配置BPDU
网桥之间通过交互配置BPDU来进行根桥的选举及端口角色的确定,配置BPDU在以下3种情况下会产生:
只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。 当根端口收到配置BPDU时,如果优先级比自己的配置BPDU高,则会根据收到的配置BPDU中携带的信息更新自己STP端口存储的配置BPDU信息并从指定接口向下游发送,否则会丢弃该配置BPDU。 当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。 TCN BPDU
TCN BPDU的结构与配置BPDU基本相同,但Payload部分只有Protocol Identifier(协议号)、Protocol Version Identifier(协议版本)和BPDU Type(BPDU类型)。类型字段是固定值0x80,长度只有4个字节。
TCN BPDU是指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根节点。TCN BPDU在如下两种情况下会产生:
端口状态变为Forwarding状态。 指定端口收到TCN BPDU,复制TCN BPDU并发往根桥。
6.STP的基本实现过程如下
选择根网桥:网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换BPDU消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。根桥上的所有端口都是转发状态。 选择根端口:非根桥设备将接收最优配置消息的那个端口定为根端口,根端口也是处于转发状态。 选择指定端口:设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息,然后将计算出的配置消息与角色待定端口自己的配置消息进行比较。 如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送;
如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞。该端口将不再转发数据,且只接收不发送配置消息。
一旦根桥、根端口和指定端口选举成功,整个树形拓扑就建立完毕了。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根、非指定端口都处于阻塞(Blocking)状态,它们只接收STP协议报文而不转发用户流量。
7.STP计时器
hello: 交换机周期性发送BPDU的时间间隔,周期为2s; forward-delay:转发延迟,默认时间为 15s; max-age:最大老化时间,默认20s;