• HCNA Routing&Switching之STP基础


      前文我们了解了VLAN动态注册协议GVRP相关话题,回顾请参考https://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到达sw2的路径开销;sw3到达sw2的链路带宽为10M,所以对应的开销为100,所以sw3到达sw1的开销就为19+100=119;

      附图:各速率链路开销标准

      提示:华为默认使用802.1t标准;多条相同速率的链路聚合会增大链路速率降低链路开销;

    作者:Linux-1874
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    LeetCode:删除链表中的节点【203】
    精益创业和画布实战(1):变革家,让天下没有难懂的生意
    怎么投资理财,如果有且仅有100万本金?
    怎么投资理财,如果有且仅有100万本金?
    Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较
    View绘制详解,从LayoutInflater谈起
    Java线程和多线程(七)——ThreadLocal
    跳槽谋发展:人生发展的一些思考和最近找工作的坎坷经历
    跳槽谋发展:人生发展的一些思考和最近找工作的坎坷经历
    三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/15121317.html
Copyright © 2020-2023  润新知