zoukankan      html  css  js  c++  java
  • HCNA Routing&Switching之STP选举规则

      前文我们了解了二层环路对网络带来的影响,以及STP工作流程和BPDU数据包结构和相关字段的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15121317.html;今天我们主要来讨论下STP具体选举流程相关话题;

      我们知道STP主要是通过构造“一棵树”来消除二层网络中可能存在的环路,同时当活动链路发生故障,激活备份链路,从而实现网络的可靠性;它的工作过程过程如下

      1、选举根桥的规则

      根桥的选举规则很简单,在STP初始化时,每一台交换机都会认为自己是根桥,都会发送BPDU;根据各交换机发送的BPDU中BID,首先比较各自的BID中优先级,优先级最小对应设备就是根桥;如果优先级都一样,则比较BID中的mac地址,mac地址最小的设备成为根桥;根桥选举完成以后,非根桥设备不主动发送BPDU,只有根桥设备主动发送BPDU,非根桥设备转发BPDU;

      提示:选举根桥只是比较各交换机发送的BPDU中的BID,BID最小为根桥(BID由优先级和mac地址组成,先比较优先级,再比较MAC地址);上图中swa的优先级最小,所以swa就是根桥;剩下的swb和swc就是非根桥设备;

      2、在非根桥设备上选举根端口

      提示:选举根端口是通过对应端口收到的BPDU中,根据端口的根路径开销(到达根桥最短路径开销)、对端BID、对端PID和本端PID;根路径开销最小的端口成为根端口;如果根路径开销一样,则比较对端BID(对应端口连接的设备);比较对端BID的规则是先比较优先级,优先级小者,对应端口成为根端口;如果对端BID中的优先级一样,则比较mac地址,对端mac地址小者成为根端口;如果对端的BID一样,则比较对端PID,比较对端PID的规则是,先比较优先级,再比较端口编号,对端pid中优先级小者为根端口;如果优先级一样,则端口编号小者为根端口;如果对端PID也一样,则比较本端PID,比较规则和比较对端PID一样,先比较优先级,优先级小者为根端口,如果优先级一样,则比较端口编号,端口编号小者为根端口;

      实验:如下拓扑,三个交换机都运行STP,看看对应的根桥和根端口是怎么选举的;

      分析:上述拓扑,首先三个交换机会选举根桥,根桥的选举只看BID;从上面的信息可以看到当三个交换机发送的BID中的优先级都有一样(默认都是32768),此时根桥的选举就比较那个mac较小了,最小的是根桥;很容易判断出s2就是根桥;那么s1的eth0/0/1就是根端口(因为在s1上eth0/0/1到达根桥的路径开销为200000,而eth0/0/2到达根桥的路径开销为400000);同样在s3上eth0/0/2是根端口;

      验证:查看s2是否是根桥?

      提示:可以看到在s2上查看stp接口信息,其中root的mac地址就是s2自己 ,说明s2就是根;

      验证:在s1上查看对应根端口是否是eth0/0/1?

      提示:可以看到在s1上,eth0/0/1是根端口;

      验证:在s3上查看对应根端口是否是eth0/0/2?

      提示:可以看到s3上eth0/0/2就是根端口;

      上述实验选举根端口就是通过根路径开销来选举的;接下来我们来看看当到达根路径开销相等时,又该如何选举根端口呢?

      实验拓扑

      分析:从上面拓扑的bid可以看到,当前根桥还是s2;那么对于s3来说,eth0/0/1和eth0/0/2到达根路径开销都是400000,此时在s3上那个端口为根端口呢?从选举规则来讲,当根路径开销一样时,则看看对端的BID;那么确定s3的根端口就只需要比较eth0/0/1的对端s1的BID和eth0/0/2的对端s4的BID,谁小,对应的端口就是根端口;从上面的拓扑可以看到s4的BID要大于s1的BID,所以对应s3上的eth0/0/1就是根端口;

      验证:在s3上查看是否是eth0/0/1为根端口?

      提示:可以看到s3之前的eth0/0/1是阻塞的,新加了一个s4以后,对应端口的角色也发生了变化,从阻塞端口变为了根端口;其原因就是因为eth0/0/1的对端s1的BID要小于eth0/0/2的对端s4的BID;

      当对端BID相同时?对应根端口该如何选择呢?

      分析:如上拓扑,根桥还是s2;那么对于s1来说,到底那个端口才是根端口呢?首先看根路径开销都一样,都是200000;看对端BID,对端BID都一样,都是s2的BID;此时在s1上选举根桥会看对端PID,谁小谁就是根端口;

      在s2上查看eth0/0/1和eth0/0/2的PID

      提示:可以看到在s2上eth0/0/1的PID为128.1,eth0/0/2的PID为128.2;那么对于s1来说,此时根端口就应该是eth0/0/1(原因是它的对端是s2的eth0/0/1);

      验证:在s1上查看对应的根端口

      提示:可以看到s1上根端口为eth0/0/1;从上面的实验过程可以看到对端BID相同时,根端口的选举会根据对端PID,对端PID小者,对应本端端口就是根端口;

      当对端PID相同时,根端口又将如何选择呢?

      分析:从上面的拓扑可以确定根桥还是s2,对于s1来说eth0/0/1和eth0/0/2谁才是根桥呢?首先在s1上选举根端口,会看根路径开销,两个端口到根路径开销都是200000;当根路径开销相同时,比较对端BID,上图中s1的对端是s2,所以BID相同;当BID相同我们需要比较对端PID,从上图中我们可以看到s1的两个端口的对端都是s2的eth0/0/1,所以对端PID也相同;此时在s1上选举根端口就会看本端的PID,谁小谁就是根端口,默认情况端口的优先级都是默认值128,比较PID就是看那个端口的端口编号小;很显然eth0/0/1的端口编号要小一点,所以s1上的根端口为eth0/0/1;

      验证:查看s1上的eth0/0/1,看看它是否是根端口?

      提示:可以看到s1的eth0/0/1就是根端口;

      3、在链路上选举指定端口

      选择指定端口的规则是先看该端口转发出来的bpdu中根路径开销,开销小者为指定端口,如果开销一样则比较BID,BID小者为指定端口;如果BID相等则比较PID,PID小者为指定端口;

      实验:根据以下拓扑图,选出指定端口

      分析:根据stp选举根桥的规则,上述实验根桥一定是s3,因为根桥选举看BID,优先级一样比较mac大小,小者为根桥;其次选举根端口,根据根端口的选举规则,在s1上根端口是eth0/0/2(因为eth0/0/2到根桥的路径开销为200000,而eth0/0/1到根桥的路径开销为400000);对于s2上来说,根端口为eth0/0/2(因为eth0/0/1到达根桥的路径开销为400000);接下来选择指定端口,根据指定端口选举规则,先看发出bpdu中的根路径开销;对于s1的eth0/0/1和s2的eth0/0/1直连的链路上,s1的eth0/0/1发出的bpdu中根路径开销为200000,s2的eth0/0/1发出的bpdu中根路径开销为200000;所以根路径开销一样的情况,此时选举指定端口就需要比较BID;因为s1的BID要小于s2的BID,所以指定端口为s1的eth0/0/1;对于根桥上的端口来说,因为它发出的bpdu中根路径开销为0;所以根桥上的端口都是指定端口(排除自环,如果根桥上有端口自环,自环的两个端口中一定有一个端口处于阻塞,这样一来根桥的端口就不是都是指定端口);

      验证:查看s3是否是根桥?

      提示:可以看到在s3上的stp相关信息中,根桥的BID和s3的BID相同,说明s3就是根桥;

      验证:查看s1的eth0/0/1是否是指定端口,eth0/0/2是否是根端口?

      提示:可以看到s1上的eth0/0/1是指定端口,eth0/0/2是根端口;

      验证:查看根桥的端口,看看是否都是指定端口?

      提示:可以看到非自环的情况下,根桥上的所有端口都是指定端口;

      实验:当BID相同时,看看对应指定端口该如何选举?

      分析:从上面的BID就可以看到s1为根桥,s2为非根桥;对于s2来说,根端口是eth0/0/1(因为eth0/0/1、eth0/0/2和eth0/0/3的根路径开销都为200000,此时选举根端口就比较对端BID,eth0/0/1对端BID就是根桥,而eth0/0/2和eth0/0/3对端BID是s2,所以eth0/0/1为根端口)那么对于s2的eth0/0/2和eth0/0/3之间的链路选举指定端口该怎么选呢?从上面选举指定端口的规则来讲,首先比较发出bpdu中的根路径开销,这两个端口的发出BPDU中的根路径开销都是200000;如果发送的BPDU中根路径开销相同,则比较BID;eth0/0/2和eth0/0/3都是s2的端口,所以BID就是s2,两个端口的BID也相同;此时选举指定端口就需要比较pid;pid小者为指定端口;因为eth0/0/2的端口编号小于eth0/0/3的端口编号;所以eth0/0/2为指定端口;(因为默认PID中的优先级都一样,我们只需要判断端口编号大小即可);

      验证:查看s2各端口情况?

      提示:可以看到s2的1口为根端口,2口为指定端口,3口为阻塞端口,也叫备份端口;

      4、预备端口的确定

      通过上述的选举,最终没有被选举成为根端口或指定端口的端口,都会被确定为预备端口;该端口会一直处于阻塞状态,只接受BPDU,不转发数据;直到正常链路故障,该端口才有可能转变为其他角色和状态,进行数据转发;

    作者:Linux-1874
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    [Luogu P3626] [APIO2009] 会议中心
    杭电 1869 六度分离 (求每两个节点间的距离)
    杭电 1874 畅通工程续 (求某节点到某节点的最短路径)
    最短路径模板
    杭电 2544 最短路径
    POJ 1287 Networking (最小生成树模板题)
    NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)
    POJ 2485 Highways (求最小生成树中最大的边)
    杭电 1233 还是畅通工程 (最小生成树)
    杭电 1863 畅通工程 (最小生成树)
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/15131999.html
Copyright © 2011-2022 走看看