需求:实际网络环境,物理环路可以提高网络的可靠性,一条线路断掉时,另一条线路仍然可以传输数据,交换网络中,当交换机接收到一个未知目的地址的数据帧,交换机的操作是将这个数据帧广播出去,存在的物理环路的交换网络中,就会产生一个双向的广播环,甚至广播风暴,导致交换机低级。

实现了什么效果:STP协议并不是断掉物理环路,而是在逻辑上断开环路,防止广播风暴的产生

理论:    STP协议在逻辑上断开网络的环路,防止广播风暴的产生,一旦正在使用的线路出现故障,逻辑上被断开的线路又被连通,将继续传输数据。

    交换网络环路的产生

    网络通信最初,pc1和pc2通过交换机相连,pc1的ARP条目中没有pc2的MAC地址,根据ARP原理,PC2首先会发送一个ARP广播请求给交换机sw1

    当sw1收到arp的广播请求是,sw1会将广播帧从除接收端之外的所有端口转发出去。

    当sw2收到广播帧时,同样将广播帧转发,sw3收到广播帧后,同样将转发。

        sw1,sw2,sw3会将广播帧相互转发,就在网络中形成一个环路,而交换机之间并不不知道,将导致广播帧在这个环路中永远循环下去。这种广播风暴只有在物理环路消失时才看可能停止

        STP(生成树协议)就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上的树形结构。

    生成树算法即验证

        选择根网桥

            选择根网桥的网桥ID,网桥ID是一个8字节的字段,前2字节的十进制数称为网桥优先级,后6字节是网桥的MAC地址

            网桥优先级用于衡量网桥在生成树算法中优先级的十进制数,取值范围0~65335,默认值为32768

            网桥ID中的MAC地址是交换机自身的MAC地址,可以使用show version命令在交换机版本中查看交换机自身的MAC地址

            按照生成树算法定义,比较某个STP参数的两个取值时,值小的优先级越高。在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID值最小,优先级小的被选择为根网桥;在网桥ID相同的情况,MAC地址小的为根网桥。

        选择根端口

            根网桥后,网络中的每台交换机必须和根网桥建立某种关联,STP就开始选择根端口。根端口存在非根网桥上,需要在每个非根网桥上选择一个根端口

                选择根端口是,依据的顺序

                    到根网桥最低的根路径成本

                    直连的网桥ID最小

                    端口ID最小

            根路径成本是两个网桥间的路径上所有线路的成本之和,,也就是某个网桥到达根网桥的中间所有线路的路径成本之和。

            路径成本用来代表一条线路宽带的大小,一条线路的带宽越大,它传输数据的成本越低

    生成树协议(STP)_可靠性

            端口ID是一个2字节的STP参数,有1字节的端口优先级和1字节的端口编号组成


        选择指定端口

        网桥是交换机的前身,由于STP是在网桥基础上开发,因此现在交换机的网络中仍然沿用网桥。

    生成树协议(STP)_可靠性_02

            端口优先级是一个可配置的STP参数。    

            端口编号用于列举各个端口的数字标识符,基于IOS的交换机上,可以支持256个端口,端口编号表示端口号,但是端口号低的端口,端口编号也较小

            在STP选择根端口时,首先比较交换机端口的根路径成本,根路径成本低的为根端口,当根路径成本相同时,比较连接交换机的网桥ID值,选择网桥ID值小的做为根端口,当网桥ID相同时,比较端口ID值,选择较小的作为根端口。比较端口ID是,比较的是接收到的对端的端口ID值

        选择指定端口

            为了消除环路形成可能,STP进行最后的计算,在每一个网段上选择一个指定端口,选择指定端口的依据与根端口相同

                根路径成本较低

                所在的交换机的网桥ID值较小

                端口ID值较小

            选择指定端口时,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口,当根路径成本相同是,比较这个端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机的端口作为指定端口,当网桥ID值相同是,几个位于同一交换机上的端口是,比较端口ID值,选择较小的作为指定端口。

            根网桥上的接口都是指定端口,因为根网桥上端口的根路径成本为0

    生成树算法验证    

        根据网桥ID选择根网桥,由于交换机为默认配置,所有优先级相同,都为32768,这种情况下选择MAC地址最小的交换机为根网桥

        根据根路径成本在非根网桥上选择根端口。

        在每个网段上选择指定端口,根网桥交换机的端口都为指定端口。

            查看生成树:show spanning-tree

    桥协议数据单元

        交换机之间根据网桥ID选择根网桥,根据路径成本等选择根端口和指定端口。

        交换机之间通过BPDU(桥协议数据单元)来交换网桥ID,根路径成本等信息。交换机从端口发送出一个BPDU帧,使用该端口本身的MAC地址作为源地址。交换机本身并不知道它周围是否还有其他的交换机存在。BPDU帧利用了一个STP组播地址作为它的一个目的地址,使之能到达相邻的,并处于STP侦听状态的交换机。每隔2s,便向所有的交换机端口发送一次BPDU报文,以便交换机能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。

            BPDU的两种类型

                配置BPDU,用于生成树计算

                拓扑变更通告(用于通告网络拓扑的变化)

            BPDU的报文字段

                BPDU中包含根网桥ID,根路径成本,发送网桥ID,端口ID,计时器等

                    根网桥ID:由一个2字节的优先级和一个6字节网桥MAC地址组成,表明已经被选定为根网桥的设备标识

                    根路径成本:说明这个BPDU从根网桥传输了多远,成本多少。决定哪些端口将进行转发,哪些端口将被阻塞

                    发送网桥ID:发送BPDU的网桥信息,由网桥的优先级和网桥的MAC地址组成

                    端口ID:有一字节的端口优先级和一字节的端口编号组成

                    计时器:说明生成树用多长时间能完成它的每项功能。功能包括报文老化时间,最大老化时间,访问时间和转发延迟

            STP利用BPDU选择根网桥的过程

                一台交换机启动时,假定自己是根网桥,在BPDU报文中的根网桥ID字段填入自己的网桥ID,向外发送。

                交换机比较收到的BPDU报文中的根网桥ID与自己的网桥ID的值哪个更小,如果接受到的BPDU中的根网桥ID值小于自己的网桥ID值,则用接收到的根网桥ID替换现有的根网桥ID,并向外转发。交换机仍然会继续监听其他交换机发来的BPDU,并继续进行比较,只要接收的BPDU中宣告的根网桥ID值小于目前存储的根网桥ID值,则进行替换。一端时间后,当所有交换机互相接收了全部BPDU后,则能够选择出全网公认的唯一一个根网桥

                收敛后,如果有一台网桥ID值更小的交换机加入,首先把自己当作一个根网桥在网络中通告,由于新交换机的网桥ID值的确更小,所以其他的交换机在比较一番后,就会把新的当作新的根网桥而记录下来。

        STP的收敛

            STP运算过程中,交换机的每一个端口都必须依次经历好几种状态。