在广播型多路访问链路上,所有在接口下启用了OSPF进程的路由器,在进入Two-Way状态后开始触发选举过程。这个状态下,这台路由器都检查每个邻居路由器发送过来的HELLO数据包的优先级(优先级不参与选举)、DR和BDR字段。如果邻居路由器没有相关DR和BDR字段,那么就等待40S的时间,才开始选举DR/BDR,这也是保证选举的公平性。

问题:假如,这个网络只有一台路由器(优先级不为 0),它会选举 DR/BDR吗?(嘿嘿,肯定有很多人士在学习OSPF的时候,没有想过这个问题)

反方观点:不会。因为DR/BDR选举是在和邻居进入two-way状态时才触发的,没有邻居,谈何进入这个此状态呢?

正方观点:会。在没有触发选举的过程下,路由器会等待一个超时时间(wait time),然后,先标识自已为BDR,后DR。成了DR后,BDR置为0.0.0.0字段。

好像这二种说法都有道理,我们通过做实验,来证明谁是黑猫还是白猫?



实验环境:
路由器(R1)的F0/0桥接到本地电脑上的环回口上(我是用 Dynamips做的,好用抓包软件)

R1# debug ip ospf adj                              //开启邻接DEBUG调试信息
OSPF adjacency events debugging is on
R1#conf t
R1(config)# int f0/0
R1(config-if)# ip add 202.101.1.1 255.255.255.0
R1(config-if)# no shut
R1(config-if)#
R1(config-if)# router os 110
R1(config-router)# router-id 1.1.1.1         
R1(config-router)# network 202.101.1.1 0.0.0.0 ar 0
R1(config-router)#
*Mar    1 00:04:29.983: OSPF: Interface FastEthernet0/0 going Up
*Mar    1 00:04:30.487: OSPF: Build router LSA for area 0, router ID 1.1.1.1, seq 0x80000001
Rack02-R1(config-router)#
*Mar    1 00:05:09.987: OSPF: end of Wait on interface FastEthernet0/0                                            //等待 40S的超时时间
*Mar    1 00:05:09.987: OSPF: DR/BDR election on FastEthernet0/0
*Mar    1 00:05:09.987: OSPF: Elect BDR 1.1.1.1          //先 BDR
*Mar    1 00:05:09.987: OSPF: Elect DR 1.1.1.1            //后 BDR
*Mar    1 00:05:09.987: OSPF: Elect BDR 0.0.0.0
*Mar    1 00:05:09.991: OSPF: Elect DR 1.1.1.1
*Mar    1 00:05:09.991:                DR: 1.1.1.1 (Id)     BDR: none
*Mar    1 00:05:10.491: OSPF: No full nbrs to build Net Lsa for interface FastEthernet0/0

查看OSPF接口下的信息
R1#sh ip ospf int f0/0
FastEthernet0/0 is up, line protocol is up
   Internet Address 202.101.1.1/24, Area 0
   Process ID 110, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 1.1.1.1, Interface address 202.101.1.1
  No backup designated router on this network
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5

查看OSPF链路状态数据库
R1#sh ip os data
                        OSPF Router with ID (1.1.1.1) (Process ID 110)
                                Router Link States (Area 0)
Link ID     ADV Router     Age    Seq#            Checksum  Link count
1.1.1.1     1.1.1.1          177     0x80000001   0x006E8A  1

因为,路由器会每隔10S发送一次HELLO包,通过Wireshark这个软件抓包来看看HELLO包的字段。

所以,一台路由器是会选择DR的。
想要了解DR/BDR选举过程中的更多细节问题,可以参考Jeff写的《TCP/IP路由技术》卷一。