OSPF的DR和BDR选举

邻居

多个共享网络分段的路由器将在这个网络分段上成为邻居。这些邻居是通过Hello协议选举出来的。使用IP组播将Hello数据包周期性地从每个接口发出。

两个路由器只有在以下方面达成共识时,它们才能成为邻居:

  • 区域ID 这里的这个原则是,在某一特定网络分段上的两个路由器的接口必须要属于同一个区域。当然,这些接口也必须归属于相同的子网。

  • 认证OSPF 允许为特定的区域设置密码。虽然路由器间的认证不是必需的,但在必要时可以设置它。不过,需要记住的是,如果使用了认证,当需要路由器成为邻居时,那么它们需要在该网络分段上具有相同的密码。

  • Hello 和dead间隔OSPF 在每个网络分段上交换Hello数据包。路由器为了能在网络分段上确认彼此之间的存在关系,并且在广播和非广播的多路访问网络分段上进行指定路由器( DR )的选举,需要使用这样- -个存活系统。

Hello间隔用于设定两个Hello数据包之间的秒计数。而dead间隔是指路由器发出的Hello数据包没有被邻居看到,因而宣称此OSPF路由器宕机所经过的秒数。OSPF要求,两个邻居间设置的这些时间间隔必须是完全相同的。如果这些间隔中的任何一个不相同, 则此网络分段上的路由器将不能成为邻居。可以使用show ip ospf interface 命令来查看这些定时器。

邻接

在选举过程中,邻接是成为邻居之后的下一个步骤。邻接的路由器指那些经过简单的Hello数据交换后,进入数据库交换过程的路由器。为了减少在特定网络分段中交换信息的数量,OSPF 在每个多路访问网络分段中需要选举出一个指定路由器(DR )和备份指定路由器( BDR )。

BDR是由选举产生的用于防止DR失效的备份路由器。这样设计是要为路由器建立一个用于信息交换的中心连接点。这样,更新数据的交换方式便从每个路由器都需要与网络分段中其他各个路由器进行交换,改变为每个路由器只需要发送它的信息给DR和BDR。随后,再由DR将这些信息中转给每个路由器。

DR 和BDR的选举

DR和BDR的选举是通过Hello协议来完成的。在每个网络分段上Hello数据包是通过IP组播来交换的。然而,只有在广播和非广播的多路访问网络(如以太网和帧中继)的网络分段上才会进行DR和BDR的选举。点到点链路,例如串行WAN连接,不会进行DR/BDR的选举。

在广播和非广^播的多路访问网络上,网络分段中带有最高OSPF优先级的路由器将会成为本网络分段中的DR。这个优先级可以使用how ip ospf interface命令进行查看,它的默认取值为1。如果所有的路由器都使用默认优先级设置,那么拥有最高路由器ID ( RID)的路由器将会胜出。

我们知道,RID是由OSPF启动时所有接口地址中最高的IP地址确定的。使用环回(逻辑)接口可以修改RID,下一节将介绍环回接口。如果将某个路由器的接口优先级设置为0,则在这个接口上该路由器不会参加DR和BDR的选举。这个优先级为0的接口其状态将随后变为DROTHER。

现在我们来讨论下OSPF路由器上的RID。

01.

OSPF 和环回接口

在使用OSPF路由选择协议时,为其配置环回接口是很重要的工作,思科建议,不论在路由器上是否配置使用OSPF,最好都配置环回接口。

环回接口就是一些逻辑接口,即虚拟的软件接口;它们并不是真正的路由器接口。在OSPF配置中使用环回接口就是为了确保在OSPF进程中总存在一个激活的接口。环回接口可以用于OSPF的配置和诊断。在路由器上配置环回接口的原因是,如果不配置环回接口,路由器上的最高激活IP地址将在路由器启动时成为该路由器的RID。而RID用于路由的通告以及DR和BDR的选举。

注意

默认情况下,OSPF 会使用启动时漱活接口中最高的IP地址作为其ID。然而,逻辑接口可以取代这个数值。任何逻辑接口中的最高IP地址总会成为路由器的RID。

01.

配置环回接口

对环回接口的配置通常是件非常轻松的工作,因为它是OSPF配置中最简单的部分,我们现在也都需要稍稍休息下,不是吗?那么坚持住,我们现在要步入最后阶段了!

首先,在Corp路由器上使用show ip ospf命令,来看下它的RID:

Corp#sh ip ospf

Routing Process "ospf 132* with ID 10.1.5.1

[output cut]

可以看到Corp的RID为10.1.5.1,即该路由器的FastEthermet0/0接口。

下面将使用一个完全不同的IP地址方案来配置它的环回接口:

Corp(config)#int 1oopback

*Mar 22 01:23:14. 206: %LINEPROTO-S-UPDOWN: Line protoco1 on Interface

Loopback0, changed state to up

Corp(config-if)#ip address 172.31.1.1 255.255.255.255

这里选用的IP方案其实并不重要,但要保证每个IP必须在一个独立的子网中。通过使用/32掩码,就可以选择使用任何一个想用的IP地址,只要任意两个路由器路上不要使用相同的地址即可。

R1#config t

R1(config)#int 1oopback 0

*Mar 22 01:25:11.206: %LINEPROTO-S-UPDOWN: Line protoco1 on Interface

Loopback0, changed state to up

R1(config-if)#ip address 172.31.1.2 255.255.255.255

这里是对R2上的环回接口进行的配置:

R2#config t

R2(config)#int 1oopback 0

*Mar 22 02:21:59. 686: XLINEPROTO-5-UPDOWN: Line protoco1 on Interface

Loopback0, changed state to up

R2(config-if)#ip address 172.31.1.3 255.255.255.255

这里是对R3上的环回接口进行的配置,这里使用了一个不同的IP 地址,随后解释为什么要这样做: 

R3#config t

R3(config)#int loopback 0

*Mar 22 02:01:49. 686: %LINEPROTO-5-UPDOWN: Line protocol on Interface

Loopback0, changed state to up

R3(config-if)#ip address 172.31.1.4 255.255.255.255

我可以很肯定地相信,你想知道255.255.255.255 (/32)这一IP地址掩码的含义,并且也想知道为什么不使用255.255.255.05来代替它。很好,虽然两个掩码都能用在这里,但被称为是主机掩码的/32掩码,对于环回接口显得更为恰当,因为这样使用可以节省子网的空间。注意,如果我不使用/32掩码,那么我如何能使用172.16.10.1. 172.16.10.2、172.16.10.3 和172.16.10.4这些地址?那样我就需要为每个路由器设置一个独立的子网!

在继续下面的内容之前,我们需要知道,设置环回接口是否将路由器的RID进行了修改?下面通过查看Corp上的RID来检查下这样配置的结果:

Corp#sh ip ospf

Routing Process "ospf 132" with ID 10.1.5.1 .

这是怎么回事?你可能会认为,既然我们已经设置了逻辑接口,那么此逻辑接口下的IP地址就应该自动地成为该路由器的RID,对吗?在一定程度上对,只有完成下面两件事情中的一件时,事情才真正有变化,这两件事是:重启路由器,或者在路由器上删除OSPF然后重新创建它的数据库。但任何一个都不是理想的选项。我将选择使用重新引导Corp路由器,因为这是这两个选项中较容易实现的一个。

现在我们再来看一下RID:

Corp#sh ip ospf

Routing Process "ospf 132* with ID 172.31.1.1

是的,它改过来了。现在路由器Corp有了一个新的RID!因此,我猜只有将所有的路由器都重启一遍,才能将它们的RID重新设置为我们指定的逻辑地址。或许不用,这里还有另外一种方式。使用router ospf process-id 命令来为路由器添加一个新的RID,从而替换原来的ID,对此你会有什么看法?不如让我们试试吧!下面就是一个在路由器R3上实现的示例:

看到了吗,这样也可以!这里实现了对RID的修改,但却没有重启路由器!但是,等一下, 我们在此之前也设置了一个环回接口(逻辑接口)。那这个环回接口是否能够战胜router-id命令?好,我们来看下答案。逻辑(环回)接口不能覆盖router-id 命令,即我们不能通过重新启动路由器来使逻辑接口地址成为RIC。于是,可以得到这样的修改顺序:

(1)默认情况下为最高激活接口;

(2)最高逻辑接口可以覆盖物理接口;

(3)命令router-id可覆盖接口和环回接口。

到这里唯一需要回答的问题是,是否需要在OSPF下通告环回接口。对于是否通告所使用的地址各有不同的优点和缺点。使用不通告的地址可以节省真正可用的IP地址空间,但是这样的地址不会出现在OSPF表中,因此不能ping到它。所以基本上,这里所面对的问题是要在简化网络调试和节省地址空间之间作出选择。怎么办?一个实用的策略就是使用私有IP地址,就像示例中所做的那样。这样做,一切都很顺利!

02.

OSPF 接口优先级

在OSPF中另一种替代使用环回接口来配置DR和BDR的方式就是“指定"选举。通过配置路由器接口的优先级可以做到这一点,只要在选举进行时配置的优先级比其他路由器的优先级高就行。换句话说,我们可以使用优先级代替逻辑地址来迫使某台路由器成为网络中的DR或BDR。图9-6给出了一个示例。注意在图9-6中,可以使用哪个选项来确保路由器R2能被选举为此局域网(广播多路访向)分段中的指定路由器(DR) ?首先,需要确定每个路由器的RID, 然后推断在172.16.1.0局域网中哪个路由器会是默认的DR。

在这里,不难看出R3将会是默认的DR,因为它拥有最高的RID,其值为192.168.11.254。要确保R2被选举为此局域网分段172.16.1.0/24 中的DR,这里给出了3个选项:

  • 配置路由器R2上Fa0/0接口的优先级比此以太网中其他任-接口的优先级都高;

  • 在R2上配置一个环回接口,并使它的IP地址比其他路由器上的任一IP 地址都高;

  • 将R1和R3的Fa0/0接口的优先级取值修改为0。

如果在路由器RI和R3上将接口的优先级设置为零(0),那么将不允许它们参加这个选举过程。但是这可能不是最好的方式,这样,我们只能在前两个选项中进行选择。由于你已经掌握了如何配置-个环回(逻辑)接口,这里就只给出了如何在路由器R2的Fa0/0接口上设置优先级的操作:

R2#config t

R2(config)#int f0/0

R2(config-if)#ip ospf priority ?

<0-255> Priority

R2(config-if)#ip ospf priority 2

这就是所要进行的配置!由于所有的路由器接口的默认优先级都为1,因此通过将此接口的优先级设置为2,就可以确保它自动成为此局域网分段中的DR。将某个接口的优先级设置为255,表示没有人能击败你的路由器!

对于已经选举结束的网络,即使修改了路由器接口的优先级,但在已存在的DR或BDR被关闭之前,此路由器也不会成为此局域网分段的DR。也是说,且某个选举发生过了,所有的一切也就被暂时确定了,直到被选出的DR和BDR被重启和/或关闭,否则选举不会再次进行。所以,即使拥有更好RID的路由器出现在网络中,也并不意味着DR或BDR会发生改变!使用show ip ospf interface命令可以查看优先级:

注意 

记住,可以使用debug ip ospf adj命令在一个广播或非广播的多路访问网络中查看选举发生的过程。

01.

OSPF 故障诊断

为了进行故障诊断、维护并修复与OSPF相关的问题,本节中将要求你完成对OSPF的配置及配置输出的验证。

如果看到如下所示的配置,你必须知道,路由器不会接收这样的输入,因为这里使用的通配符不正确:

Router(config)trouter ospf 1

Router(config- router)#network 10.0.0.0 255.0.0.0 area 0

正确的声明应该如下:

Router(config)trouter ospf 1

Router(config- router)#network 10.0.0.0 0.255.255.255 area 0

接下来,我们来看张图并判断下哪一个路由器可能成为这个区域中的指定路由器。图9-7中给出了通过2个交换机和1个WAN链路连接起来的6个路由器所组成的网络。

在图9-7中,哪个路由器有可能被选举为指定路由器(DR) ?这里所有路由器的OSPF优先级都为默认值。

注意每个路由器的RID值。RID值最高的路由器应该是路由器A和B,因为它们拥有最高的IP地址。路由器B将成为DR,而路由器A将成为BDR。好了,现在这里的实际情况是:由于默认情况下点到点链路上不会进行选举,因此顶部的LAN将会单独进行选举。但是,你是为了通过CCNA考试而学习这些内容的,因此,在这里最佳答案是路由器B。

下面我们使用另一个命令来验证OSPF的配置: show ip ospf interface 命令。注意观察下面路由器A和B的输出,并判断下为什么两个直接相连接的路由器不能建立邻接关系:

两个路由器的输出看上去都很正常,只是它们的Hello和Dead定时器有所不同。路由器A的Hello和Dead定时器分别是5和20,而路由器B的Hello和Dead定时器则是10和40,这一取值为OSPF的默认定时值。如果两个直接相连接的路由器的定时器设置不相同,那么它们将不能形成邻接关系。同时也应该注意到,show ip ospf interface 命令也将给出你区域中的指定路由器和备份指定路由器。

图9-8给出的网络中包含4个路由器和2个不同的路由选择协议。

如果所有的参数都被设置为默认值,并且再发布没有被配置,那么你认为路由器A将会使用哪条路径到达路由器D?由于思科已经不再使用的老式IGRP的AD值为100,而OSPF的AD值为110,因此,路由器A将会通过路由器C来发送数据包到路由器D.

仔细研究图9-9,图中的路由器上正在运行着OSPF,并且一条ISDN链路提供了到达远程办公室局城网的连接。

在图9-9中所示的ISDN链路上,需要最小化网络开销时,公司路由器上应该配置使用哪种类型的路由来建立与办公室远程网络的连接?

对于这个问题,最佳的解决方案就是废弃这个ISDN链路,并从远程办公室建立一个宽带链路到因特网上,然后通过因特网创建一个从公司办公室到远程办公室的VPN。是的,这样很好,为什么不呢?但是,在这里问题所要求的是,我们如何通过使用ISDN链路来实现连接,并要求实现最小化的开销。这样唯一能解决问题的方式就是在公司路由器上创建一个静态路由来连接这个远程网络;而其他方式都会需要更多的带宽。

(0)

相关推荐