LAN中的指定路由器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

OSPF通过指定路由器(designated router, DR)来优化LSA的洪泛过程。如果不使用DR,共享一条数据链路的每对路由器都会建立完全的邻接关系。例如,如果LAN中有六个路由器,在没有DR的情况下,存在15个路由器对,这意味着要建立15次完全邻接关系,显然这样的效率是无法让人满意的。而DR(或后备DR,即BDR)的使用,可以有效地减少冗余LSA的不必要交换。

(注意:DR还有另一个主要功能,它可以用来创建表示子网的LSA类型2。)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

步骤如下:

1R1发送DD到所有DR多点传送地址(224.0.0.6);

2DR用同样的DD包应答;

3DR将同样的DD包再多点传送给所有SPF路由器(224.0.0.5)。

使用show ip ospf neighbor命令可以查看R1的邻接路由器状态,如下:

DRBDR与所有邻接路由器建立完全邻接关系,而两个非DRBDR)路由器不能建立这种关系,它们仅停留在2-way状态,这表示它们通过了Hello消息的参数匹配检查,但是不再进行后续DD包的交换。

这里再明确一下两个概念之间的差别:

1)邻接路由器(neighbors):两个路由器互相连通,它们交换Hello消息,且参数匹配。

2)邻接关系(adjacent):两个邻接路由器直接进行完全的DDLSU包交换。

 

DR的选举

DR的选举在路由器成为neighbors之后(2-way状态)开始,在发送DD包并进入ExStart状态之前完成。当在2-way状态时,如果接收到的Hello消息声明DR0.0.0.0,这意味着现在还没有选举出DR,需要展开选举进程(一般这种情况发生在LAN中断恢复后),为了让所有路由器都参与选举,OSPF会设置一个等待时间,其值与Dead定时器一样。如果接收到Hello消息已经列出DRRID,那么路由器不用选举,而是保留Hello中所声明的当前DR(一般这种情况发生在单个路由器失去LAN连接后又恢复时)。

DR/BDR的选举规则:

1)所有OSPF优先权在1-255之间的路由器在发送的Hello中将DR字段置为自身RID来参与选举;

2)路由器检查接收的Hello,查看其它路由器的优先权设置、RID以及是否参选;

3)如果在接收到的Hello中发现更有竞争力的DR参选者,路由器就不再参选,而是认为该

参选者应予当选;

4)认为参选者更有竞争力的首要条件是其有更高的优先权;

5)认为参选者更有竞争力的其次条件是其有更高的RID

6)路由器并未参选DR,但拥有更高的优先权(或在优先权一样时,拥有更高的RID),则成为BDR

7)如果在选举完后又来了新的路由器参选,或者原路由器提升了其优先权,它不能剥夺已有DRBDR)并接替其位置。

8DR选定后如果失效,则BDR接替其位置成为DR,同时选举新的BDR

 

WAN中的DROSPF网络类型

DRLAN中的使用可以提升LSA洪泛的效率(多路由器时)。同样,在非广播式多接入网络(NBMA)中,也可以选择使用DR来提升效率。

对每个接口,Cisco基于OSPF网络类型来配置其是否使用DR以及其他一些关键属性,这主要包括:

1)是否在该接口选举DR

2)是静态配置邻接路由器(使用neighbor命令),还是通过多点传送Hello包来动态发现邻接路由器;

3)是否允许在同一子网内有两个以上的邻接路由器。

默认情况下,LAN接口使用的OSPF网络类型是broadcast,此时选举DR,动态发现邻接路由器,并允许同一子网有两个以上路由器。对于HDLCPPP连接,OSPF默认使用point-to-point的网络类型,此时不选举DR(因为没必要),动态发现邻接路由器,同一子网只有两个IP地址。

OSPF网络类型可以通过ip ospf network type接口子命令来设置。OSPF网络类型如下表所示:

接口类型

是否使用DR/BDR

默认Hello间隔

是否需要neighbor命令?

同一子网是否允许两台以上的主机

broadcast

10

point-to-point

10

nonbroadcastNBMA

30

point-to-multipoint

30

point-to-multipoint nonbroadcast

30

loopback

 

 

 

●在NBMA网络上的OSPF网络类型

对于帧中继上的OSPF,网络类型可能用起来有点麻烦,主要有如下一些需要注意的地方:

1)确保默认的Hello/Dead定时器不会导致Hello参数匹配性检查失败。

2)一台路由器希望参选DR,而另一台路由器不参选,此时邻接关系可以建立并交换完全的LSA。但是,show命令的输出却可能有问题,下一跳路由器可能不可达。所以,确保在同一NBMA子网中的所有路由器使用的OSPF网络类型要不都使用DR,要不都不使用DR

3)如果使用DRDRBDR到子网中的其他所有路由器必须都有一条PVC连接,否则,它们之间无法学习路由。

4)如果一台路由器使用静态neighbor命令配置了,那么PVC另一端的路由器就不需要再使用neighbor命令,但是为了清晰起见,还是两端同时配置为好。

帧中继上的OSPF有两个非常简单的网络类型选项:point-to-point(默认)和point-to-multipoint,它们都不需要DR和使用neighbor命令。

 

OSPF网络类型(NBMA)配置实例

配置说明:

1R1R3R5的配置是正确的,使用的是OSPF网络类型nonbroadcast

2R6配置有问题(遗漏了ip ospf priority命令),导致其错误地选为DR

3R4仍然用的是默认网络类型point-to-point,用show命令可以看出问题。

配置:

1R1的配置:

router ospf 1

 log-adjacency-changes detail

 network 0.0.0.0 255.255.255.255 area 0

 neighbor 10.1.111.3

 neighbor 10.1.111.4

 neighbor 10.1.111.5

 neighbor 10.1.111.6

2R3的配置:

interface Serial0/0.1 multipoint

 ip address 10.1.111.3 255.255.255.0

 ip ospf priority 0

 frame-relay interface-dlci 100

!

router ospf 1

 network 0.0.0.0 255.255.255.255 area 0

3R4的配置:

router ospf 1

 network 0.0.0.0 255.255.255.255 area 0

4R5的配置:

interface Serial0.1 multipoint

 ip address 10.1.111.5 255.255.255.0

 ip ospf priority 0

 frame-relay interface-dlci 100

!

router ospf 1

 network 0.0.0.0 255.255.255.255 area 0

5R6的配置:

router ospf 1

 network 0.0.0.0 255.255.255.255 area 0

注意事项:

1OSPFneighbor命令定义的邻接路由器优先权(默认0)被接收到的Hello消息中邻接路由器所声明的优先权所覆盖,这就是上面配置中R6会选举为DR的原因。

2neighbor命令只需要在一个路由器上配置即可。

3R4因为配置为point-to-point网络类型,所以它会跟R1建立完全邻接关系,即使如此,它却不能通过帧中继网络路由包到R3R5R6,这可能导致问题出现。

 

SPF(最短路径优先)计算

SPF算法用于检查LSDB中的LSA来得出路由权值的数据模型。该数据模型包括:

1)路由器

2)链路

3)链路开销

4)链路当前状态

SPF会发现到每个子网的所有可能路由,并对路由器每个外发接口计算路由开销(cost),然后选择开销最小的路径,OSPF再将这些最小开销路由载入路由表。如上图,S2计算两条到子网10.5.1.0/24的可能路径,发现最短的是通过S2VLAN 1接口(R2为下一跳路由器)。

 

●稳定状态下的操作

网络稳定下来之后,OSPF会继续保持的操作:

1)每台路由器基于接口hello间隔,发送Hello

2)每台路由器期待在dead间隔之内接收到邻接路由器的Hello消息,如果没接收到,则认为该邻接路由器失效。

3)每台路由器基于每条LSA的链路状态刷新(LSRefresh)间隔(默认30分钟)重新广播LSA

4)每台路由器希望在每条LSAMaxage定时器(默认60分钟)时限内刷新LSA