OSPF路由协议概念

OSPF 是Open Shortest Path First(开放最短路由优先协议)的缩写。它是IETF(Internet Engineering Task Force)组织开发的一个基于链路状态的内部网关协议。目前使用的是版本2(RFC2328),其特性如下:

  1. 适应范围——支持各种规模的网络,最多可支持几百台路由器。
  2. 快速收敛——在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。
  3. 无自环——由于OSPF 根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。
  4. 区域划分——允许自治系统的网络被划分成区域来管理,区域间传送的路由信息被进一步抽象,从而减少了占用的网络带宽。
  5. 等值路由——支持到同一目的地址的多条等值路由。
  6. 路由分级——使用4 类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。
  7. 支持验证——支持基于接口的报文验证以保证路由计算的安全性。
  8. 组播发送——支持组播地址。

OSPF路由协议计算过程

每个支持OSPF 协议的路由器都维护着一份描述整个自治系统拓扑结构的链路状态数据库(Link Sate Database,简称为LSDB)。每台路由器根据自己周围的网络拓扑结构生成链路状态广播(Link State Advertisement,简称为LSA),通过相互之间发送协议报文将LSA 发送给网络中其它路由器。这样每台路由器都收到了其它路由器的LSA,所有的LSA 一起组成链路状态数据库。

  • 由于LSA 是对路由器周围网络拓扑结构的描述,那么LSDB 则是对整个网络的拓扑结构的描述。路由器很容易将LSDB 转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。显然,各个路由器得到的是一张完全相同的图。
  • 每台路由器都使用SPF 算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由,各个路由器各自得到的路由表是不同的。

一、Router ID

一台路由器如果要运行OSPF 协议,必须存在Router ID。如果没有配置ID 号,系统会从当前接口的IP 地址中选出IP 地址最大的作为router id。一般建议选择loopback 接口的IP 地址作为本机ID 号,因为该接口永远UP(除非手工shutdown)。

二、DR与BDR

DR(Designated Router,指定路由器)

在广播网络或者多点访问网络中,为使每台路由器能将本地状态信息广播到整个自治系统中,在路由器之间要建立多个邻居关系,这使得任何一台路由器的路由变化都会导致多次传递,浪费宝贵的带宽。为解决这一问题,OSPF 协议定义了DR,所有路由器都只将信息发送给DR,由DR 将网络链路状态广播出去,除DR/BDR 外的路由器(称为DR Other)之间将不再建立邻居关系,也不再交换任何路由信息。

BDR(Backup Designated Router,备份指定路由器)

如果DR 由于某种故障而失效,这时必须重新选举DR,并与之同步。这需要较长的时间,在这段时间内,路由计算是不正确的。为了能够缩短这个过程,OSPF 提出了BDR的概念。BDR实际上是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR,并重新选举BDR。

左侧的网络中,右上路由器连接以太网的接口被选举为了DR,右下路由器连接以太网的接口被选举为了BDR,因此它们分别与邻居路由器建立了完全邻接关系,而DROther路由器接口之间则不会建立完全邻接关系。

右侧的网络中,左上路由器连接帧中继网络的接口被选举为了DR,而右上路由器连接该网络的接口被选举为了BDR,由于下方两台路由器连接帧中继的接口为DROther,因此它们之间尽管实现了双向通信,但是却不会建立完全邻接关系,也不会直接交换链路状态信息。

三、区域(Area)

当网络中的OSPF 路由器数量非常多时,会导致LSDB变得很庞大,占用大量存储空间,消耗很多CPU 资源来进行SPF 计算。并且,网络规模增大后,拓扑结构发生变化的概率也会增大,导致大量的OSPF 协议报文在网络中传递,降低网络的带宽利用率。

OSPF 协议将自治系统划分成多个区域(Area)来解决上述问题。区域在逻辑上将路由器划分为不同的组。不同的区域以区域号(Area ID)标识,其中一个最重要的区域是区域0,也称为骨干区域(backbone area)。

骨干区域完成非骨干区域之间的路由信息交换,它必须是连续的,对于物理上不连续的区域,需要配置虚连接(virtual links)来保持骨干区域在逻辑上的连续性。

区域边界路由器ABR

连接骨干区域和非骨干区域的路由器称作区域边界路由器(Area Border Router,简称为ABR)。OSPF 中还有一类自治系统边界路由器(Autonomous System Boundary Router,简称为ASBR),实际上,这里的AS 并不是严格意义的自治系统,连接OSPF 路由域(routing domain)和其它路由协议域的路由器都是ASBR,可以认为ASBR是引入OSPF 外部路由信息的路由器。

四、路由聚合

AS 被划分成不同的区域,每一个区域通过OSPF 边界路由器(ABR)相连,区域间可以通过路由汇聚来减少路由信息,减小路由表的规模,提高路由器的运算速度。ABR 在计算出一个区域的区域内路由之后,查询路由表,将其中每一条OSPF 路由封装成一条LSA 发送到区域之外。

OSPF 的协议报文

HELLO 报文(Hello Packet):

最常用的一种报文,周期性的发送给本路由器的邻居。内容包括一些定时器的数值、DR、BDR 以及自己已知的邻居。

DD 报文(Database Description Packet):

两台路由器进行数据库同步时,用DD 报文来描述自己的LSDB,内容包括LSDB中每一条LSA 的摘要(摘要是指LSA 的HEAD,通过该HEAD 可以唯一标识一条LSA)。这样做是为了减少路由器之间传递信息的量,因为LSA 的HEAD 只占一条LSA 的整个数据量的一小部分,根据HEAD,对端路由器就可以判断出是否已有这条LSA。

LSR 报文(Link State Request Packet):

两台路由器互相交换DD 报文之后,知道对端的路由器有哪些LSA 是本地的LSDB所缺少的,这时需要发送LSR 报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。

LSU 报文(Link State Update Packet):

用来向对端路由器发送所需要的LSA,内容是多条LSA(全部内容)的集合。

LSAck 报文(Link State Acknowledgment Packet):

用来对接收到的LSU 报文进行确认。内容是需要确认的LSA 的HEAD(一个报文可对多个LSA 进行确认)。

OSPF配置:

配置Router ID

为保证OSPF 运行的稳定性,在进行网络规划时,应确定路由器ID 的划分并手工配置。

一般可直接指定loopback口的IP地址

r1(config)#interface loopback 0
r1(config-if)#ip address 3.3.3.3 255.0.0.0 //这里的ip将是配置虚链路时的ID

说明:OSPF 启动后修改的Router ID,需要重新启动OSPF 进程之后,Router ID 才能在OSPF 中生效。

启动OSPF

OSPF 支持多进程,一台路由器上启动的多个OSPF 进程之间由不同的进程号区分。OSPF 进程号在启动OSPF 时进行设置,它只在本地有效,不影响与其它路由器之间的报文交换。

r1(config)#router ospf 1(1-65535)

说明: 启用OSPF时,需要注意:如果在启动OSPF 时必须指定进程号;在同一个区域中的进程号必须一致,否则会造成进程之间的隔离。

发布直连网段并设置区域

OSPF协议将自治系统划分成不同的区域(Area),在逻辑上将路由器分为不同的组。

区域ID 可以采用十进制整数或IP 地址形式输入。

r1(config-router)#network 192.168.1.0 0.0.0.255 area 0
r1(config-router)#network 10.0.0.0 0.255.255.255 area 1

说明:一台路由器可能同时属于不同的区域(这样的路由器称作ABR),但一个网段只能属于一个区域。

配置OSPF 虚连接

OSPF协议规定:所有非骨干区域必须与骨干区域保持连通,即ABR 上至少有一个端口应在区域0.0.0.0 中。如果一个区域与骨干区域0.0.0.0 没有直接的物理连接,就必须建立虚连接来保持逻辑上的连通。

虚连接是在两台ABR 之间,通过一个非骨干区域内部路由的区域而建立的一条逻辑上的连接通道。它的两端必须都是ABR,并且必须在两端同时配置。虚连接由对端路由器的Router ID 来标识。为虚连接提供非骨干区域内部路由的区域称为运输区域(Transit Area)。

r1(config-router)#area 1 virtual-link 3.3.3.3
r3(config-router)#area 1 virtual-link 1.1.1.1

将虚连接看做“逻辑通道”是因为:两个ABR 之间的OSPF 路由器只对报文进行透明转发(由于协议报文的目的地址不是这些路由器,所以这些报文对于他们而言是透明的,只是当作普通的IP 报文转发),两台ABR 之间直接传递路由信息。区域内的路由器同步方式没有因此改变。

路由重发布

网络规模越来越大,使用的协议不统一,要让两个或多个使用不同路由协议的网络连接起来,能够互相通信,必须使用路由重发布功能。

以下命令均在路由模式内完成

重分布动态路由

r1(config-router)#redistribute (动态协议)metric XX (除ospf外其他协议不选择则默认为无穷大)subnet 

重分布静态路由

r1(config-router)#redistribute static metric (默认为1)subnet

重分布默认路由

r1(config-router)#default-information originate

重分布直连路由

r1(config-router)#redistribute connected subnets