目录
一、STP(Spanning Tree Protocol)概述
一、STP(Spanning Tree Protocol)概述
1.STP生成树产生的背景
首先我们学习STP生成树,就要了解为什么需要这个技术,在我们企业部署网络时通常使用三层组网方式分别为:接入层、汇聚层、核心层。如下图所示
大部分接入以及汇聚是由我们交换机来完成相应功能的,理论上接入层是离我们数据终端最近的网络设备了,接入层在与汇聚层互联的时候通常我们会使用备份冗余的方式。
这是因为如果我们接入层都接入到同一台汇聚设备上的话,如果汇聚设备发生故障则所有的数据终端都无法访问外网了,我们称这种情况为单点故障,所以需要两台或以上设备来完成数据链路的备份,这时候就有另一个问题。
我们知道交换机如果收到未知的广播报文和未知单播报文以及组播报文时会做泛洪处理,如果这个时候有大量的数据需要转发或有人使用大量的数据报文来进行攻击的话,那就可能产生,由我这个设备转发出去的报文又转发回到我的另一条链路上了,这种情况我们叫做环路和广播风暴会大量的消耗我们设备的性能,甚至导致网络瘫痪,而三层设备则不需要考虑这个问题,因为IP报文中有TTL字段可以防止环路的产生因为当TTL值为0时则会丢弃这个报文,这个时候就需要我们的STP生成树协议来完成破环,形成一个没有环路的拓扑。
2.STP的作用
STP是一个用于局域网中消除环路的协议,主要解决了二层环路的问题,广播风暴、MAC地址表不稳定等。
STP通过协议逻辑上的阻塞设备的一些端口来防止线路的环路以及实现线路的备份
比如上面这张拓扑当中,我们可以来关闭接入交换机的一个端口,假如另一个端口故障了则切换备份端口来转发数据,但备份端口如何知道主端口故障了呢,注意我们的备份端口不会往外发送数据但是它会接收数据,其中STP生成树的BPDU报文就是用来传输STP数据的,由它来告诉我们的备份链路。
但是我们生成树会尽可能的去少的阻塞我们的端口,因为阻塞一个端口就表示这个端口被闲置了,对端设备的这个端口也会被闲置,这样网络资源就被限制了,当然我们后面学到MSTP多实例生成树时可以解决这一个问题。
二、STP的基本概念
桥ID(Bridge ID,BID) | IEEE802.1D标准中规定BID由16位的桥优先级(Bridge Priority)与桥MAC地址构成,每一台运行了STP协议的交换机都拥有一个也是唯一的BID(默认为32768)只能够配置为4096的倍数,BID最小的设备会被选举为根桥。 |
根桥 | STP主要作用就是在网络中计算出一颗没有环路的树,根桥其实就是树的根。 |
Cost(开销) | 每一个激活了STP的接口都有一个Cost值,接口的Cost主要用来计算根路径开销,接口带宽越大优先级越小,当然我们也可以手工配置接口的Cost。 |
RPC(根路径开销) | 一台设备从某个接口到达根桥的RPC等于从根桥到该设备沿途所有路入方向接口的Cost累加 |
Port ID(接口ID) | 运行了STP协议的交换机的每个端口都有一个接口ID,接口ID由接口优先级和接口号构成,主要用于在特定场景下选举指定接口。 |
BPDU(网桥协议数据单元) | 运行了STP协议的交换机都会互相交互BPDU报文,BPDU是STP能够正常工作的根本,这些BPDU报文携带着一些重要信息,BPDU分为配置BPDU以及TCNBPDU,配置BPDU是STP进行拓扑计算的关键,TCN BPDU只在网络拓扑发生改变时才会触发。 |
BPDU报文格式
PVI | 协议的版本字段,STP为0,RSTP为2,MSTP为3 |
Flags | 标志位,当拓扑发生改变时会使用到该字段的最高及最低的两个位 |
Root ID | 在STP中刚开始运行生成树协议时大家都认为自己是根所以此字段填的都是自己的ID来往外发送,当选举完后,这个字段就是填选举出来的那个根的ID |
三、STP的工作原理
1.选举根桥ROOT
首先运行了STP的网络设备都会发送BPDU来选举根桥也就是ROOT,网络设备在第一次发送BPDU时都会认为自己是老大,自己是根桥所以在根桥字段中填充的是自己的桥ID,最后通过各自的桥ID来比较出一个根桥,就算桥ID的优先级一致但MAC肯定是唯一的所以不会出现选举不出来的情况。
在这个拓扑中我们优先级都为默认32768所以会去比较MAC地址的大小SW3的MAC最小所以SW3会被选举为根桥
1、每台交换机运行STP协议后发送BPDU选举根桥,这个时候所有交换机都会认为自己是老大自己是根桥所以在根桥ID中填的是自己的桥ID
2、当三台设备都收到各自的BPDU时会进行比对,我们这张拓扑当中优先级为默认的32768所以会去比较各自的MAC大小,最后发现SW3的MAC最小所以SW3就被选举为根桥。
2.选举根端口RP
根端口就是距离根桥最近的端口,所以根桥上是没有根端口的,除了根桥外所有运行了STP的网络设备都会选举出一个根端口,首先会比较入方向的根路径开销RPC,也就是接收根桥发送的BPDU到接口的开销,随后比较桥ID最小的,接口优先级最小的,端口号小的,自己的端口号小的。根路径开销>桥ID>接口优先级>端口号>自己的端口号
情况一、
1、选举根桥
在这张拓扑当中我们把SW1的优先级设置为4096,当三台设备开始运行STP协议时对比桥ID会发现SW1的优先级更小所以SW1会被选举为根桥。
2、选举根端口
(1)、比较根路径开销
SW1被选举为根桥之后SW2和SW3就需要去选举根端口也就是距离根桥最近的端口,会先去比较根路径开销,由于我们配置的COST开销为默认值所以SW2与SW3发现1号端口收到的BPDU的开销都比2号端口收到的BPDU开销要小,那么它们就会把1号端口选举为根端口。
SW2
SW3
情况二、
1、选举根桥
由于我们设置了SW1的优先级所以最后会选举SW1为根桥
2、选举根端口
(1)、比较根路径开销
在这张拓扑当中SW1为根桥,SW2与SW3根据根路径开销可以选举出1号端口为根端口,而SW9发现1号段口和2号端口收到的BPDU中的开销一致。
(2)、比较桥ID
SW9比较从1号端口和2号端口收到的BPDU中的桥ID来决定谁是根端口,SW9拆包发现1号端口收到的BPDU中的桥ID为32768.4c1f-cc9d-19e8,2号端口收到的BPDU中的桥ID为32768.4c1f-cc66-1a20,由于从2号端口收到的BPDU中的桥ID比1号端口中收到的BPDU中的桥ID要小所以SW9会选举2号端口为根端口。
情况三、
1、选举根桥
这里SW1的桥ID更小所以SW1会被选举为根桥
2、选举根端口
(1)、比较根路径开销
SW2通过1号端口和2号端口收到的BPDU报文中的参数发现,两条链路的根路径开销一致
(2)、比较桥ID
SW2通过1号端口和2号端口收到的BPDU报文中的参数发现,两条链路的桥ID也一致
(3)、比较端口优先级
这里我们将SW1的1号端口的优先级设置为64默认为128,当SW2的1号端口和2号端口收到BPDU报文时发现由1号端口收到的BPDU中的端口优先级比2号端口的低,SW2会选举1号端口为根端口。
SW2
如果我们不配置接口的优先级让它为默认的128,SW2则会比较端口号,这里的端口号并不是端口的编号而是STP根据端口编号计算出来的端口号,但是G0/0/1本身就比G0/0/2小所以计算出来的结果也是G0/0/1更优SW2就会选举G0/0/1端口为根端口。
SW1
SW2
情况四、
在这张拓扑当中我们在两台交换机中间添加了一台HUB集线器,这个时候根路径开销,桥ID,以及我们的接口优先级和端口号都比较不出来谁为根端口时,只能比较自己的端口号,SW2就会选举G0/0/1为根端口。
SW2
3.选举指定端口
根桥上所有的端口都是指定端口,每个链路上只能有一个指定端口,用于转发根桥发送过来的BPDU,也用来转发普通数据。
1.根交换机的所有端口都是指定端口DP
2.根端口的对端端口一定是指定端口DP
3.BPDU转发端口到根交换机的根路径开销最小的。
4.桥ID最小的。
情况一、
1、选举根桥和根端口
这张拓扑当中SW1为根桥那么SW1的所有端口都为指定端口,SW2与SW3通过根路径开销选举1号端口为根端口
2、选举指定端口
(1)、比较根路径开销
SW2和SW3通过2号端口收到的BPDU发现根路径开销一致
(2)、比较桥ID
SW2和SW3通过2号端口收到的BPDU中的桥ID发现SW3的桥ID更小则SW2的2号端口会被选举为指定端口,SW2的2号端口会变成阻塞端口。
情况二、 这张情况非常少见
1、选举根桥和根端口
由于SW1的优先级为4096所以SW1会被选举为根桥,SW2的1号端口会被选举为根端口,我们知道因为所有运行了STP的交换机除根桥外必须有一个端口为根端口,所以这里SW3会被选举为根端口
2、选举指定端口
(1)、比较根路径开销
SW2通过2号端口和3号端口收到的BPDU报文发现根路径开销一致
(2)、比较桥ID
SW2通过2号端口和3号端口收到的BPDU报文发现桥ID也一致
(3)、比较端口优先级
如果我们将某一个端口的优先级配置的更小则会选择该端口,如果为默认则会继续比较端口号
(4)、比较端口号
SW2通过比较端口号会发现1号端口计算出来的结果比2号端口的小,SW2会选举1号端口为指定端口
SW2
到这里本章内容就到此结束了如果有疑问可以+博主私聊,如果哪里有问题欢迎私聊博主及时更改谢谢大家的观看学习!!!