生成树协议浅析

二层网络为了避免单点故障,在实际的二层链路中会采用链路冗余,也就是采用交换设备之间多条联络连接,这样即使一台交换机故障了,也可以使用其他交换机。

生成树协议

链路冗余造成了下面三个问题,下面结合下图进行说明:

  1. 广播风暴

如果有环路存在第二层帧不能被适当的终止,他们将在交换机之间永无止境的传递下去。

  • PC1发出一个广播帧,SW1收到这个广播帧,SW1将这个广播帧从除接收端口的其他端口转发出去,即发往fa0/2、fa0/23、fa0/24。
  • SW2从自己的fa0/23和fa0/24都会收到SW1发过来的相同的广播帧,SW2再将这个广播帧从除接收端口外的所有其他接口发送出去(SW2将从fa0/23接收的广播帧发往其他三个端口fa0/24、fa0/1、fa0/2,从fa0/24接收到的也会发往其他三个端口fa0/23、fa0/1、fa0/2)。
  • 这样这个广播帧又从fa0/23以及fa0/24传回了SW1,SW1再用相同的方法传回SW2,除非物理线路被破坏,否则PC1-4将不停的接收到广播帧,最终造成网络的拥塞甚至瘫痪。
  1. MAC地址表不稳定

在广播风暴形成过程中:

  • PC1发出的广播帧到达SW1,SW1将根据源MAC进行学习,SW1将PC1的MAC和对应端口fa0/1写入MAC缓存表中。
  • SW1将这个广播帧从除接收端口之外的其他端口转发出去,SW2接收到两个来自SW1的广播(从fa0/23和fa0/24),假设fa0/23首先收到这个广播帧,SW2根据源MAC进行学习,将PC1的MAC和接收端口fa0/23存入自己的MAC缓存表,但是这时候又从fa0/24收到了这个广播帧,SW1将PC1的MAC和对应的fa0/24接口存入自己的MAC缓存表。
  • SW2分别从自己的这两个接口再将这个广播帧发回给SW1,这样PC1的MAC地址会不停的在两台交换机的fa0/23和fa0/24之间变动,MAC地址缓存表也不断的被刷新,影响交换机的性能。
  1. 重复帧拷贝

冗余拓扑除了会带来广播风暴以及MAC地址的不稳定,还会造成重复的帧拷贝:

  • 假设PC1发送一个单播帧给PC3,这个单播帧到达SW1,假设SW1上还没有PC3的MAC地址,根据交换机的原理,对未知单播帧进行泛洪转发,即发往除接收端口外的所有其他端口(fa0/2、fa0/23、fa0/24)。
  • SW2分从自己的fa0/23和fa0/24接收到这个单播帧,SW3知道PC3连接在自己的fa0/1接口上,所以SW1将这两个单播帧都转发给PC3。
  • PC1只发送了一个单播帧,PC3却收到了两个单播帧,这会给某些网络环境比如流量统计带来不精确计算等问题。

STP流程介绍

针对上述问题,STP(Spanning Tree Protocol,生成树协议)被设计出来。它是二层链路上的协议,通过拥塞冗余路径上的一些端口,确保到达任何目标地址只有一条逻辑路径。虽然逻辑上没有了环路,但是物理线上还是存在环路的,只是物理线路的一些端口被禁用以阻止环路的发生,如果正在使用的链路出现故障,STP重新计算,部分被禁用的端口重新启用来提供冗余。下面是STP的几个概念:

  • BPDU(Bridge Protocol Data Unit):网桥协议数据单元
  • BID(Bridge ID):网桥ID,用来唯一识别交换机
  • PID(Port ID):端口号ID
  • STA(Spanning Tree Algorithm):生成树算法,来决定交换机上的哪些端口被堵塞用来阻止环路的发生
  • 根桥(Root Bridge):以该交换机作为参考点计算所有路径

STP流程如下:

根桥选举

拥有最小BID的交换机被选举成为根交换机。在同一个广播域中的所有交换机都参与选举根交换机,当一台交换机启动时,它假设自己是根交换机,并默认每隔2秒发送一次BPDU帧,BPDU帧中的Root ID和本机的BID相同。在一个广播域中的交换机互相转发BPDU帧,并且从接收到的BPDU中读取Root ID,如果读取到的Root ID比本交换机的BID小,交换机更新Root ID为这个较小的Root ID,然后继续转发修改后的BPDU;如果接收的BPDU中的Root ID比本交换机的BID大,那么继续将自己的BID作为Root ID向外发送BPDU,直到最后在同一个生成树实例中拥有一致的Root ID,这个Root ID对应了这个广播域中某台交换机的BID(并且这个BID一定是这个广播域最小的),这台交换机就被选作根交换机。

选择根端口

根交换机被选举出来后,对于每台非根桥要选择一个端口用来连接到根桥,这就是根端口。选举顺序为:首先最低花费的端口将成为根端口;在花费相同的情况下比较发送者的BID,BID小的将成为根端口。

根端口选择需要计算当前交换机到根交换机的花费,如果一台交换机有多条路径到达根交换机,这台交换机会选择路径花费最小的那条。STA考虑两种花费,端口花费和路径花费,路径花费是从根交换机出发到最终交换机前进方向进入的端口花费总和。下面是默认的端口花费参照表:

下图中SW1被选举成根交换机,交换机之间的链路都是100Mb/s,所以SW2的根端口是SW2的fa0/2接口,SW3的根端口是SW3的fa0/1接口,因为他们从这个接口去根交换机的花费都是19,小于通过SW4去根交换机的花费。对于SW4不论从自己的哪个接口去往根交换机(经过SW2或SW3),花费都是一样(38),所以在花费相同的情况下比较发送者的BID,也就是比较SW2和SW3的BID,显然SW2的BID(32768+2222.2222.2222)小于SW3的BID(32768+3333.3333.3333),所以SW4将自己和SW2相连的接口fa0/4选举成为根端口。

选择指派端口

端口角色分为:

  • 根端口(Root Port,RP):每个非根交换机上有且仅有一个根端口,稍后的生成树选举中会详细介绍根端口的选举过程。
  • 指派端口(Designated Port,DP):网络上除根端口外,所有允许转发流量的端口,每个网段都有一个指派端口,根交换机上的端口都是指派端口。
  • 非指派端口:既不是根端口也不是指派端口,这种端口虽然是激活的但是会被堵塞(Blocking)用来阻止环路,根端口和指派端口都处于转发(Forwarding)状态。
  • 禁用端口:命令关闭的端口称作禁用端口,禁用端口不参与生成树算法派端口的选举依照比较花费、接收者BID、接收者PID的顺序来选出。

每个网段有且只有一个指派端口。其实,每个网段都有一个指派交换机,指派交换机上如果有多个端口,再从多个端口中选举出一个成为指派端口,指派端口的选举依照比较花费、接收者BID、接收者PID的顺序来选出。

下图中假设SW1被选举成了根交换机,因为每个网段都有一个指派端口,在SW1和SW3相连的线路上,由于SW1本身是根交换机,SW1的fa0/1端口到自己的花费是0,所以SW1的fa0/1接口被选举成指派端口(根交换机上的所有端口都是指派端口);同理在SW1和SW2相连的网段上,SW1的fa0/2也被选举成了指派端口;而在SW2和SW3相连的网段上,由于SW1和SW2之间是1Gb/s链路,SW2去往根交换机的花费(4)要小于SW3去往根交换的花费(19),所以SW2是这个网段上的指派交换机,SW2的fa0/3将成为这个网段的指派端口。再根据前面的根端口的选举可以知道SW2的fa0/2是根端口,SW3的fa0/1是根端口,SW3的fa0/3端口因为不是根端口,也不是指派端口,所以被阻塞。

其他端口设为阻塞

既不是根端口也不是指派端口的端口将被阻塞

经过上述几步,就可以形成无环路的网络。

参考来源

http://www.qingsword.com/qing/636.html

http://www.2cto.com/net/201303/198378.html

原文地址:https://www.cnblogs.com/zhiqianye/p/6594946.html