雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4703|回复: 13

[讨论/求助] 关于选举DR BDR的疑惑,请指点!

[复制链接]
发表于 2011-6-29 19:32:11 | 显示全部楼层 |阅读模式
本帖最后由 jkrh9 于 2011-6-29 19:32 编辑

两台路由直连,一个接口:192.168.1.1,另一个接口:192.168.1.2
问题:两个路由互相发HELLO包,包中的DR和BDR域都是0.0.0.0,如图:
                 

在互相发了几个这样的hello包(DR及BDR域都是0.0.0.0)后,根据调试发现,就已经选举出DR及BDR了。

问题是:在DR、BDR选举流程中,第一个步骤是:2 way时,所有路由器都宣告自己为DR/BDR。但是我在做实验时,都没看到有数据包里面将自己宣告为DR、BDR,仅仅是在如上图的几个hello之后就已经选举出DR、BDR了。为什么呢?请高人指点。
以下是两个路由器的调试过程:

    路由1的:
Router>enable
Router#debug ip ospf adj
OSPF adjacency events debugging is on
Router#
00:00:50: OSPF: end of Wait on interface FastEthernet0/0
00:00:50: OSPF: DR/BDR election on FastEthernet0/0
00:00:50: OSPF: Elect BDR 192.168.1.2
00:00:50: OSPF: Elect DR 192.168.1.2
00:00:50: OSPF: Elect BDR 192.168.1.1
00:00:50: OSPF: Elect DR 192.168.1.2
00:00:50:        DR: 192.168.1.2 (Id)   BDR: 192.168.1.1 (Id)
00:00:50: OSPF: Send DBD to 192.168.1.1 on FastEthernet0/0 seq 0x2feb opt 0x00 flag 0x7 len 32
00:00:50: OSPF: Build router LSA for area 0, router ID 192.168.1.2, seq 0x80000002
00:00:50: OSPF: No full nbrs to build Net Lsa for interface FastEthernet0/0
00:00:50: OSPF: Rcv DBD from 192.168.1.1 on FastEthernet0/0 seq 0x7c8d opt 0x00 flag 0x7 len 32  mtu 1500 state EXSTART
00:00:50: OSPF: First DBD and we are not SLAVE
00:00:50: OSPF: DR/BDR election on FastEthernet0/0
00:00:50: OSPF: Elect BDR 192.168.1.1
00:00:50: OSPF: Elect DR 192.168.1.2
00:00:50:        DR: 192.168.1.2 (Id)   BDR: 192.168.1.1 (Id)
00:00:55: OSPF: Send DBD to 192.168.1.1 on FastEthernet0/0 seq 0x2feb opt 0x00 flag 0x7 len 32
00:00:55: OSPF: Rcv DBD from 192.168.1.1 on FastEthernet0/0 seq 0x2feb opt 0x00 flag 0x2 len 52  mtu 1500 state EXSTART
00:00:55: OSPF: NBR Negotiation Done. We are the MASTER
00:00:55: OSPF: Send DBD to 192.168.1.1 on FastEthernet0/0 seq 0x2fec opt 0x00 flag 0x3 len 52
00:00:55: OSPF: Rcv DBD from 192.168.1.1 on FastEthernet0/0 seq 0x2fec opt 0x00 flag 0x0 len 32  mtu 1500 state EXCHANGE
00:00:55: OSPF: Send DBD to 192.168.1.1 on FastEthernet0/0 seq 0x2fed opt 0x00 flag 0x1 len 32
00:00:55: OSPF: Rcv DBD from 192.168.1.1 on FastEthernet0/0 seq 0x2fed opt 0x00 flag 0x0 len 32  mtu 1500 state EXCHANGE
00:00:55: Exchange Done with 192.168.1.1 on FastEthernet0/0
00:00:55: OSPF: Database request to 192.168.1.1
00:00:55: OSPF: sent LS REQ packet to 192.168.1.1, length 12
00:00:55: OSPF: Rcv DBD from 192.168.1.1 on FastEthernet0/0 seq 0x2fed opt 0x00 flag 0x0 len 32  mtu 1500 state LOADING
00:00:55: Synchronized with with 192.168.1.1 on FastEthernet0/0, state FULL
00:00:55: %OSPF-5-ADJCHG: Process 101, Nbr 192.168.1.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
00:00:55: OSPF: Build router LSA for area 0, router ID 192.168.1.2, seq 0x80000002
00:00:55: OSPF: Build net LSA for area 0, router ID 192.168.1.2, seq 0x80000001
00:01:00: OSPF: DR/BDR election on FastEthernet0/0
00:01:00: OSPF: Elect BDR 192.168.1.1
00:01:00: OSPF: Elect DR 192.168.1.2
00:01:00:        DR: 192.168.1.2 (Id)   BDR: 192.168.1.1 (Id)

    路由2的:
Router>enable
Router#debug ip ospf adj
OSPF adjacency events debugging is on
Router#
00:00:51: OSPF: end of Wait on interface FastEthernet0/0
00:00:51: OSPF: DR/BDR election on FastEthernet0/0
00:00:51: OSPF: Elect BDR 192.168.1.2
00:00:51: OSPF: Elect DR 192.168.1.2
00:00:51:        DR: 192.168.1.2 (Id)   BDR: 192.168.1.2 (Id)
00:00:51: OSPF: Send DBD to 192.168.1.2 on FastEthernet0/0 seq 0x7c8d opt 0x00 flag 0x7 len 32
00:00:51: OSPF: Build router LSA for area 0, router ID 192.168.1.1, seq 0x80000002
00:00:51: OSPF: DR/BDR election on FastEthernet0/0
00:00:51: OSPF: Elect BDR 192.168.1.1
00:00:51: OSPF: Elect DR 192.168.1.2
00:00:51: OSPF: Elect BDR 192.168.1.1
00:00:51: OSPF: Elect DR 192.168.1.2
00:00:51:        DR: 192.168.1.2 (Id)   BDR: 192.168.1.1 (Id)
00:00:51: OSPF: Build router LSA for area 0, router ID 192.168.1.1, seq 0x80000002
00:00:56: OSPF: Rcv DBD from 192.168.1.2 on FastEthernet0/0 seq 0x2feb opt 0x00 flag 0x7 len 32  mtu 1500 state EXSTART
00:00:56: OSPF: NBR Negotiation Done. We are the SLAVE
00:00:56: OSPF: Send DBD to 192.168.1.2 on FastEthernet0/0 seq 0x2feb opt 0x00 flag 0x2 len 52
00:00:56: OSPF: Rcv DBD from 192.168.1.2 on FastEthernet0/0 seq 0x2fec opt 0x00 flag 0x3 len 52  mtu 1500 state EXCHANGE
00:00:56: OSPF: Send DBD to 192.168.1.2 on FastEthernet0/0 seq 0x2fec opt 0x00 flag 0x0 len 32
00:00:56: OSPF: Rcv DBD from 192.168.1.2 on FastEthernet0/0 seq 0x2fed opt 0x00 flag 0x1 len 32  mtu 1500 state EXCHANGE
00:00:56: OSPF: Send DBD to 192.168.1.2 on FastEthernet0/0 seq 0x2fed opt 0x00 flag 0x0 len 32
00:00:56: Exchange Done with 192.168.1.2 on FastEthernet0/0
00:00:56: OSPF: Database request to 192.168.1.2
00:00:56: OSPF: sent LS REQ packet to 192.168.1.2, length 12
00:00:56: OSPF: Send DBD to 192.168.1.2 on FastEthernet0/0 seq 0x2fed opt 0x00 flag 0x0 len 32
00:00:56: Synchronized with with 192.168.1.2 on FastEthernet0/0, state FULL
00:00:56: %OSPF-5-ADJCHG: Process 101, Nbr 192.168.1.2 on FastEthernet0/0 from LOADING to FULL, Loading Done
00:00:56: OSPF: Build router LSA for area 0, router ID 192.168.1.1, seq 0x80000002


该贴已经同步到 jkrh9的微博

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2011-6-29 22:20:00 | 显示全部楼层
等待高手详解。
发表于 2011-6-30 00:26:20 | 显示全部楼层
two-way 状态是比较快的,不需要很多个Hello包协商吧。
之前没注意这么细节的问题,不过通过现象,不是R2在头几行有体现出,先把DR/BDR都定为自己吗?


这个是书上截的,说是在two-way的时候,看谁先发一个Hello包,里面就说自己是DR

收到包的人,看是否比自己大,如果没有的话,就回复一个包,说它才是DR

个人认为跟收发的先后有关系,不会两边都发


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2011-6-30 09:19:30 | 显示全部楼层
楼上正解。
发表于 2011-6-30 09:21:33 | 显示全部楼层
本帖最后由 Jeff. 于 2011-6-30 09:25 编辑

L2回答正解~
 楼主| 发表于 2011-6-30 12:34:59 | 显示全部楼层
薯薯 发表于 2011-6-30 00:26
two-way 状态是比较快的,不需要很多个Hello包协商吧。
之前没注意这么细节的问题,不过通过现象,不是R2在 ...

    DR/BDR选举过程
1. 在与一个或多个邻居之间的双向通信建立起来之后,(路由器)对每个邻居(发送来)的Hello包中的优先级、DR和BDR域进行检查。列出所有能够参加选举的路由器(也就是说,路由器的优先级高于0并且此路由器的邻居状态至少为“双向”);所有路由器都宣称自己为DR(将它们自己的接口地址置于Hello包的DR域中);而且所有路由器都宣称自己为BDR(将它们自己的接口地址置于Hello包的BDR域中)。进行计算的路由器也要将自身包括在此列表内,除非它被禁止参加选举。
2. 从(以上)备选路由器列表中,创造一个子集,此子集包含所有未宣称为DR的路由器(宣称自己为DR的路由器无法被选举为BDR).
3. 如果此子集中的一或多个邻居将它(们)自身的接口地址置于BDR域中,这些邻居中拥有最高优先级的路由器将被宣告为BDR。如果出现平局(路由器优先级相等),拥有最高Router ID的邻居将被选举出来。
4. 如果此子集中没有任何路由器被宣告为BDR,拥有最高优先级的邻居将被宣告为BDR。如果出现平局,拥有最高Router ID的邻居将被选举出来。
5. 如果一或多个备选路由器将它(们)自身的接口地址置于DR域中,拥有最高优先级的邻居将被宣告为DR。如果出现平局,拥有最高Router ID的邻居将被选举出来。
6. 如果没有任何路由器宣告自己为DR,则新选举出来的BDR将成为DR。
7. 如果进行计算的路由器是新选举出来的DR或者BDR,或者如果它不再是DR或者BDR,重复步骤2到6。
简而言之,当一个OSPF路由器启动并开始搜索邻居时,它先搜寻活动的DR和BDR。如果DR和BDR存在,路由器就接受它们。如果没有BDR,就进行一次选举将拥有最高优先级的路由器选举为BDR。如果多于一台路由器拥有相同的优先级,那么拥有最高路由器ID的路由器将胜出。如果没有活动的DR,BDR将被提升为DR然后再进行一次BDR的选举。

以上译自《Routing TCP/IP Volume I》 Jeff Doyle Cisco Press 1998 / PTP 2003

DR选举机制按照如下规则运作:将进行计算的路由器称为路由器X。路由器X将会检查所有连接到此网络并与路由器X建立起双向通信的邻居的列表。此列表恰好为所有与路由器X的状态等于或高于“2-Way”状态的所有邻居的总和。路由器X也将其本身包括在此列表内。将列表中无权参加选举的所有路由器剔除。(拥有优先级0的路由器将无权成为DR。)。基于列表中剩余的所有路由器执行如下步骤:
1.记录当前网络中的DR和BDR值。此值稍后将作比较之用。
2.为此网络按照如下方式计算BDR。只有那些在列表中的没有宣称自己为DR的路由器才能参加BDR选举。如果多于一台路由器宣称自己为BDR(例如,当前在它们的Hello包中它们将自己列为BDR,但不是DR),则拥有最高路由器优先级的路由器被选举成为BDR。如果路由器的优先级相等,则拥有最高Router ID的路由器将当选。如果没有路由器宣称自己为BDR,则选举拥有最高路由器优先级的路由器为BDR(同样不考虑那些宣称自己为DR的路由器),同样使用Router ID来打破平局。
3.按照如下方法为此网络计算新的DR。如果一或多个路由器宣称自己为DR(也就是说,当前在它们的Hello包中将它们自己列为DR),则拥有最高路由器优先级的路由器被宣告为DR。如果出现平局,拥有最高Router ID者胜出。如果没有路由器宣告自己为DR,则新选择出来的BDR成为DR。
4.如果路由器X现在被选为新的DR或者BDR,或者它不再成为DR或者BDR,重复步骤2和3,然后跳到步骤5。例如,如果路由器X现在是DR,当重复第2步时路由器X将不能再参加BDR的选举。此外,这也会保证没有任何路由器会同时宣告自己为BDR和DR。
5.作为选举的结果,路由器本身可能现在成为了DR或者BDR。路由器的接口状态将被依此而设置。如果路由器现在成为了BDR,则端口的新状态为“备份”。否则,接口的新状态成为DR Other。
6.如果所连接的网络是NBMA网络而路由器本身正好被选举为DR或者BDR,它必须开始发送hello包给那些无权成为DR的邻居。这是通过调用每个拥有路由器优先级0的邻居消息“Start”来实现的。
7.如果以上计算导致了DR或者BDR身份的改变,与此端口关联的邻接关系需要进行改变。某些邻接关系需要建立,而其他一些将被打破。为了实现此动作,为所有状态至少为“2-Way”的邻居调用消息“AdjOK?”。这将会导致它们重新检查邻接状态。

以上译自 RFC 2178

    像这上面说的,所有路由器都宣称自己为DR和BDR,但是为什么只有R2才宣称自己为DR、BDR,而R1却没有呢。还有“进行计算的路由器”是不是随便指定一台路由来充当?然后其他的路由器通过发送数据包到这台路由器参与选举?是不是先选举出BDR,然后这个BDR会被选举为DR,另外再重新选举BDR,是不是这样的思路?详细的流程不是很懂,关键是第一步,不知道是怎么理解的。
发表于 2011-6-30 15:04:42 | 显示全部楼层
我记得论坛上有DR BDR详解
 楼主| 发表于 2011-6-30 15:47:42 | 显示全部楼层
明天¤晴天℃ 发表于 2011-6-30 15:04
我记得论坛上有DR BDR详解

我已经搜索看过了,但是还是不太明白
发表于 2011-6-30 18:24:31 | 显示全部楼层
本帖最后由 magic_os 于 2011-6-30 18:31 编辑
jkrh9 发表于 2011-6-30 15:47
我已经搜索看过了,但是还是不太明白


别急..

感觉就是L2哥哥说的那样~

在HELLO包的时候(优先级都一样的前提下)

R1发出一个HELLO包 里面带了自己的RID 并且在刚开始的时候,将自己设定为DR和BDR

在同一个广播域中,所有路由启动的时候都向外宣告自己就是DR和BDR

并且在接到别的路由发来的HELLO包之后拿自己的RID和别的HELLO包里面的RID比较

如果对方的,比自己大,那就将DR设置成这个HELLO包的来源IP,如果比自己小,那就将自己设置成DR

这样一直发啊发..直到一个广播域中的所有路由之间全部HELLO了一遍..最后得到一个最大的RID IP

这个最高RID的路由的那个接口ip 就将成为这个广播域的DR

而次高的将成为BDR

这是一个同步的过程
................................

当DR离开的时候,BDR自动升级为DR,而DROther里面RID最大的 将成为BDR
应该就是这样了。

发表于 2011-7-1 10:24:31 | 显示全部楼层
jkrh9 发表于 2011-6-30 12:34
DR/BDR选举过程
1. 在与一个或多个邻居之间的双向通信建立起来之后,(路由器)对每个邻居(发送来 ...

一堆字啊~
看了半天,没怎么懂...大概那意思吧,以实验为准吧

我总觉得debug 没出现太详细的过程,不求甚解....
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-3-29 08:55 , Processed in 0.079165 second(s), 19 queries , Gzip On.

快速回复 返回顶部 返回列表