在OSPF中,有两个相当重要的概念:DR和BDR。我们先来看看什么叫DR,什么叫BDR,然后再来看看他们都是做什么的。
DR:designated router 指定路由器。
BDR:backup designated router 备份指定路由器。
在一个LAN连接中,OSPF将选举出一个路由器做为DR,再选举一个做为BDR,所有其他的和DR以及BDR相连的路由器形成完全邻接状态而且只传输LSA(链路状态通告)给DR和BDR。
换句话说,在一个OSPF的网络中,所有的路由器将被分为两类:指定路由器(DR/BDR)和非指定路由器(DROTHER)。所有的非指定路由器都要和指定路由器建立邻居关系,并且把自己的LAS发送给DR,而其他的OSPF路由器将不会相互之间建立邻居关系。也就是说,OSPF网络中,DR和BDR的LSDB(链路状态数据库)将会包含有整个网络的完整拓扑。|
DR从邻居处转发更新到另外一个邻居那里。DR的主要功能就是在一个LAN内的所有路由器拥有相同的数据库,而且把完整的数据库信息发送给新加入的路由器。路由器之间还会和LAN内的其他路由器(非DR/BDR,即DROTHERs)维持一种部分邻居关系(two-way adjacency)。OSPF的邻接一旦形成以后,会交换LSA来同步LSDB,LSA将进行可靠的洪泛。
当选举DR/BDR的时候要比较hello包中的优先级priority(设置命令route(config-if)#ip ospf cost {priority} 0~255),优先级最高的为DR,次高的为BDR。不作修改默认端口上的优先级都为1,在优先级相同的情况下比较Router ID,RID最高者为DR,次高者为BDR,当你把相应端口优先级设为0时,OSPF路由器将不能再成为DR/BDR,只能为DROTHER。
在使用默认优先级的OSPF的DR选举中,所有的路由器之间会交换自己的ROUTER-ID来确定DR。ROUTER-ID可以手工指定。如果没有手工指定ROUTER-ID的话,那么路由器会先看自己有没有环回接口(Loopback),如果有环回接口,则使用环回接口上的IP地址作为自己的ROUTER-ID。如果没有环回接口的话,则会去比较自己所有物理接口上的IP地址,并从中选择最大的一个IP地址作为自己的ROUTER-ID来参与DR的选举。
那么,DR和BDR的选举就可以用以下的方式来决定:
1如果有手工指定的ROUTER-ID,则使用该ROUTER-ID参与选举;
2如果没有手工指定的ROUTER-ID,则看自己有没有Loopback接口,有则使用Loopback接口上的IP作为ROUTER-ID参与选举;
3如果没有Loopback接口,则比较所有的物理接口,并使用其中最大的IP作为ROUTER-ID参与选举;
4所有的OSPF路由器交换自己的ROUTER-ID,具有所有ROUTER-ID中最大一个的路由器将作为DR,具有次大ROUTER-ID的路由器则成为BDR。
》》》》》》》》
》》》》》》》》
名词解释:Router ID(RID)1、所有物理端口ip地址最大者为RID,2、如有逻辑管理接口Loopback0,loopback1等,则逻辑端口ip为RID,有多个逻辑接口,ip大者为RID.
1、所有接口都为物理接口s0:192.168.1.1 atm3/0:192.168.2.1 e0:172.25.188.1 则RID为192.168.2.1
2、有逻辑接口s0:192.168.1.1 atm3/0:192.168.2.1 e0:172.25.188.1,loopback0:10.0.1.1 loopback1:172.25.189.1 则RID为172.25.189.1.
DR/BDR:在OSPF网络中,各路由器之间不直接两两发链路状态信息,而是通过选举DR/BDR,DR为主,BDR为备份DR,把链路状态信息发给DR/BDR,由DR在组播给所有非DR/BDR的DROTHER路由器。
OSPF(链路状态路由协议Link State routing protocol)也和EIGRP(混合Hybrid routing protocol介于距离矢量路由协议和链路状态路由协议之间)类似,维护着3张表:1、邻居表,2、拓扑表 3、路由表。有点区别的是EIGRP每样维护着三张表:Neighbor table-appletalk ,ipx,ip.Topology table-appletalk,ipx,ip,Routing table- appletalk,ipx,ip.
选举DR/BDR规则
当选举DR/BDR的时候要比较hello包中的优先级(priority:设置命令 route(config-if)#ip ospf cost {priority} 0~255),优先级最高的为DR,次高的为BDR.不作修改默认端口上的优先级都为1,在优先级相同的情况下比较Router ID,RID最高者为DR,次高者为BDR,当你把相应端口优先级设为0时,OSPF路由器将不能再成为DR/BDR,只能为DROTHER.
链路状态信息的传播 (在本区域内,骨干区域0,区域有2的32次方个,所有常规区域必须和骨干区域直接相连,除非开隧道OSPF虚电路)
DR/BDR选举完成后,DROTHER就只和DR/BDR逻辑上形成邻居关系, DROTHER组播链路状态信息LSU到ALLDOTHER地址224.0.0.6,而只有DR/BDR监听该地址。而DR组播泛洪LSU的hello包到224.0.0.5,DROTHER监听该地址,以使所有非DR/BDR的OSPF路由器跟踪其它邻居的信息。
这样做的好处,减少OSPF网络中的链路状态更新包,减少泛洪,降低路由协议本身占用链路带宽,并有效的避免了距离矢量路由协议如RIP中的环路等问题。
2. 假设在一个OSPF多路访问网络中已存在一台DR路由器和一台BDR路由器,如果DR死掉(重起),则BDR自动升级为DR,同时选举该多路访问网络中的另一台OSPF路由器作为BDR.当原DR启动以后,虽然检测到目前运行的BDR的Router ID没有自己高,但是仍只能作为BDR或DR Other路由器运行(如果已经选举了另一台BDR).(这样也在一定的程度上就确保了链路状态的稳定性)
当没有显式配置Router-id命令时,路由器会选择Loopback接口地址最大的地址作为ID,若没有Loopback,那么找一个UP的物理接口地址最大的地址编号作为ID。
注意,不是所有的厂商设备都支持Router-id显示配置命令。
6 a" m) b: W& k/ ?: _
这里有个小提示,当进程启用之后,OSPF会按照上述规则选择一个ID,如果觉得这个ID编号不利于管理,可以使用Router-id命令进行修改。但是,强调一下,这个命令尽量在和其他路由器的OSPF进程建立之前进行设置,路由器这时会无条件的修改ID,但是,一旦邻居已经建立,那么再配置Router-id命令,系统就不会马上生效新ID,而需reset设备或者clear OSPF进程。稳定压倒一切吗。
所以配置OSPF时,如果要手工指定Router-id,进程起来就配,不要等到network命令之后配置。