因为OSPF路由器之间会将所有的LSA毫不保留的互相交换,当网络达到一定规模的时候,LSA会形成一个庞大的数据库,那么就会给设备造成一定的压力,为了降低OSPF计算的复杂程度,缓存计算压力,OSPF采用区域的概念,将网络中的所有OSPF路由器划分成不同的区域,每个区域负责各自区域精确的LSA传递与路由计算,然后再将一个区域的LSA简化和汇总之后转发到另一个区域,这样 在区域内部拥有网络精确的LSA,在不同区域传递简化的LSA,区域的划分也具有路由防环的作用,所以采用了 hub-spoke架构,也就是采用核心与分支的拓扑。

看下图:

 

OSPF区域及虚链路_OSPF虚链路

如果一台OSPF路由器属于单个区域,即该路由器的所有接口同处于同一个区域,那么这台路由器称之为 internal router 如上图的 R2 R3 R4 如果一台路由器的不同接口属于不同的区域,那么这个路由器我们称之为 ABR ,例如图中的 R1 . ABR可以将一个区域的LSA汇总后转发至另一个区域,如果路由器将外部路由协议重分布进入OSPF,那么这台路由器称之为ASBR。例如图中的R5,如果只是将OSPF重分布进入其他协议,而没有将其他协议分布进入OSPF,那么路由器就不能称之为ASBR

因为OSPF的区域采用了 HUB-SPOKE 架构,所以必须定义出一个核心,其他部分与核心相连,OSPF中 Area0就是所有区域的核心,称为 backbone 主干区域。其他区域称为 normal 区域,理论上所有的常规区域应该直接和主干区域相连,常规区域只能和主干区域交换LSA, 两个常规区域之间即使相连也无法直接互换LSA, Area0 就相当于是一个中转站,两个常规区域之间交换LSA,只能先交给  Area0 再由 Area0进行转发,常规区域间无法互相转发

OSPF区域是基于路由器的接口划分的,而不是基于整台路由器划分的,一台路由器可以属于单个区域,也可以分属不同区域。

但是在某些特殊的情况下,某些常规区不能和主干区域进行直连,这时便无法得到其他区域的路由,所以OSPF协议提出了虚链路的解决方案,将骨干区域的范围通过虚拟的方法进行扩展到相邻常规区域的位置,因而让不能直接与骨干区域相连的区域,最终可以与骨干区直连。

以下图为例

 

OSPF区域及虚链路_OSPF虚链路_02

R1和R2之间属于 area0 骨干区,其他的区域为常规区,当 R2和R3之间的 area1配置了虚链路之后,就变为的骨干区,所以路由条目会从 inter-area route 变为 intra-area route 也就是路由的表示形式从 OIA 变为 O的形式,在进行OSPF虚链路扩展时,是将transit area中与骨干区直连的ABR(R2)和连接另一个常规区域的ABR(R3)相连,在连接这两个ABR时,使用双方的 route-id 进行连接。

 

实验配置:

 

R1>en

R1#config

R1(config)#

R1(config)#int lo 0

R1(config-if)#ip add 1.1.1.1 255.255.255.0

R1(config-if)#no shut

R1(config-if)#exit

R1(config)#int f1/0

R1(config-if)#ip add 12.1.1.1 255.255.255.0

R1(config-if)#no shut

R1(config-if)#exit

R1(config)#router ospf 100

R1(config-router)#net 1.1.1.0 0.0.0.255 area 0

R1(config-router)#net 12.1.1.0 0.0.0.255 area 0

R1(config-router)#exit

R1(config)#

 

 

 

R2>en

R2#config

R2(config)#int lo 0

R2(config-if)#

R2(config-if)#ip add 2.2.2.2 255.255.255.0

R2(config-if)#exit

R2(config)#int f1/0

R2(config-if)#ip add 12.1.1.2 255.255.255.0

R2(config-if)#no shut

R2(config-if)#exit

R2(config)#int f1/1

R2(config-if)#ip add 23.1.1.1 255.255.255.0

R2(config-if)#no shut

R2(config-if)#exit

R2(config)#router ospf 100

R2(config-router)#net 2.2.2.0 0.0.0.255 area 0

R2(config-router)#net 12.1.1.0 0.0.0.255 area 0

R2(config-router)#net 23.1.1.0 0.0.0.255 area 1

R2(config-router)#exit

R2(config)#

 
R3>en
R3#config
R3(config)#int lo 0
R3(config-if)#ip add 3.3.3.3 255.255.255.0
R3(config-if)#no shut
R3(config-if)#exit
R3(config)#int f1/0
R3(config-if)#ip add 23.1.1.2 255.255.255.0
R3(config-if)#exit
R3(config)#int f1/1
R3(config-if)#ip add 34.1.1.1 255.255.255.0
R3(config-if)#no shut
R3(config-if)#exit
R3(config)#router ospf 100
R3(config-router)#net 3.3.3.0 0.0.0.255 area 1
R3(config-router)#net 34.1.1.0 0.0.0.255 area 2
R3(config-router)#net 23.1.1.0 0.0.0.255 area 1
R3(config-router)#exit
R3(config)#
 
R4>en
R4#config
R4(config)#int lo 0
R4(config-if)#ip add 4.4.4.4 255.255.255.0
R4(config-if)#no shut
R4(config-if)#exit
R4(config)#int f1/0
R4(config-if)#ip add 34.1.1.2 255.255.255.0
R4(config-if)#no shut
R4(config-if)#exit
R4(config)#router ospf 100
R4(config-router)#net 4.4.4.0 0.0.0.255 area 0
R4(config-router)#net 34.1.1.0 0.0.0.255 area 2
R4(config-router)#exit
R4(config)#
 
 

OSPF区域及虚链路_OSPF虚链路_03

 

通过查看路由器R1的路由表,我们发现R1没有学到34.1.1.0 以及 4.4.4.4 的路由条目

而且我们发现 23.1.1.0这个路由条目的类别属于 OIA

为了让R1可以学习到4.4.4.4以及 34.1.1.0 的路由条目,那么我们就需要在 R2和R3之间配置虚链路

 

 

R2(config-router)#area 1 virtual-link ?

R2(config-router)#area 1 virtual-link 3.3.3.3

 

 

R3(config)#router ospf 100

R3(config-router)#area 1 virtual-link  2.2.2.2

虚链路配置成功

此时我们再次查看路由表

 

OSPF区域及虚链路_OSPF虚链路_04

 

我们看到R1成功学到  34.1.1.0网段以及4.4.4.4 路由条目

配置虚链路注意事项

1.OSPF虚链路必须是在两个拥有共同区域的ABR之间建立,其中至少有一个ABR是连接骨干的