在OSPF网络中,各路由器之间不直接两两发链路状态信息,而是通过选举DR/BDR,DR为主,BDR为备份DR,把链路状态信息发给DR/BDR,由DR在组播给所有非DR/BDR的DROTHER路由器。当DR/BDR选举完成后,DROTHER就只和DR/BDR逻辑上形成邻居关系,DROTHER组播链路状态信息LSU到ALL DROTHER地址224.0.0.6,而只有DR/BDR监听该地址。而DR组播泛洪LSU的hello包到224.0.0.5,DROTHER监听该地址,以使所有非DR/BDR的OSPF路由器跟踪其它邻居的信息。
要点1:要记住当路由器成为DROTHER之后不会向其他DROTHER路由器发送自己的LSU,而只会向224.0.0.6这个组播地址自己的LSU,然后224.0.0.6这个地址会把DROTHER发上来的LSU组播给DR/BDR,之后DR/BDR都会收到这个DROTHER的路由更新。
要点2: 在DR/BDR收到从224.0.0.6发过来的LSU之后又会把这些LSU发给224.0.0.5这个组播地址,这时224.0.0.5会把LSU泛洪到所有DROHTER路由器上。那么区域网络上的所有DROHTER路由器都会知道最这个起源的DROTHER路由器的路由更新。
OK, 这时问题来了。为什么要这样做?推举DR的好处是What?以下举个例子说明问题。
我们假设R3,R4,R5的串口Priority值都设置为0,那么现在show ip ospf nei会看到彼此都是Full/Two Way的状态。如果这时候R4下面的网络拓扑改变了,Ospf的区域内所有路由器都会重新进行SPF计算。同时DROTHER路由器也会收到来自224.0.0.5组播过来的全网拓扑变化更新。这样不但浪费带宽,还增加路由器的负载。
如果把R3设置为DR, R4和R5设置为DROTHER呢?
这时R4下面的网络拓扑改变了,那么R4只会把自己LSU发送到224.0.0.6这个地址,然后224.0.0.6会把这个LSU组播给R3。 R3在收到R4的LSU后会对比自己的LSDB,对比过后,R3发现LSDB里面只有关于R4的条目是需要更新的,于是便把一个关于R4的LSU(就一个LSU packet)发送到224.0.0.5,这时224.0.0.5就会全网组播R4的这一个LSU packet。R5收到224.0.0.5发过来LSU之后更新自己LSDB。(PS:R5是不需要重新进行SPF计算的!)。 虽然过程繁琐了,但处理压力交给了R3, 每台理由器接口的通信量也减小了。因为R5只接收到R4的LSU packet。