• OSPF中DR和BDR到底是谁先选举出来的?


    在OSPF的DRBDR选举的过程中,DR的选举依靠的是hello报文,在two-way之后,交互hello报文完成DR/BDR的选举。

    那么在每台路由器根据收到的所有hello报文,会构建自己接口的数据结构,并按照一下算法,计算出DR/BDR:

    1、路由器接口数据结构中维持三个集合,分别是:

    (1)DR集合:通过hello报文学习到的所有的DR路由器

    (2)BDR集合:通过hello学习到的所有BDR路由器

    (3)DRother集合:没有被选举为DR/BDR的路由器,但优先级不为0,因为一旦优先级为0,则代表该路由器不参与选举。

    2、当选举DR和BDR的算法工作时,在DR集合中选择最好的路由器,使其成为DR。在BDR集合中选择最好的路由器,使其成为BDR。

    首先,DR的选举:

    在DR的集合中应用以下规则:

    如果DR集合为非空,则从中选择最好的路由器成为DR;

    如果DR集合为空,则把当前BDR提升为DR;而如果BDR集合为空,则要先从DRother集合中选出BDR,再将其提升为DR。

    BDR的选举:

    与DR类似,如果BDR集合为非空,则从中选择最好的路由器为BDR;

    如果BDR集合为空,则从DRother集合中选择最好的路由器成为BDR路由器。

    由此可见,无论是DR还是BDR,除非他们本身在接口结构中的集合就包含所谓的DR、BDR,否则都要从下游的集合中以选举的机制,来确认DR、BDR,那么如何确保他们原本集合中就存在对应的DR呢?接下来我们来说一下关于DR/BDR的选举过程。

    DR/BDR的选举过程:

    OSPF路由器在DR/BDR未选举出来之前,hello报文中关于DR和BDR的字段全为0,即0.0.0.0。选举完成后,DR和BDR的字段记录一直的DR和BDR的routerid。

    路由器接口根据侦听到的hello报文,生成邻居表并在接口维持三个集合:

    DR集合{}

    BDR集合{}

    Dother集合{}

    具体过程如下:

    (1)当OSPF接口开启后,在HELLO报文中设置DR/BDR字段为全0,此时DR/BDR未知。同时,Waittimer启动,时长为4倍的Hello间隔。

    (2)如果收到的Hello报文中DR及BDR字段为非空,则Wait计时器停止,接收当前DR/BDR的选择。

    (3)如果在Wait计时器超时后,仍未学习到DR/BDR,则开始DR/BDR的选举。

    (4)如果BDR集合为空,则从DRother集合选举BDR;如果DR集合为空,则从BDR集合选举DR。

    (5)根据上述算法,如果再没有DR/BDR的网络上,Wait计时器超时后,网络上的每台路由器都会先从DRother集合选择BDR,再把BDR提升为DR;再重新从DRother集合选择BDR。至此,选举结束,开始建立邻接。

    转自:https://www.douban.com/note/704095004/

  • 相关阅读:
    Pandas 合并,连接,连接和比较
    根据条件在Pandas DataFrame中选择行
    pandas DataFrame.where() 检查一个或多个条件的数据帧,并相应地返回结果
    获取包含给定子字符串的Pandas DataFrame中的所有行
    Pandas Series.str.contains
    Python | 查找给定字符串中字符的位置
    Python中的Enumerate()
    Python –遍历NumPy中的列
    Boost 编译
    opencv 提取RGB并用cocos2d-x 纹理方式显示
  • 原文地址:https://www.cnblogs.com/zhaojianwang/p/10854365.html
Copyright © 2020-2023  润新知