STP--二层路由器的生成树协议

转自:http://blog.51cto.com/13402236/1973112

为什么要有生成树协议(spanning-tree protocol)?

   在传统的交换网络中会产生故障(单点故障),导致主机通信失败。

wKioL1nknNrg4VcRAADYMP2j5Xo591.png

例如:sw3 Fas0/23 端口故障,则PC1/PC2 无法与PC3 通信

   单点故障如何解决?

   1.增加冗余链路

   2.增加冗余设备

wKioL1nknMbykeHcAADclKWeuHA638.png

例如:增加冗余链路(sw1与sw3 相连)

      即使sw3 fas0/23 端口故障,SW2发送的广播包也可通过sw1进行转发,从而转发给sw3,即可实现PC1/PC2/PC3 之间的主机通信。

   增加冗余链路的情况下,会产生什么问题?

     在增加冗余链路的情况下,产生环路的数据(即广播风暴),会不断的在网络中进行传输,从而消耗网络中链路资源和设备资源。

wKioL1nknQXiveWKAADclKWeuHA007.png

  如图,假设所有的端口均无故障,增加冗余链路(sw1与sw3相连),sw1在发出广播后,sw2(sw3)收到并转发给sw3(sw2),sw3(sw2)收到并转发给sw1,从而形成环路(广播风暴),消耗网络链路中的资源。

如何解决这个问题?

     STP(spanning-tree protocol)---生成协议

    作用----存在冗余链路的情况下,实现环路保护,(即线路故障时,阻塞端口打开,恢复数据通信)

    实现----BPDU(网桥协议数据单元)

    分类----PVST/RSTP/MSTP

   工作过程

  1.确定交换机的角色

     分类:

           根交换机(只有一个)

           非根交换机(除根交换机以外的交换机)

     原则:

           比较每个交换机的BID(桥ID),越小越好

           组成:优先级+MAC地址(基MAC)

                 优先级:默认是32768

                  MAC地址:交换机主板MAC地址

                   sw#show version

  2.确定端口角色

     分类:

          根端口---在非根交换机上距离根交换机最近的端口

        指定端口---每一个冲突域中,距离根交换机最近的端口

               (冲突域---交换机端口互联形成)---根交换机上的端口均为指定端口

      非指定端口---除根端口及指定端口以外的交换机端口

   判断思路----首先判断根端口----->再判断指定端口------>最后判断非指定端口

     

如何表示上文中“最近“这个距离?

            在STP中,通过cost 表示一个路径的距离

         对于某些链路,均有默认的cost值:

          10 M --- cost 100

          100M --- cost 19

          1000M(1G) ---- cost 4

          10000M(10G) ---- cost 2

    通过什么来判断端口所属角色?

       BPDU--桥协议数据单元

        root-id      //表示根交换机是谁

        cost        //表示发送该BPDU协议的交换机到达根交换的距离

        BID         //表示发送该BPDU的交换机的名字

        Port-id      //表示发送方交换机是在那个端口发送出来的

                    (组成--优先级(默认128)+MAC地址) 

                  以上都是越小越好!!!

wKioL1nkpiqjNvLQAADt4YoPO-g131.png

例如:如图,sw2为根交换机(RootSwitch),sw1,sw3为非根交换机,

判断sw1上两个端口哪个是根端口,根据 BPDU-桥协议数据单元,root-id 都为sw2,fas0/11的cost值为19(路径--sw1--sw2),fas0/13的cost值为38(路径--sw1-sw3-sw2),则 fas0/11为根端口。

sw3上的两个端口哪个是根端口:根据 BPDU-桥协议数据单元,root-id 都为sw2,fas0/23的cost值19(路径--sw3--sw2),fas0/13的cost值为38(路径--sw3-sw1-sw2),则fas0/23为根端口。

sw4 上的两个端口哪个是根端口:根据 BPDU-桥协议数据单元,root-id 都为sw2,fas0/16的cost值38(路径--sw4--sw3--sw2),fas0/15的cost值为38(路径--sw4-sw3- sw2),继续判断BID,都是SW4,相同,继续判断Port-id(发送方交换机是在哪个端口发送进来的)

即sw3 fas0/11---->sw4 fas0/16 

sw3 fas0/12---->sw4 fas0/15

由于是sw3 发送BPDU 给sw4,则看sw3上连接sw4的两个端口离根交换机的远近。 sw3上 fas0/11 和fas0/12的root-id,cost值(sw3-sw2--19)BID(优先级+基MAC)相同,最后看Port-id(优先级+端口号)

优先级都默认为128,端口号fas0/11 小于fas0/12,则根端口为sw3 fas0/11端口所对应的sw4 fas0/16端口。

再判断指定端口:指定端口---每一个冲突域中,距离根交换机最近的端口

          根交换机上的端口都是指定端口。即sw2上 fas0/12 fas0/13为指定端口

在sw1 fas0/13 和sw3 fas0/13 端口连接形成冲突域中,sw1 fas0/13 sw3 fas0/13 的root-id 都为sw2

cost值都为19(sw1-->sw2/sw3-->sw2)则比较BID,优先级都是32768,基MAC 不同,由于sw1基MAC小于sw3基MAC,则sw1的fas0/13为指定端口。

   sw#show spanning-tree
....

3.确定端口状态

     disable    //相当于shutdown,此时端口不能使用;

     listening   //侦听,该状态侦听的是BPDU,用于确定端口角色(15s)

     learning   //学习,该状态学习的是MAC,形成MAC地址表(15s)

     forwarding //转发,即端口的最终转发状态;(根端口,指定端口最终都是forwarding状态)

     block     //阻塞,此时端口是不可以发送数据的;(非指定端口都是block状态)

猜你喜欢

转载自blog.csdn.net/hemeinvyiqiluoben/article/details/83894262