![cover](https://img-blog.csdnimg.cn/41702141a8344252877f6b36d9e1433d.png)
【网络协议详解】——STP技术(学习笔记)
SWA收到SWB发送的拓扑改变通知BPDU之后,每隔2秒向网络中发送拓扑改变配置BPDU(设置了一个Flag位的配置BPDU),使网络中所有的交换机都把MAC地址表的生存期修改为Forward Delay(15秒),经过一段时间(Max Age加上Forward Delay,默认为35秒)之后,SWA(根交换机)在自己发送的配置BPDU中,清除Flag位,表示网络拓扑已经稳定,网络中的交换机恢复M
🕒 1. STP技术工作原理
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在提高网络可靠性的同时又避免环路带来的各种问题。
生成树算法STA(Spanning Tree Algorithm)是生成树协议STP的核心。它的实现目标是:在包含有物理环路的网络中,构建出一个能够连通全网各节点的树型无环逻辑拓扑。
STP协议由IEEE 802.1D 定义,描述时使用的是“网桥”,由于“交换机”的本质是“多端口网桥”,接下来都使用“网桥”来描述。
生成树算法的三个步骤:
- “选举”根交换机
- “选举”根端口
- “选举”指定端口并阻塞备用端口
注:这里所谓的“选举”,是通过网络中各交换机相互发送生成树协议专用的数据帧来实现的,这些交换信息的报文称为网桥协议数据单元,简称BPDU
。
选举根交换机:
- 根交换机的选举条件:网桥ID(BID)最小者当选。
- 网桥ID(BID)由以下两部分构成:
- 优先级(2字节)
- 范围:0 - 61440(也有说法是65535)
- 步长:4096
- 默认值:32768
- 交换机的基本MAC地址(6字节)
- 优先级(2字节)
- 网桥ID (BID)的比较方法:
- 优先级取值越小,则网桥ID(BID)就越小。
- 若优先级相同,则比较MAC地址,从MAC地址的左侧开始依次比较,数值小的,则网桥ID(BID)就小。
选举根端口:
- 在每一个非根交换机上选出一个根端口RP(Root Port),并且只能是一个。
- 根端口RP用于接收根交换机发来的BPDU,也用来转发普通流量。
- 根端口RP的选举条件:
- BPDU接收端口到根交换机的路径成本(端口开销)最小。
链路带宽 成本值 4 M b / s 250 10 M b / s 100 16 M b / s 62 100 M b / s 19 1 G b / s 4 10 G b / s 2 \begin{array}{|c|c|} \hline {\text { 链路带宽 }} & \text { 成本值 } \\ \hline 4 Mb/s & 250 \\ \hline 10 Mb/s & 100 \\ \hline 16 Mb/s & 62 \\ \hline 100 Mb/s & 19 \\ \hline 1 Gb/s & 4 \\ \hline 10 Gb/s & 2 \\ \hline \end{array} 链路带宽 4Mb/s10Mb/s16Mb/s100Mb/s1Gb/s10Gb/s 成本值 250100621942 - 对端的网桥ID(BID)最小。
- 对端的端口ID(PID)最小。
- 优先级范围(1 - 4bit)
- 范围:0 - 240
- 步长:16
- 默认值:128
- 端口号(5 - 16bit)
- 优先级范围(1 - 4bit)
- BPDU接收端口到根交换机的路径成本(端口开销)最小。
选举指定端口(Designated Port)并阻塞备用端口(预备端口):
- 在每一个网段上选出一个指定端口DP ( Designated Port)并且只能是一个。
- 指定端口DP用于转发根交换机发来的BPDU,也用来转发普通流量。
- 指定端口DP的选举条件:
- 根交换机的所有端都是指定端口DP。
- 根端口的对端端口一定是指定端口DP。
- BPDU转发端口到根交换机的路径成本最小。
- 本端的网桥ID(BID)最小。
- 本端的端口ID(PID)最小。
- 剩余端口成为备用端口AP(Alternate Port),将它们阻塞。
端口状态描述:
端口状态 | 描 述 |
---|---|
Disabled(端口没有启用) | 此状态下端口不转发数据帧,不学习MAC地址表,不参与生成树计算。 |
Listening(侦听状态) | 此状态下端口不转发数据帧,不学习MAC地址表,只参与生成树计算,接收并发送BPDU。 |
Blocking(阻塞状态) | 此状态下端口不转发数据帧,不学习MAC地址表,此状态下端口接收并处理BPDU,但是不向外发送BPDU。 |
Learning(学习状态) | 此状态下端口不转发数据帧,但是学习MAC地址表,参与计算生成树,接收并发送BPDU。 |
Forwarding(转发状态) | 此状态下端口正常转发数据帧,学习MAC地址表,参与计算生成树,接收并发送BPDU。 |
- 当端口正常启用之后,端口首先进入Listening状态,开始生成树的计算过程。
- 如果经过计算,端口角色需要设置为预备端口(Alternate Port),则端口状态立即进入Blocking;
- 如果经过计算,端口角色需要设置为根端口(Root Port)或指定端口(Designated Port),则端口状态在等待Forward Delay之后从Listening状态进入Learning状态,然后继续等待Forward Delay之后,从Learning状态进入Forwarding状态,正常转发数据帧。
🕒 2. BPDU报文
STP生成树的计算,根端口、指定端口的选举,都是借助BPDU(Configuration Bridge Protocol Data Unit)报文进行信息的传递和交换的。
BPDU报文有两类:配置BPDU和TCN BPDU
🕘 2.1 配置BPDU
- 配置BPDU使用标准LLC格式封装在以太网数据帧中。
- 配置BPDU只在指定端口(Designated Port)上发送。
DMAC
:目的MAC地址。发送配置BPDU的数据帧使用保留的组MAC地址01-80-C2-00-00-00,此地址标识所有交换机,但是不能被交换机转发,也即只在本地链路有效。LLC Header
:目的服务访问点(Destination Service Access Point, DSAP)和源服务访问点(Source Service Access Point, SSAP)的值都设为二进制01000010。Ctrl字段的值设为3。
- 当STP初始计算选举根交换机时,各个交换机主动生成并发送配置BPDU。
- 选举结束后,只有根交换机才能主动生成并发送配置BPDU
- 非根交换机只有在自己的根端口收到配置BPDU报文才能根据收到的报文生成配置BPDU从指定端口发送。
配置内容:
报文标识:
参数 | 比特数 | 描 述 |
---|---|---|
Protocol Identifier (协议标识) | 16比特 | 取值0x0000 |
Protocol Version Identifier (协议版本标识) | 8比特 | 取值0x00 |
BPDU Type (BPDU类型) | 8比特 | 配置BPDU报文取值0x00 拓扑改变通知BPDU报文取值0x80 |
Flags (标志) | 8比特 | 配置BPDU报文取值0x00 拓扑改变配置BPDU报文取值0x01 拓扑改变确认配置BPDU报文取值0x80 |
STP计算:
参数 | 比特数 | 描 述 |
---|---|---|
Root Identifier | 64比特 | 当前根交换机的桥ID |
Root Path Cost | 32比特 | 发送该BPDU报文的交换机的根路径开销 |
Bridge Identifier | 64比特 | 发送该BPDU报文的交换机的桥ID |
Port Identifier | 16比特 | 发送该BPDU报文的端口ID |
时间参数:
参数 | 比特数 | 描 述 |
---|---|---|
Message Age | 16比特 | 该BPDU报文从根桥发送到当前交换机的总时间,随时间增长而变大,若达到Max Age,则此配置BPDU被认为已经过期 |
Max Age | 16比特 | BPDU报文的最大生命周期,默认取值20s |
Hello Time | 16比特 | 交换机发送配置BPDU的报文周期,默认取值2s |
Forward Delay | 16比特 | 端口Listening和Learning状态的持续时间,默认取值15s |
🕘 2.2 TCN BPDU
如果网络拓扑发生了变化,会触发STP 的重新计算,新的生成树拓扑可能会跟原先的网络拓扑存在一定的差异。
在交换机上,指导报文转发的是MAC 地址表,默认的动态表项的生存时间是300 s,此时,数据转发如果仍然按照原有的MAC 地址表,会导致数据转发错误。
为防止拓扑变更情况下的数据发送错误,STP 中定义了拓扑改变消息泛洪机制。
当网络拓扑发生变化的时候,除了在整网泛洪拓扑改变信息外,同时修改MAC 地址表的生存期为一个较短的数值,等拓扑结构稳定之后,再恢复MAC 地址表的生存期。
在向整网泛洪拓扑改变信息的过程中,共涉及三种BPDU:
- 拓扑改变通知BPDU:
TCN
(Topology Change Notification) BPDU。用于非根交换机在根端口上向上行交换机通告拓扑改变信息,并且每隔Hello Time(2秒)发送一次,直到收到上行交换机的拓扑改变确认配置BPDU或者拓扑改变配置BPDU。 - 拓扑改变确认配置BPDU:
TCAN
(Topology Change Acknowledgment Configuration) BPDU。配置BPDU的一种,和普通配置BPDU不同的是此配置BPDU设置了一个Flag位。用于非根交换机在接收到拓扑改变通知BPDU的指定接口上向下行交换机发送拓扑改变通知的确认信息。 - 拓扑改变配置BPDU:
TCC
(Topology Change Configuration) BPDU。此配置BPDU设置了另外一个Flag位。用于从根交换机向整网泛洪拓扑改变信息,所有交换机都在自己所有的指定端口上泛洪此BPDU。
SWA收到SWB发送的拓扑改变通知BPDU之后,每隔2秒向网络中发送拓扑改变配置BPDU(设置了一个Flag位的配置BPDU),使网络中所有的交换机都把MAC地址表的生存期修改为Forward Delay(15秒),经过一段时间(Max Age加上Forward Delay,默认为35秒)之后,SWA(根交换机)在自己发送的配置BPDU中,清除Flag位,表示网络拓扑已经稳定,网络中的交换机恢复MAC地址生存期。
拓扑改变通知BPDU格式:
参数 | 字节数 | 内容 |
---|---|---|
2字节 | Protocol Identifier | 0x0000 |
1字节 | Protocol Version Identifier | 0x00 |
1字节 | BPDU Type | 0x80 |
拓扑改变确认配置BPDU和拓扑改变配置BPDU都是配置BPDU的一种,和普通的配置BPDU不同的是:
- 普通的配置BPDU中Flag字段全部设置为0;
- 拓扑改变确认配置BPDU将Flag字段的第8位设置为1;
- 拓扑改变配置BPDU将Flag字段的第1位设置为1。
🕒 3. 实验:了解STP生成过程
题目:作为公司的网络管理员,公司的网络使用了两层网络结构,核心层和接入层,在接入层采用了冗余网络,为避免存在的环路问题,决定使用STP 来进行环路控制。
设备 | 接口 | 接口类型 | 所属VLAN | 允许通过VLAN |
---|---|---|---|---|
IOU1 | Ethernet 0/0 | Trunk | ALL | |
Ethernet 0/1 | Trunk | ALL | ||
IOU2 | Ethernet 0/1 | Trunk | ALL | |
Ethernet 0/2 | Trunk | ALL | ||
Ethernet 0/3 | Access | VLAN 10 | ALL | |
IOU3 | Ethernet 0/1 | Trunk | ALL | |
Ethernet 0/2 | Trunk | ALL | ||
Ethernet 0/3 | Access | VLAN 10 | ALL |
设备 | 接口 | IP地址 |
---|---|---|
PC-1 | Ethernet 0 | 192.168.1.1/24 |
PC-2 | Ethernet 0 | 192.168.1.2/24 |
实验步骤:
1、交换机基本配置
(1)在IOU1、IOU2、IOU3上创建vlan 10
(2)在IOU1、IOU2、IOU3上配置access口和trunk口
2、PC配置IP地址
3、STP基本配置
(1)在思科二层交换机中,STP是默认开启的。
(2)查看生成树的情况。(根网桥ID、交换机ID、各端口角色)
IOU1#show spanning-tree
IOU2#show spanning-tree
IOU3#show spanning-tree
可以看到,对于IOU3,e0/1为根端口,e0/2为预备(alternative)端口。
(3)测试PC1到PC2的连通性
(4)关闭IOU3的e0/1口,再次查看生成树的情况
IOU3(config)#int e0/1
IOU3(config)#shutdown
(5)再次测试PC1到PC2的连通性
(6)重新打开IOU3的e0/1口,更改IOU3的优先级,使其成为根网桥
IOU3(config)#spanning-tree vlan 1 priority 4096
(7)再次查看生成树的情况
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)