1  OSPF简介

OSPFOpen Shortest Path First,开放式最短路径优先协议)是一种内部网关协议,应用在AS Autonomous System,自治系统)内部,使设备获得远端网络的路由。

在动态路由诞生初期,网络中主要使用的是RIPRouting Information Protocol,路由信息协议)路由协议。RIP是距离矢量路由协议,存在收敛慢、路由环路、扩展性差等问题,只能应用于简单网络。而OSPF Version2(以下简称为OSPFv2)是链路状态路由协议(Link-State Routing Protocols),能够有效解决这些问题,因此在中大型网络中,OSPFv2得到广泛使用。


2  基本概念介绍

1.    路由器ID

OSPF域内,使用路由器IDRouter ID)唯一标识一台路由器。任意两台路由器的路由器ID不能相同。

2.    区域

在一个设备都运行OSPF路由协议大型网络中,设备数量的增多会导致链路状态数据库LSDBLink-State Database)增大,占用大量的存储空间,并增加了SPF算法的复杂度,导致设备负担加重。此外,拓扑结构发生变化时都会导致网络中所有的设备重新进行路由计算。

如图2-1所示,OSPF协议通过将自治系统划分成不同的区域解决LSDB频繁更新的问题,提高网络的利用率,缓解大规模网络的计算压力。区域(Area)是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是设备,一台设备可以只属于一个区域,也可以属于多个区域。一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须指明属于哪一个区域。

OSPF区域有如下分类:

l  普通区域

包括骨干区域(Backbone Area)和常规区域。区域0为骨干区域,其他区域为常规区域。常规区域必须与骨干区域直接相连。

l  Stub区域

配置Stub区域可以减少区域内的LSA数量,Stub区域的ABR(Area Border Router,区域边界路由器)不会传递Type 5 LSA(域外路由),同时向Stub区域通告缺省路由。

l  Totally Stub区域

Totally Stub区域是Stub区域的升级,Totally Stub区域的路由器不会传递Type 3 LSA(域间路由)和Type 5 LSA(域外路由),同时向Stub区域通告缺省路由。

l  NSSA

NSSA区域(Not-So-Stubby Area,次末节区域)和Stub区域相似,但是允许存在ASBR(Autonomous System Boundary Router,自治系统边界路由器)。ASBR重分发的路由会以Type 7 LSA形式在NSSA区域传递,在ABR上会将Type 7 LSA转换成Type 5 LSA后传递到其他区域。ABR也会向NSSA区域通告缺省路由。

l  Totally NSSA

Totally NSSA和NSSA的关系与Totally Stub区域和Stub区域的关系类似。Totally NSSA在NSSA的基础上禁止传递Type 3 LSA(域间路由)。

*     说明

     骨干区域不可配置为Stub区域、Totally Stub区域、NSSATotally NSSA区域。

     Stub区域和Totally Stub区域不能存在ASBR

 

图2-1     OSPF区域划分及路由器分类

 image.png

 

3.    OSPF设备角色

OSPF中定义了几种设备角色,并为每种角色赋予不同的职责。

l  区域内路由器(Internal Router

该类路由器的所有接口都属于同一个Area。如图2-1中的A、C、F、G、I、M、J、K和L。

l  ABR

该类路由器用来连接骨干区域和常规区域。ABR同时属于两个以上的区域,其中一个必须是骨干区域。如图2-1中的B、D、E和H。

l  骨干路由器(Backbone Router

该类路由器至少有一个接口属于骨干区域。所有的ABR和Area 0的区域内路由器都是骨干路由器。如图2-1中的A、B、C、D、E和H。

l  ASBR

该类路由器用来与其他AS交换路由信息。ASBR并不一定位于区域的边界,它可能是区域内路由器,也可能是ABR。如图2-1中的A。

4.    LSA

OSPF通过LSALink State Advertisement,链路状态通告)来封装对路由信息的描述,并对外发布。常用的LSA类型如表2-1所示:

表2-1     OSPF LSA类型

LSA类型

说明

Router-LSAType 1

由每个路由器始发,描述了路由器的链路状态和代价,在始发路由器所在区域内传播。

Network-LSAType 2

DR始发,描述本网段的链路状态,在DR所在区域内传播。

Network-summary-LSAType 3

ABR始发,描述区域内某个网段的路由,并通告给非Totally StubNSSA区域。

ASBR-summary-LSAType 4

ABR始发,描述到ASBR的路由,通告给除ASBR所在区域的其他区域。

AS-external-LSAType 5

ASBR始发,描述到AS外部的路由,通告到所有区域(除了StubNSSA区域)。

NSSA LSAType 7

ASBR始发,描述到AS外部的路由,仅在NSSA区域内传播。

Opaque LSAType 9/Type 10/Type 11

Opaque LSA提供用于OSPF的扩展的通用机制,其中:

      Type 9   LSA仅在接口所在网段范围内传播,用于支持GRGrace LSA就是Type 9 LSA的一种。

      Type 10   LSA在区域内传播,用于支持TELSA就是Type 10 LSA的一种。

      Type 11   LSA在自治域内传播,目前还没有实际应用的例子。

 

*     说明

ABR使用Type 3 LSAStub/Totally StubNSSA/Totally NSSA区域发布一条缺省路由。

ABRNSSA/Totally NSSA区域内的Type 7 LSA转换成Type 5 LSA,发布到骨干区域。

 

5.    OSPF报文

OSPF报文封装在IP报文中。OSPF共有五种报文类型,如表2-2所示。

表2-2     OSPF报文类型

报文类型

说明

Hello

周期性发送的Hello报文用来发现OSPF邻居,维持邻接关系。

DD

DDDatabase Description,数据库描述)报文描述了本地LSDBLink-State Database,链路状态数据库)的摘要信息,用于在OSPF邻居之间进行数据库同步。

LSR

LSRLink State Request,链路状态请求)报文用于向对方请求所需的LSA。只有在OSPF邻居双方成功交换DD报文后,才会向对方发出LSR报文。

LSU

LSULink State Update,链路状态更新)报文用于向对方发送其所需要的LSA

LSAck

LSAckLink State Acknowledgment,链路状态应答)报文用于对收到的LSA进行确认。

 

6.    OSPF网络类型

OSPF根据链路层协议类型,将网络分为如表2-3所示的2种类型。

表2-3     OSPF网络类型介绍

网络类型

链路层协议

邻居关系与DR选举

广播(Broadcast

EthernetFDDI默认属于此类型。

      自动发现邻居,选举DR/BDR

      DRBDR与其他所有路由器交换LSA、建立邻接关系。

      DRBDR之外的路由器之间不交换LSA、不建立邻接关系。

P2PPoint-to-Point,点到点)

PPPHDLCLAPB默认属于此类型。

      自动发现邻居,不选举DR/BDR

      链路两端路由器之间交换LSA、建立邻接关系。

 

7.    DRBDR

在广播网络中,在构建相关路由器的邻接关系时,会创建很多不必要的LSAOSPF定义了DRDesignated Router,指定路由器)和BDRBackup Designated Router,备份指定路由器)的概念。

通过选举产生DRBDR后,所有路由器都只和DRBDR建立邻接关系,将信息发给DR/BDR,由DR将网络链路状态广播出去。除DRBDR之外的路由器称为DR OtherDR Other之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网络上各路由器之间邻接关系的数量,如2-22-3示。

图2-2     DR选举前后邻接数量(未选举DR前)

 image.png


图2-3     DR选举前后邻接数量(选举DR后)

image.png

 

8.    OSPF管理距离

管理距离(Administrative Distance,缩写为AD)用于评价路由的可信度。AD值越小,则表示此路由更值得信任。到达同一目的地存在多条路由时,路由器优先选择AD值较小的路由。AD值较大者,成为浮动路由(作为最优路由的备份)。AD值为本地概念,修改AD值只会影响当前路由器上的路由选择。


3  工作原理

1.    OSPF邻居状态

OSPF的网络中,邻居设备需要达到邻接状态才能交互链路信息。设备间存在邻居(Neighbors)关系与邻接(Adjacencies)关系。

l  邻居关系:如果两台路由器之间能够交互Hello报文,并且能够成功协商Hello报文中携带的参数,则二者互为邻居。

l  邻接关系:当邻居设备成功交换LSA,实现LSDB同步,则邻接关系建立。

OSPF共有8种邻居状态,如 表3-1所示。

表3-1     OSPF邻居状态机及含义

状态

含义

Down

第一个OSPF邻居状态,表示邻居失效时间间隔内未收到邻居的Hello报文。

Init

已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文。

Two-Way

互为邻居:

      双方互相收到了对端发送的Hello报文,建立了邻居关系。

      此阶段结束后,广播访问将会选取DRBDR

Exstart

协商主/从关系:

      选择形成邻接的初始序列号。

      主从关系保证在后续的DD报文交换中能够有序的发送。

Exchange

交换DD报文,以检查邻居是否可提供新的或更新的链路状态信息。

Loading

基于DBD提供的信息,路由器将发送LSR和交互LSU,进行LSDB同步。

Full

两端设备的LSDB已同步,本端设备和邻居设备建立了邻接状态。

 

广播网络中的OSPF邻接建立过程如图3-1所示,当进入Full状态时,邻接关系建立。

图3-1     广播网络中OSPF邻接关系建立过程

image.png

 

2.    OSPF工作流程

OSPF属于链路状态路由协议,工作过程包括三个阶段:

(1)   邻居发现à双向通信

在相连的路由器之间建立OSPF邻居关系,并保持双向通信。

路由器从所有启动OSPF的接口上发出Hello报文。如果两台路由器之间能够交互Hello报文,并且能够成功协商Hello报文中携带的参数,则它们就成为了邻居。当互为邻居的路由器在彼此的Hello报文中找到本端的Router ID时,双向通信就建立了。

Hello报文中包含(但不限于)如下信息:

         始发路由器的Router ID

         始发路由器接口的Area ID、网络掩码、认证信息、Hello时间间隔和邻居失效时间。

         DRBDRIP地址。

         始发路由器接口的优先级(用于DR/BDR竞选)。

         始发路由器的邻居的Router ID

(2)   数据库同步à完全邻接

路由器使用LSA发布本端的全部链路状态。邻居之间交换LSA,同步LSDB,达到完全邻接状态。

邻居路由器之间建立双向通信后,使用DDLSRLSULSAck报文交换LSA,建立邻接关系。简要过程如下:

路由器产生LSA,用来描述该设备上的全部链路状态。

         邻居之间交换LSA。当路由器接收到邻居发送的LSA时,将拷贝一份到本地LSDB,再传播给其它邻居。

         当路由器及其邻居都获得了相同的LSDB时,达到完全邻接状态。

*     说明

如果没有链路代价、网络增删变化,OSPF将不会产生LSDB的更新和通告。如果发生变化,则通告变化的链路状态,快速同步LSDB

 

(3)   计算SPTShortest Path Tree,最短路径树)à形成路由表

路由器依据LSDB计算出到达每个目标网络的最短路径,形成OSPF路由表。

路由器上获得完整的LSDB后,将运行Dijkstra算法生成一棵从本地到每个目标网络的SPTSPT中记录了目标网络、下一跳地址和代价。OSPF依据SPT形成路由表。

如果发生链路代价或网络增删变化,则会引起LSDB的更新。设备将再次运行Dijkstra算法,生成新的SPT,并更新路由表。

*     说明

Dijkstra算法用来在一个有权重的有向图中,找到从一个顶点到其他顶点的最短路径。

 

OSPF路由发布

1.    路由重分布

路由重分布是指:将设备上存在的默认路由、静态路由、直连路由引入OSPF进程,以Type 5 LSAType 7 LSA的方式发送给邻居。

路由重分布常用于AS间互联。通过在ASBR上配置路由重分布,可以将AS外部的路由信息传播到AS内部,也可以将AS内部的路由信息传播到AS外部。

2.    OSPF路由类型

每条OSPF路由前都带有一个标识,用来说明此路由的类型。设备路由发布支持以下两种OSPF路由类型:

l  E1:第一类外部路由

此类路由描述了如何到达AS以外的目标网络。路由代价=本地到ASBR的代价+ASBR到目标网络的代价。StubNSSA区域内的路由器上不存在此类路由。

l  E2:第二类外部路由

此类路由描述了如何到达AS以外的目标网络。路由代价=ASBR到目标网络的代价。StubNSSA区域内的路由器上不存在此类路由。

*     说明

E2路由的可信度比较低,OSPF认为从ASBR到自治系统之外的代价远远大于在自治系统之内到达ASBR的代价。所以,计算路由代价时只考虑ASBR到自治系统之外的代价。

 

OSPF路由聚合

路由聚合是指将具有相同前缀的路由信息汇聚为一条路由,并将汇聚后的路由替代大量琐碎路由发布给邻居。路由汇聚有助于减轻协议交互负担、减小路由表的规模,增强路由稳定性。