HCNA Routing&Switching之STP基础
前文我们了解了VLAN动态注册协议GVRP相关话题,回顾请参考//www.cnblogs.com/qiuhom-1874/p/15113770.html;今天我们来讨论下二层环路和STP相关话题;
我们知道网络设备之间产生环路是很正常的,但为了通信质量,通常我们也要避免环路;对于三层网络,产生环路并不是很严重,因为我们有动态的路由协议可以防止环路,当然即便管理员手动配置静态路由形成环路,但最终数据包会停下来(因为三层ip协议有TTL字段可以让数据包最终停下来);对于二层网络来说,一旦产生环路,那将是致命的(其原因是二层环路一旦产生,数据包在环路里停不下来),严重的话可以瞬间将整个二层网络的链路带宽跑满,从而导致整个网络不可用;所以二层环路我们无论如何都要避免;为了提高网络可靠性,通常情况交换网络中会使用冗余链路,然而冗余链路最最直接的后果就是给交换网络带来环路的风险,并导致广播风暴以及MAC地址表不稳定等问题,进而影响到用户的通信质量。为了解决二层环路所带来的风险,stp协议诞生了;stp主要作用就是通过阻断冗余链路来消除网络中可能存在的环路,同时当活动链路发生故障时,激活冗余链路及时恢复网络连通性,从而实现网络的可靠性;
二层网络设计需求和问题
提示:上图是一个小型网络的拓扑图,通常为了网络的可靠性,汇聚层,核心层都会放置两个及两个以上的交换机,并且两两相俩(主要作用就是做高可用检测对方是否存活);接入层上联汇聚层会有至少两条链路,这样一来接入层的交换机就和汇聚层的交换机可能形成环路;比如上图红色和蓝色链路就是环路;
二层环路问题—>广播风暴
实验:如下拓扑图,我们用pc发送一个arp广播,看看在二层环路里会发生什么?
提示:默认情况华为的交换机是开启了STP,为了演示出效果,我们需要先把各个交换机的STP关掉;
关掉各交换机的STP
命令:stp disable
提示:S2,S3,都是一样的操作;
用pc ping同网段任意地址然后抓arp的包,看看会发生什么?
提示:可以看到我们用pc发了5个icmp包,而我们在链路上瞬间抓到了几千个arp包;这就是因为二层有环路产生,导致arp广播一直在环路里打圈停不下来;要想让里面的数据包停下来,要么在开启任意一台设备的STP,或者断掉任意一条链路,破坏环路;
在S2上开启STP
提示:可以看到当我们在S2上开启STP以后,对应数据包就停了下来;这里需要注意这里开启STP是阻断了ARP广播数据一直在环路打转,是因为初始化STP时会将对应端口阻塞掉;但是并不意味着环路就此被破坏了;一旦当STP稳定以后,还有数据包进来,数据包还会在环路里打转;
验证:现在用pc再次发送arp广播,看看抓包是否还会抓到很多?
提示:可以看到现在pc发送一个arp广播,在链路上还是会抓到很多arp广播包,这说明开启S2单台设备的STP并不能破坏环路;
开启S1的STP,看看对应环路是否能被破坏呢?
现在再次用pc发送arp广播,看看对应是否还会抓到很多arp包呢?
提示:可以看到现在用pc发送arp广播,在链路上还是会有很多arp包,说明环路还是存在,并没有被破坏;
开启S3的STP,看看环路是否被破坏?
用pc发送arp广播,看看是否还会抓到很多arp广播包呢?
提示:可以看到当s3开启STP以后,再次使用pc发送arp广播,对应抓包就没有像之前那样几百个arp包,说明环路被破坏了;从上述的实验可以看到,一旦二层网络里发生环路,数据包是停不了的;我们只有认为手动破除环路,或者通过开启STP破除环路;通常情况下所有设备都开启STP才能真正有效的破环环路,所以二层网络里如果有不支持STP的交换机,我们在接线时一点要注意不要产生环路;
二层环路问题—>MAC地址表震荡
还是上述实验拓扑,我们把三个交换机的STP都关掉,然后用pc发送arp广播,然后查看S1或S2或S3的mac地址表,看看对应mac地址表会有什么变化?
用PC发送arp广播
查看S1的mac地址表
提示:可以看到同一个MAC在S1上一会在1口学习到,一会在2口学习到;这是因为pc发送的arp广播会从1口和2口泛洪出去,在S2和S3收到arp广播以后,又会从对应的其他接口泛洪出去,这样一来,从s1的1口泛洪出去的arp广播,最终会从s1的2口收到;2口泛洪出去的arp广播又会从1口收到,所以对于s1来说pc的mac就会一会从1口学习到,一会又从2口学习到;这样一来s1的mac地址表就很不稳定;对于s2和s3也是同样的现象;通过上述的实验,我们可以看到二层环路一旦产生,就会有广播风暴和mac地址震荡;
STP:Spanning Tree Protocol,生成树协议;主要通过构造“一棵树”来消除交换网络中的环路;同时当活动链路发生故障,激活备份链路,从而实现网络的可靠性;
BPDU:Bridge Protocol Data Unit -桥协议数据单元,STP工作协议;
提示:STP通过各交换机发送的BPDU来完成根桥,根端口,指定端口和阻塞端口的选举,从而实现破除环路;
BPDU数据包结构及各字段解释
提示:STP有三个模式,默认华为交换机使用的是mstp;我们可以通过stp mode stp更改stp模式为原生stp模式;对于STP来说,其bpdu结构如上;相信很多字段都能看懂;这里说一下bpdu的类型这个字段(BPDU Type)和BPDU flag字段;
在STP的BPDU中,BPDU的类型主要有两种,一种是configuration,一种是TCN(Topology Change Notification);configuration类型的BPDU主要用来选举根交换机以及确定每个交换机端口的角色和状态,在初始化STP过程中,每个交换机都会主动发送这种类型的BPDU;当网络拓扑稳定以后,只有根桥会主动发送这种类型的的BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。发送周期为Hello Time,默认是2秒发送一次;老化时间为Max Age,默认是20秒;TCN类型的BPDU,主要作用是当网络拓扑发生变化时,下游交换机向上游交换机发送拓扑变化通知;默认情况,在configuration类型的BPDU包里,BPDU flag字段中,TCA和TC都是0,只有TCN以后,对应标志为才会置为1;
提示:BID主要用来表示二层网络中的交换机,主要由两部分组成,优先级和mac地址;优先级取值范围为0-65535,步长4096,数字越低越优先;默认优先级为32768;
提示:PID主要用来标识端口的,也是由优先级和对应端口的编号组成(这个编号和端口名称没有直接的关系,默认都是一个顺序编号),优先级取值范围为0-255,步长为16,数字越小越优先,默认值为128;
提示:路径开销用来描述链路优劣,数字越小表示链路开销越低,即链路就越优;这个路径开销和链路带宽有直接的关系;上述是98年标准和更早的标准;不同的链路对应开销各不相同;
提示:根路径开销是指到达根桥的最短路径的开销;数字越小,表示链路越优;rpc的计算方式是沿途各链路pc总和;上图中假设sw1为根桥,那么sw2到达根桥的开销就需要看对应链路是多大带宽了,如果是100M根据98年标准,则开销为19;那么sw3到达sw1的开销就为sw2到达sw1的路径开销+sw3到达sw3的路径开销;sw3到达sw2的链路带宽为10M,所以对应的开销为19,所以sw3到达sw1的开销就为19+100=119;
附图:各速率链路开销标准
提示:华为默认使用802.1t标准;