如上图所示:
1.广播风暴:当所有设备刚加电运行,此时PC需要向服务器发送数据,那么,PC需要发送ARP广播请求服务器的MAC地址,由于交换机没有存储任何MAC地址,所以交换机的第一步学习PC的源MAC地址,再将目标MAC泛洪出去,首先SW1从接口1泛洪该帧,经由网段1到达SW2的接口1,由于是广播播,SW2从2接口泛洪该帧,最终会到达SW1.其次,再SW1将帧从接口泛洪的同时,也从接口2泛洪该帧经由网段2到达SW2,SW2也泛洪该广播帧,最后,因为这个帧是广播帧,会持续循环,造成广播风暴。
2.多帧复制:假设PC和SW2有存储服务器的MAC地址,而SW1没有存储,当PC发送一个单播帧到服务器,SW1会将该帧泛洪,而SW2知道服务器连接在SW2的哪个端口,所以SW2只会将帧发送到服务器而不泛洪。那么,SW1会从接口1和接口2分别发送该帧,SW2会从网段1 和网段2接收到该帧的两个复制。
3.MAC地址表不稳定:PC向服务器发送数据,SW2会分别从接口1 和接口2收到源MAC为PC的MAC地址,所以先是接口1学习到MAC PC,接着又会接口2 学习到MAC PC,造成MAC地址表的不稳定。
二、生成树的作用:用于二层有冗余链路的情况下防止环路
三、生成树的BPDU
BPDU(Bridge Protocol Data Unit)
·STP的各种选举是通过交换BPDU报文来实现的,BPDU是直接封装在以太网帧中的。
·对于参与STP的所有SW,它们都通过数据消息的交换来获取网络中其他SW的信息,这种消息就被称为BPDU。
·BPDU是直接封装在二层的协议,其MAC地址最后封装数为:00。(01:80:c2:00:00:00)
·BPDU的功能:
1.选举根桥
2.确定冗余路径的位置
3.通过阻塞特定端口来避免环路
4.通告网络的拓扑变更
5.监控生成树的状态
·BPDU每2S由根桥发送一次。
最初的网络,每个SW都认为自己是根桥,都会发送BPDU,比较Lowest BID,选举出一个根桥,此时就只有根桥发送BPDU。非根桥只进行转发。
BPDU分两种类型:
1、配置BPDU--通常由根网桥以周期性间隔发出,包括了STP参数,用于进行各种选举。
2、TCN(topology change notification 拓扑变更通告)BPDU--这种BPDU是当交换机检测到拓扑发生变更时所产生。
三、生成树的角色:根桥、指定网桥、根端口、指定端口、非根非指定端口
要弄清楚这些角色,首先要搞清楚它们是怎么选举出来的。两个原则:一是抢占式,如果谁条件最优,谁成为指定的角色;二是小者优先,不论是优先级还是MAC,小的能够获得到指定角色。这和OSPF的DR选举刚好是相反的。
1.根桥的选举:每个STP网络只有一台根桥,根桥的所有接口都是指定端口
BID小者优先,在整个二层网络中进行选择。因为三层的链路的冗余可以通过三层的协议来防止环路,不依赖于STP。
根桥的选举是比较桥ID的,桥ID由桥优先级与MAC地址组成,先比较优先级,再比较MAC地址。优先级取值0-65535,默认值32768.
在设备都运行STP的伊始,每台支持STP的交换机都会参与,且会认为自己的根桥,都发送配置BPDU,把发送者ID和根桥ID都置为本交换机的。然后所有交换机都能收到其他交换机发送过来的配置BPDU,一个组播帧。所有交换机都会把BID最小的那台交换机置成根桥
手工影响根桥的选举:
spanning-tree [vlan 1] priority 0-61440 ,如果不带vlan这个参数,表示对所有vlan都生效
2.根端口的选举:每台非根交换机都选择一个离根最近的端口成为根端口。
1.比较最低的根桥ID
2.比较本交换机到根桥最低COST值的端口
3.比较发送BTDU给本交换机的邻接交换机的BID,如果本交换机在生成树的网络中连接有多台指定交换机(离根桥近的交换机)
4.比较发送BTDU给本交换机的邻接交换机的PORT ID,较小的优先
port ID:由接口优先级与端口编号组成,优先级默认值为128,端口编号就是物理接口编号加1,小的端口编号优先。
spanning-tree vlan 1 port-priority 0-240
3.指定端口选举:每个网段(链路级)只有一个端口成为指定端口
1.比较最低的根桥ID
2.比较链路两端的接口到根桥的cost值,小者优先
3.比较链路两端的交换机的BID,如果有较小BID的交换机的接口优先
4.比较链路两端的交换机的port ID,如果有较小端口ID的交换机的接口优先成为指定端口
4.cost值的计算
从根桥的指定端口发出的BPDU的值为0,然后下游交换机收到BPDU,会加上收到BPDU的接口的cost值,再向下游发送。也就是说cost值是计算入接口的值的累加。
5.小结:很多初学者可能分不清怎么样选举根端口与指定端口,因为书上写的都是最低的发送者BID与最低的端口ID。让我们无所适从。
四、LAB:接下来我们就可以做一个简单的实验了
如上图所示,交换机的优先级与接口优先级都是默认的,所有链路都是100M,cost值为19.求根桥、根端口、指定端口与阻塞端口
1.根桥:依照选举原则,SW1的BID较小,成为根。比较过程:首先比较三台交换机的优先级,都是32768,不能得出结果,所以比较MAC地址,SW1有较小的MAC成为根
2.根端口:每台交换机上离根cost值最小的端口。
SW2的f0/1到达根的cost值为19,因为它收到从根发出来的cost为0的BPDU,加上本身接口的cost,得出结果为19。
SW2的f0/2,收到SW3转发的COST 为19的BPDU,加上f0/2的cost,为38. 所以SW2选择F0/1为根端口,同理,SW3选择f0/3 为根端口
3.指定端口:每网段一个指定端口
根桥的所有端口都是指定端口,因为它们到达根的cost为0.那么SW2与SW3连接的f0/2这条链路需要选择一个指定端口
首先比较cost值,两边到达根桥的cost值相同,都为38.所以接下来比较BID
因为SW2的BID较小,所以SW2的连接端口f0/2成为该网段的指定端口。
4.因为SW3的f0/2端口不是根端口,也是不链路的指定端口,那么这只能处于阻塞状态
上图的验证,可以使用GNS搭建一个简单的拓扑,按照1 2 3,三台3640的机器。默认情况下,SW1的MAC是cc00,依次向上为cc01。
如果有四台交换机,或者多条冗余链路,依照上面介绍的原则,也可以快速获得结果。如果大家发现我讲述的STP选举有问题,请大家指正。
转载于:https://blog.51cto.com/liu008qing/555409