HCNA Routing&Switching之STP端口状态、计时器以及拓扑变化

  前文我们了解了STP选举规则相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15131999.html;今天我们来聊一聊STP的端口状态、计时器、端口状态转换以及拓扑变化相关话题;

  STP端口状态

  提示:STP的端口有5个状态,分别是disabled、blocking、listening、learning、forwarding;默认情况下,一个物理的交换机上的同VLAN下的所有端口都参与STP;其中Disabled是指未接线的端口;我们可以理解未激活的端口,它不接收和转发BPDU,也不学习mac地址和转发数据,是一种稳定的状态;Blocking状态是指端口激活了,通过STP选举以后未被选举成为根端口或指定端口的端口状态;该状态下的端口只接收BPDU,不转发BPDU,同时也不学习mac和转发数据,是一种稳定的状态;listening状态是disabled或blocking状态的端口向forwarding状态转换的一个过渡状态;该状态的端口只接收和转发BPDU,并不学习mac和转发数据,是一种非稳定状态;learning是从listening状态的端口向forward状态过渡的状态;该状态端口会接收和转发BPDU,同时也会学习mac,但不转发数据,是一种非稳定状态;Forwarding是STP稳定以后,除开预备端口和未激活的端口的状态;该状态下的端口可以正常接收和转发BPDU,同时也可以正常学习mac和转发数据,是稳定状态;

  实验:如下实验拓扑,更改交换机stp模式为stp,然后看看交换机的各端口状态变化

  验证:在s1上查看各端口状态

  提示:在华为的交换机上我们是看不到blocking和listening这两种状态,其原因是华为交换机显示是以rstp和mstp为主,对于stp来说disabled、blocking、listening这三种状态被打包为discarding状态;

  STP计时器

  从上面的拓扑中,我们任意链路上抓一个STP包

  提示:hello time字段用来表示根桥多久发送一次BPDU,默认情况是2秒一次;forward delay用来表示从learning状态到forwarding状态的延迟时长,默认15秒;max age表示预备端口最长多久没收到BPDU包的存活时长,默认20秒;

  提示:预备端口从阻塞状态到转发状态,首先预备端口要等待max age超时以后,才会进入到listening,从listening到learning中间会间隔15秒;从learning到forwarding中间会间隔15秒,所以一个预备端口从阻塞状态转变为转发状态,最长时间需要50秒;

  message age:该字段用于表示BPDU消息年龄,默认从根桥发送出来的BPDU为0,当BPDU每经过一个交换机,maessage age会加1,当交换机收到的BPDU中message age大于max age时,该交换机会丢弃该BPDU;

  验证:在根桥上转包,看看message age是否为0?

  提示:可以看到,从上述的实验拓扑中,s1(根桥)上抓包抓到的BPDU中message age为0;

  验证:如下拓扑,在非根桥(s6)抓包,看看对应message age是多少呢?

  分析:从s1发送的BPDU中message age 为0,当BPUD从S1的eth0/0/2口发送出来,经过S3从eth0/0/3转发出去,对应的message age会加1,所以从s3转发出去的BPUD,message age为1;同样的道理当s3的eth0/0/3转发出来的BPDU,在s4接收以后再从s4口的eth0/0/2转发出去,对应的message age也会再加1,所以从s4转发出去的BPDU中message age就为2,依次类推到达s6的BPDU中message age 的值就应该为3;

  验证:在s6上转包,看看对应的BPDU中message age是否是3呢?

  提示:其实这个message age我们可以理解为从根出发,中间经历多少个交换机;从上面的实验可以看到一般二层链路上的交换机不宜串联太多,超过20个会导致stp无法正常工作;

  STP端口状态转换

  提示:当端口初始化或从开启时,对应端口的状态会从disabled状态转换为blocking状态;如果端口被选举成为根端口或指定端口时,对应状态会从blocking开始转换--->listening,经过15秒---->learning,经过15秒----->forwarding;如果端口不再是根端口或指定端口,对应端口会从当前状态立刻转变为blocking状态;如果forward delay计时器超时,对应端口会从当前状态转换为下一个状态,比如从listening转换为learning;从learning转换为forwarding状态;如果端口被禁用或链路失效,则对应端口会从当前端口状态立刻变为disabled状态;

  验证交换机端口状态

  提示:默认情况下,只会显示两种稳定状态,第一种是forwarding状态,一种是预备端口的阻塞状态;disabled这种稳定状态需要手动去看对应端口才会显示;

  查看disabled状态的端口

  提示:只要显示锁disabled port,说明该端口为激活,或者我们可以理解为参与stp,但状态为disabled状态;

  STP拓扑变化

  1、根桥故障

  提示:根桥故障会导致直连根桥的交换机对应的链路挂掉,此时对于非根桥就会收不到根桥的BPDU,理论上来讲,非根交换机对应的端口收不到BPDU,最大等待20秒(默认max age为20秒),然后就会触发对应端口发送自己的BPDU,进行根桥的选举;根桥选举各交换机上的端口都会转变为discarding状态,然后持续15秒从discarding状态转变为learning状态,这个状态也会持续15秒;然后从learning状态转变为forwarding状态;这个状态对于stp来说是一个稳定状态,对应端口才可以正常转发数据包;通过上述的描述,如果根桥故障最长需要50秒对应二层网络才能恢复;

  2、直连链路故障

  提示:直连故障是相对于有预备端口的交换机来说的;对应的交换机是能够感知到故障的发生,此时对应的端口会从forwarding状态转换为discarding状态;再从discarding状态转变为learning状态,然后持续15秒;最后从lerarning状态转变为forwarding状态,此状态也会持续15秒,然后开始转发数据;这也就告诉我们直连故障最短也需要等待30秒对应网络才能正常使用;

  3、非直连链路故障

  提示:非直连链路故障也是相对于有预备端口的交换机来说的,这种故障对于有预备端口的交换机是感知不到的,所以理论上来讲,预备端口需要等待20秒的时间,然后才从blocking转变为discarding状态,然后持续15秒,再转换为learnging,然后再持续15秒,再从learning状态转变为forwarding状态;也就是说非直连链路故障最长也需要等待50秒;

  从上述的描述不难想象,不管是根桥故障还是直连链路或非直连链路故障,对于stp来说只要有故障,最短需要等待30秒,对应网络才能正常使用;

  拓扑变化导致mac地址表错误

  如上图所示,主机A和主机B通讯,在链路都正常的情况下主机A和主机B通讯,对于交换机B来说,它学习到的mac地址表示aa在3口,bb在一口;如果此时交换机c的g0/0/1口坏了;那么对于主机A和主机B的通讯最长也需要等待50秒,最短需要等待30秒对应stp链路才会正常被切换成功;此时我们想一个问题,但stp链路切换成功以后,对于交换机B来说,它的mac地址表并没有老化(默认老化时间是300秒),当它收到aa向bb通信的数据包,回包时它还是会将数据包从1口转发出去;这也就造成了,stp链路切换成功,但对应交换机mac地址表并没有更新,导致mac地址表错误的指向;这会直接影响主机A和主机B通讯;为了解决这个问题,stp里加入了另一种类型BPDU,TCN;

  提示:TCN是(topology change notification)拓扑变化通知;下游交换机一旦检测到拓扑变化,向上游发送的拓扑变化通知,上游交换机收到TCN后回应TCA(topology change acknowledgment)进行确认,然后下游交换机停止发送TCN;上游交换机通过根端口转发TCN直到根桥收到,根桥通过指定端口发送TC通知所有下游交换机把MAC地址表记录老化时间从300秒变为15秒;以便让交换机的mac地址表更快的老化,实现对应stp链路切换,对应mac地址表也随之更新;

posted @ 2021-08-14 19:31  Linux-1874  阅读(3090)  评论(0编辑  收藏  举报