网工不归路(十) STP

冗余拓扑中存在的问题

在图12-1-1中,PC1和PC3之间可以通过SW1的Fal/l和SW2的Fal/2之间的链路连通,可是如果SW1和SW2之间的这条链路中断,将会导致PC1和PC3之间的通信中断。
为了解决单一链路故障引起的网络问题,可以考虑在SW1和SW2之间再新增一条链路,如图12-1-2所示。
在这里插入图片描述
在图12-1-2中,SW1和SW2之间任何一条链路的失败,将不会导致PC1和PC3之间的通信故障。冗余链路很好地解决了SW1和SW2之间单链路故障引起的网络中断,但在执行冗余拓扑前,有些问题必须考虑。
1.广播风暴
以太网交换机传送的第二层数据帧不像路由器传送的第三层数据包有TTL(Time To Live,生命周期),如果有环路存在,第二层的以太网帧不能被适当终止,它们将在交换机和交换机之间永无止境地传递下去,除非环路被破坏,否则将造成网络拥塞,甚至是网络瘫痪。
前面介绍过交换机的工作原理,交换机收到一个广播帧,为了确保在同一个广播域中的所有设备都能收到这个广播帧,它将向除接收端口以外的所有端口转发这个广播帧。
下面来看一个广播风暴是如何形成的。在图12-1-2中:
①PC1发出一个广播帧。
②SW1收到这个广播帧,SW1从Fal/l、Fal/2、Fal/5端口向外转发这个广播帧。
③SW2从Fal/2端口收到SW1从Fal/l端口发过来的广播帧,然后SW2从Fal/l、Fal/4、Fal/5端口把广播帧转发出去;SW2从Fal/l端口收到SW1从Fal/2端口发过来的广播帧,然后SW2从Fal/2、Fal/4、Fal/5端口把广播帧转发出去。
④同理,SW1也从Fal/l和Fal/2端口接收到SW2转发过来的广播帧,然后从除接收端口之外的所有端口转发出去。
⑤PC1、PC2、PC3、PC4不停地接收到广播帧,根据广播帧的内容丢弃或处理广播帧。
③一个广播帧,在SW1和SW2间不停地被转发,永无止境,最终造成网络拥塞或瘫痪,影响网络正常使用。
2.MAC地址表不稳定
广播风暴危害巨大,除了产生大量的流量之外,还会造成交换机的MAC地址表不稳定。
在广播风暴的形成过程中:
①SW1从Fal/4端口接收到PC1的广播帧,SW1根据帧的源MAC地址进行学习,记录下PCI的MAC地址在Fal/4端口。SW1把广播帧转发给SW2。
②假设SW2从Fal/l端口先收到广播帧,SW2记录下PC1的MAC地址在Fal/1端口,然后SW2从Fal/2端口也收到这个广播帧,SW2更新PC1的MAC地址在Fal/2端口。SW2把接收到的广播数据帧再转发到SWl。
③SW1先后从Fal/2和Fal/l端口接收SW2转发过来的广播帧,依次更新PC1的MAC地址在Fal/2和Fal/l端口。可真正的PC1在Fal/4端口。
④SW1和SW2随着广播帧不停地被转发而不停地更换MAC地址表,造成CPU使用率过高,影响交换机的性能。
3.重复帧拷贝
冗余拓扑除了带来广播风暴和MAC地址表不稳定外,还会引起重复帧拷贝问题。
①假使PC1发出一个单播帧,目标是PC3,SW1收到这个单播帧,可SW1在MAC地址表中没有找到目标PC3的MAC地址,SWl从除接收端口以外的所有端口把这个单播帧转发出去。
②SW2从Fal/l端口收到SW1转发过来的单播帧,SW2知道PC3接在Fal/4端口,SW2把这个单播帧仅从Fal/4端口转发给PC3,PC3接收到这个单播帧。
③SW2从Fal/2端口收到SW1转发过来的单播帧,SW2知道PC3接在Fal/4端口,SW2把这个单播帧只从Fal/4端口转发给PC3,PC3再次接收到这个单播帧。
PC1仅发送一次单播帧,PC3却收到两次。在工程中,重复帧拷贝也存在不足,比如在流量统计或计费软件的环境中,都造成不精确计算的问题。

STP

这里讲得不太清楚,我组织了一下。
STP通过阻塞冗余路径上的一些端口,确保到达任何目标地址只有一条逻辑链路。处于阻塞状态的端口阻止网络流量的进入或离开,这里说的网络流量不包括BPDU(Bridge Protocol Data Unit,桥接数据单元),STP借助交换BPDU来阻止环路。在STP运行的情况下,虽然逻辑上没有环路,但物理路径仍然存在,只是被禁用以阻止环路发生,如果正在使用的链路或交换机出现故障,STP重新计算,部分被阻止的端口被激活用来提供冗余。
STP使用STA(Spanning Tree Algorithm,生成树算法)决定交换机上的哪些端口被阻塞来阻止环路的发生。STA选择一台交换机作为根交换机,也称根桥(Root Bridge),以该交换机作为参考点计算所有的路径。在图12-2-1中,所有交换机交换BPDU,BPDU中包括BID(BridgeID,桥ID),BID用来识别是哪台交换机发出的BPDU。BPDU就是STP用来组织结构的数据。

根交换机选举

首先我们来看BID的组成
BID一般由3部分组成:优先级、发送交换机的MAC地址和Extended System ID(扩展的系统ID,可选项),如图12-2-2所示,共8个字节,其中,优先级2个字节,MAC地址6个字节
在这里插入图片描述

  • 在不使用Extended System ID的情况下,BID由优先级域和交换机的MAC地址组成,针对每个VLAN,交换机的MAC地址都不一样,交换机的优先级可以是0~65535
  • 在使用Extended SystemID的情况下,每个VLAN的MAC地址可以相同。BID被要求包含VLANID信息,解决的办法是从优先级域的16个bit中拿出低位的12个bit,称为扩展的SystemID,用来唯一标识每个VLAN号,剩下的4个bit用来表示交换机的优先级,这种情况下优先级的取值只有2=16个,是4096的倍数。

想一想,为何从优先级中拿出的是12个bit 来表示Extended System ID呢?原因是ISL封装中只有10个bit用于VLAN标识,802.1Q封装中有12个bit用于VLAN标识,不管是哪种封装,取12个bit都可以满足。
比如交换机优先级是4096,交换机的MAC地址是cc00.0af4.0000,交换机在VLAN100中的BID是4196(4096+100-4196)+cc00.0af4.0000

拥有最小BID的交换机被选为根交换机。
选举过程
在同一个广播域中的所有交换机参与选举根交换机。当一台交换机最初启动时,它假定自己就是根交换机,并发送“次优”BPDU,默认每2秒发送一个BPDU帧,BPDU帧的BID和Root ID(根交换机的BID)相同。
在同一个广播域中的交换机相互之间转发BPDU帧,交换机从接收到的BPDU中读取Root ID,如果读取到的Root ID比本交换机的BID小,交换机更新Root ID为邻居交换机的Root ID,标识邻居交换机为根交换机。交换机继续转发更改过Root ID的BPDU帧到其他交换机,最后在同一个生成树实例中的所有交换机都有一致的Root ID,也就是根交换机的BID

端口花费和路径花费

根桥被选举出来以后,计算其他交换机到根桥的花费,STA考虑端口花费和路径花费。端口花费默认和端口带宽有关,但可以人为修改。路径花费等于从根交换机到达最终交换机前进方向上进入方向的端口花费总和,比如在图12-2-1中,SW1是根交换机,想改变SW3到根交换机的花费,应该在SW3的Fal/l端口改变花费,而不是在SW1的Fal/3端口。如果一台交换机有多条路径可以到达根交换机,交换机选择路径花费最小的那条路径。
(1)端口花费。默认的端口花费与端口的速度有关,请参照表12-2-1。
在这里插入图片描述
(2)路径花费。如果经过多台交换机才到达根交换机,路径花费等于中间经过多条路径花费的总和。

BPDU帧的细节

前一小节介绍了交换机间通过交换BPDU来选择根桥,本小节将介绍BPDU帧的细节。
BPDU帧包含12个字段,用来传输供STP使用的路径和优先级等信息。12个字段的具体名称和所占的字节数,如图12-2-7所示。在这里插入图片描述
这里对部分有用的字段进行解释。

  • Flags:标记域。包含了这些信息:TC(Topology Change,拓扑改变)比特位,表示拓扑发生改变事件:TCA
    (Topology Change Acknowledgment,拓扑改变确认)比特位,表示收到了拓扑变化通知,进行确认。
  • Root ID:根交换机的BID。
  • Cost of path:到根交换机的路径花费。
  • Bridge ID:转发BPDU的交换机的BID。
  • Port ID:转发BPDU的交换机的端口PID,等于端口优先级(默认是128)+端口编号。
  • Message age:BPDU已经存在的时间。
  • Max age:BPDU的最大存在时间。
  • Hellotime:根桥发送配置信息的间隔时间,这个值默认是2秒
  • Forward delay:转发延迟。

端口角色

当STA决定使用哪一条路径之后,STA配置交换机的端口角色,端口角色描述了它与根桥的关系和是否允许转发流量。交换机的端口角色有:
(1)根端口(Root Port,简称RP)。非根交换机上离根交换机最近的端口称做根端口,每个非根交换机上有且仅有一个根端口。在图12-2-1中,SW1是根交换机。SW2从Fal/2可以到达根交换机,花费是19;从Fal/3经SW3也可以到达根交换机,花费是38(19+19-38)。相比之下,SW2从Fal/2到根交换机最近,所以Fal/2是SW2的根端口。同理,SW3的Fal/l是SW3的根端口。
(2)指派端口(Designated Port,简称DP)。每个网段都有一个指派端口,指派端口是该网段到根交换机最近的交换机上的端口。在图12-2-1中,SW1上的Fal/l和Fal/3端口是指派端口,因为在SW1和SW2之间的网段上,SW1本身就是根交换机,到根交换机的花费是0,SW2到根交换机的花费是19,所以SW1上的Fal/1是SW1和SW2之间网段上的指派端口;同理,SW1上的Fal/3是SW1和SW3之间网段上的指派端口。由此可以得出结论,在根交换机与非根交换机相连的网段上,根交换机上的端口都是指派端口。在SW2和SW3相连的网段上,两个非根交换机到根交换机SW1的花费都是19,如何判断哪一个端口是指派端口呢?有关这个问题,将在“STP收敛”一节专门讲解,这里先认为SW2上的Fal/3端口是SW2和SW3之间网段上的指派端口。
(3)非指派端口。既不是根端口,也不是指派端口的激活端口称做非指派端口,在图12-2-8中,SW3上的Fal/2端口是非指派端口。非指派端口处在Blocking(阻塞)状态,用来阻止环路。根端口和指派端口都在Forwarding(转发)状态。
(4)禁用端口。被管理员使用“shutdown”命令关闭的端口称做禁用端口,禁用端口不参与生成树算法。在图12-2-8中,SW1上的Fal/2端口和SW2上的Fal/1端口都是被禁用的端口。

端口状态和BPDU时间

互连交换机间通过在同一个广播域中交换BPDU帧构建一个逻辑上无环的路径。为了使用这个逻辑生成树,交换机的端口需要在5种状态间转换,转换会经历3种BPDU时间。

端口状态转换

当交换机启动后,如果一个交换机端口直接转换到转发状态可能会形成暂时性的环路,这是由于交换机并不清楚整个网络的拓扑造成的,因为这个原因,STP引入了5种端口状态:Down、Blocking、Listening、Learning、Forwarding。端口状态的改变过程如下:
①Down(禁用)状态。可以使用“no shut”命令和插入网线进行激活。
②Blocking(阻塞)状态。链路激活,端口转换到Blocking状态,这个状态会逗留大约20秒时间,主要用来决定该端口的角色,如果该端口是根端口或指派端口,将转换到下一状态;如果该端口是非指派端口,状态继续停留在Blocking状态;本来处在Blocking状态的端口,如果接收不到BPDU了,也会转换到下一状态。
③Listening(侦听)状态。除了接收BPDU外,还向邻居交换机发送BPDU,通知邻居交换机它将参与激活拓扑。这个状态会逗留大约15秒时间。
④Learming(学习)状态。开始学习MAC地址。这个状态会逗留大约15秒时间。
⑤Forwarding(转发)状态。端口可以转发数据帧。

端口所处状态的功能

处在每种状态的端口都有什么功能对大家来讲是比较难于理解和记忆的,表12-2-2中对端口的状态(每一列)和功能(第一行)做了一个对比,其中“√”表示行头的端口具有列头的功能,其中“×”表示行头的端口不具有列头的功能。端口状态每前进一步就多一种功能,比如Learning状态可以接收BPDU帧、发送BPDU帧、学习MAC地址,但不能转发数据。
在这里插入图片描述

BPDU的时间

BPDU中相关的时间参数有:Hello time、Max age、Forward delay,可以通过图12-2-10中的命令进行修改,一般不建议修改BPDU的时间参数。
Hello时间控制了发送配置BPDU的时间间隔,802.1D标准规定其默认值为2秒。这个值实际上只控制配置BPDU在根网桥上生成的时间,其他网桥则把它们从根网桥收到的BPDU向外通告。如果在2~20秒内由于网络故障而没有收到新的BPDU,非根网桥在这段时间内就停止发转发BPDU。如果这种情况持续超过20秒,也就是超过默认的最大存活期,非根网桥就使原来储存的BPDU无效,并开始寻找新的根端口。所谓最大存活期,就是网桥在丢弃BPDU之前用来备份储存它的时间。
转发延迟是网桥在侦听状态和学习状态所花费的时间,它的默认值是15秒。这个值是假定网络的最大规模为7段网桥相连、BPDU的最大丢失个数为3,以及Hello时间间隔为2秒的情况下得到的。
使用STP计时器的时候要注意,在没有仔细考虑之前,不要改变计时器的默认值。如果需要改变STP计时器的值,最好只在根桥上改变,这是因为根网桥的BPDU的3个字段中包含了计时器的数值,它可以把该计时器值从根网桥通告到网络中的其他网桥上

STP收敛

收敛是生成树的一个重要方面。所谓收敛,就是整个网络达到一个稳定的状态,选举出根交换机,并决定出所有端口的角色,排除所有潜在的环路。当网络拓扑发生变化时,执行生成树算法,让网络重新收敛。

生成树的选举

为了使采用STP的网络最终收敛为一个逻辑上没有环路的网络拓扑,需要通过以下4步实现。
①每个广播域只能有一个根交换机。
②每个非根交换机有且只有一个根端口。
③每个网段有且只有一个指派端口。
④既不是根端口,也不是指派端口的端口将被阻塞

1.选举根交换机
交换机之间通过发送BPDU(Bridge Protocol Data Unit)来选举根交换机,拥有最小BID的交换机将成为根交换机,有关根交换机的选举已经在“12.2.1STP算法”节中讲解过。

选举根端口

每个非根交换机有且仅有一个根端口。非根交换机上的根端口是从非根交换机到根交换机的最低路径花费的端口。非根交换机可能会从多个端口接收到根交换机的BPDU,根端口的选举依照下面的顺序:
最低花费的端口成为根端口。有关根端口花费比较可以参照“12.2.3端口角色”一节。
在花费相同的情况下,比较发送者的BID。在图12-3-1中,交换机SW4从端口1和端口2都能收到根交换机SW1的BPDU,两边的花费相同,都是38。接下来比较的就是发送者的BID。假设SW2的BID是32768+2222.2222.2222,SW3的BID是32768+3333.3333.
3333,SW2的BID小,则SW4的端口1成为根端口。
在发送者BID相同的情况下,比较发送者的PID(PortID)。在图12-3-2中,SW1是根交换机,SW2的Fal/1和Fal/2到根交换机的花费相同,都是19,发送者的BID也相同(都是交换机SW1的BID)。接下来比较的是发送者的PID。PID-端口优先级+端口号,端口优先级占用一个字节,默认是128,端口号在同一个模块上是顺序增加的,起始端口号与交换机的型号以及该模块所在的插槽有关。可以通过下面的命令更改交换机端口的优先级:

int fa 1/1
spanning-tree port-priority ?
spanning-tree port-port-priority 10

④在发送者PID相同的情况下,比较接收者的PID。在图12-3-4中,SW1是根交换机,SW1的Fal/1端口连接着SW2的Fal/1和Fal/2,这样的拓扑往往是中间接了一台集线器。
SW2上两个端口的花费一样,发送者的BID也一样(都是SW1的BID),发送者的PID也一样(都是交换机SW1的Fal/l端口的PID)。接下来将比较接收者的PID。SW2上Fal/1端口的PID小于Fal/2端口的PID,SW2的Fal/l端口是根端口。

选举指派端口

每个网段都有一个指派交换机,该交换机负责把网段的数据发往根交换机。指派交换机上的端口叫做指派端口。选举指派端口的过程其实是先选出指派交换机,如果指派交换机上有多个端口,再从多个端口中选出一个成为指派端口。指派端口的选举依照下面的顺序:
①比较花费。在图12-3-5中,SW1是根交换机,SW2到根交换机的花费是4,SW3到根交换机的花费是8,在SW2和SW3之间的网段上,SW2是指派交换机,则SW2上的Gi2/3端口是SW2和SW3之间的网段上指派端口。
②比较BID。这里特别要提醒比较的是BID,不是发送者的BID,因为选举指派端口,首先要选出的是指派交换机,交换机的选举比较的则是BID。
③比较PID。如果指派交换机上有多个端口连接到同一个网段,则具有最小PID的端口成为指派端口。

阻塞端口

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

STP拓扑变化-TCN

当交换机检测到拓扑发生变化(交换机端口从转发状态变成阻塞状态;或者交换机端口变成转发状态,并且交换机上有一个指派端口)时,交换机通知根交换机拓扑变化了,根交换机再广播这个信息到整个网络中。
在正常的STP操作中,一个交换机从根端口接收根交换机发出的配置BPDU,它从不向根交换机发送BPDU。既然如此,它如何向根交换机通知拓扑变化信息呢?为了完成这个功能,一种特殊的BPDU被引入,叫TCN(Topology Change Notification,拓扑改变通知)BPDU。当一个交换机需要通知拓扑改变时,该交换机开始从它的根端口向外发送TCNBPDU,这种TCNBPDU是一种简化的BPDU,不包含什么信息,在Hello间隔中发送。接收到这个TCNBPDU的交换机(这个网段的指派交换机),立即发回一个正常的BPDU进行确认,这个BPDU的TCA(Topology Change Acknowledgement,拓扑改变确认)比特位被设置,该指定交换机产生一个TCNBPDU。这样的过程重复下去,直至到达根交换机。
在图12-3-8中:
①S2检测到拓扑变化,S2从根端口向D1发送TCN。
②D1收到S2发过来的TCN,D1使用TCA向S2确认。
③D1产生TCN,从根端口发给指派交换机C1,也就是根交换机。
④C1收到D1发过来的TCN,C1使用TCA向DI确认。
一旦根交换机知道网络拓扑发生变化,它开始向外广播TC(Topology Change)比特位被设置的配置BPDU,如图12-3-9所示。这些BPDU被转发到网络中的所有交换机,最后,所有交换机都知道拓扑发生变化。根交换机发送TC比特位设置的配置BPDU的时间周期等于Max age+Forward delay秒,默认是35秒(20+15=35)。

增强的STP功能–快速端口开启

从前面的叙述中我们可以发现,启用STP功能的交换机,一个端口从UP到Forwarding大约需要50秒的时间;而普通的二层非网管型交换机,端口从UP到Forwarding瞬间就可以完成。单位领导可有意见了,便宜的交换机快,贵的交换机反而慢,钱花得不值呀!
如果只是从VLAN配置、STP、VTP功能上讲,领导可能关心不了那么多细节问题,那来点直观的吧,用一根跳线,把普通的二层非网管型交换机连起来,让领导上网感受一下网络环路带来的问题,相信他会明白交换机支持STP的重要性。
其实启用STP功能的交换机经过合理配置,连接计算机的端口也能瞬间从UP到Forwarding,办法就是把连接终端计算机的端口设成快速端口,实现的命令是:

SW1(config)#interface range fa1/1-10
SW1(config-if-range)#spanning-tree portfast

上面的命令把交换机的Fal/1到Fal/l0共10个端口都设成快速端口,设置时,交换机控制台会提示,仅在连接计算机的端口上使用该功能,不要在连接集线器、交换机、网桥的端口上使用该功能,否则可能会导致临时性的生成树环路。同时还提示在Trunk端口使用该功能是无效的。应该只在不会创建第2层环路的端口(例如连接PC、服务器和路由器的端口)上使用PortFast。

软考还蛮有含金量的,考两个吧hhh

发布了165 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/treblez/article/details/105716447
STP