OSPF(Open Shortest Path First,开放式最短路径优先协议)是一种内部网关协议,应用在AS( Autonomous System,自治系统)内部,使设备获得远端网络的路由。
在动态路由诞生初期,网络中主要使用的是RIP(Routing Information Protocol,路由信息协议)路由协议。RIP是距离矢量路由协议,存在收敛慢、路由环路、扩展性差等问题,只能应用于简单网络。而OSPF Version2(以下简称为OSPFv2)是链路状态路由协议(Link-State Routing Protocols),能够有效解决这些问题,因此在中大型网络中,OSPFv2得到广泛使用。
在OSPF域内,使用路由器ID(Router ID)唯一标识一台路由器。任意两台路由器的路由器ID不能相同。
在一个设备都运行OSPF路由协议大型网络中,设备数量的增多会导致链路状态数据库LSDB(Link-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区域、NSSA和Totally NSSA区域。
● Stub区域和Totally Stub区域不能存在ASBR。
图2-1 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。
OSPF通过LSA(Link State Advertisement,链路状态通告)来封装对路由信息的描述,并对外发布。常用的LSA类型如表2-1所示:
LSA类型 |
说明 |
Router-LSA(Type 1) |
由每个路由器始发,描述了路由器的链路状态和代价,在始发路由器所在区域内传播。 |
Network-LSA(Type 2) |
由DR始发,描述本网段的链路状态,在DR所在区域内传播。 |
Network-summary-LSA(Type 3) |
由ABR始发,描述区域内某个网段的路由,并通告给非Totally Stub、NSSA区域。 |
ASBR-summary-LSA(Type 4) |
由ABR始发,描述到ASBR的路由,通告给除ASBR所在区域的其他区域。 |
AS-external-LSA(Type 5) |
由ASBR始发,描述到AS外部的路由,通告到所有区域(除了Stub、NSSA区域)。 |
NSSA LSA(Type 7) |
由ASBR始发,描述到AS外部的路由,仅在NSSA区域内传播。 |
Opaque LSA(Type 9/Type 10/Type 11) |
Opaque LSA提供用于OSPF的扩展的通用机制,其中: ● Type 9 LSA仅在接口所在网段范围内传播,用于支持GR的Grace LSA就是Type 9 LSA的一种。 ● Type 10 LSA在区域内传播,用于支持TE的LSA就是Type 10 LSA的一种。 ● Type 11 LSA在自治域内传播,目前还没有实际应用的例子。 |
说明
ABR使用Type 3 LSA向Stub/Totally Stub、NSSA/Totally NSSA区域发布一条缺省路由。
ABR将NSSA/Totally NSSA区域内的Type 7 LSA转换成Type 5 LSA,发布到骨干区域。
OSPF报文封装在IP报文中。OSPF共有五种报文类型,如表2-2所示。
表2-2 OSPF报文类型
报文类型 |
说明 |
Hello |
周期性发送的Hello报文用来发现OSPF邻居,维持邻接关系。 |
DD |
DD(Database Description,数据库描述)报文描述了本地LSDB(Link-State Database,链路状态数据库)的摘要信息,用于在OSPF邻居之间进行数据库同步。 |
LSR |
LSR(Link State Request,链路状态请求)报文用于向对方请求所需的LSA。只有在OSPF邻居双方成功交换DD报文后,才会向对方发出LSR报文。 |
LSU |
LSU(Link State Update,链路状态更新)报文用于向对方发送其所需要的LSA。 |
LSAck |
LSAck(Link State Acknowledgment,链路状态应答)报文用于对收到的LSA进行确认。 |
OSPF根据链路层协议类型,将网络分为如表2-3所示的2种类型。
表2-3 OSPF网络类型介绍
网络类型 |
链路层协议 |
邻居关系与DR选举 |
广播(Broadcast) |
Ethernet、FDDI默认属于此类型。 |
● 自动发现邻居,选举DR/BDR。 ● DR或BDR与其他所有路由器交换LSA、建立邻接关系。 ● DR、BDR之外的路由器之间不交换LSA、不建立邻接关系。 |
P2P(Point-to-Point,点到点) |
PPP、HDLC、LAPB默认属于此类型。 |
● 自动发现邻居,不选举DR/BDR。 ● 链路两端路由器之间交换LSA、建立邻接关系。 |
在广播网络中,在构建相关路由器的邻接关系时,会创建很多不必要的LSA。OSPF定义了DR(Designated Router,指定路由器)和BDR(Backup Designated Router,备份指定路由器)的概念。
通过选举产生DR和BDR后,所有路由器都只和DR、BDR建立邻接关系,将信息发给DR/BDR,由DR将网络链路状态广播出去。除DR和BDR之外的路由器称为DR Other,DR Other之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网络上各路由器之间邻接关系的数量,如2-2和2-3示。
图2-2 DR选举前后邻接数量(未选举DR前)
图2-3 DR选举前后邻接数量(选举DR后)
管理距离(Administrative Distance,缩写为AD)用于评价路由的可信度。AD值越小,则表示此路由更值得信任。到达同一目的地存在多条路由时,路由器优先选择AD值较小的路由。AD值较大者,成为浮动路由(作为最优路由的备份)。AD值为本地概念,修改AD值只会影响当前路由器上的路由选择。
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报文,建立了邻居关系。 ● 此阶段结束后,广播访问将会选取DR和BDR。 |
Exstart |
协商主/从关系: ● 选择形成邻接的初始序列号。 ● 主从关系保证在后续的DD报文交换中能够有序的发送。 |
Exchange |
交换DD报文,以检查邻居是否可提供新的或更新的链路状态信息。 |
Loading |
基于DBD提供的信息,路由器将发送LSR和交互LSU,进行LSDB同步。 |
Full |
两端设备的LSDB已同步,本端设备和邻居设备建立了邻接状态。 |
广播网络中的OSPF邻接建立过程如图3-1所示,当进入Full状态时,邻接关系建立。
图3-1 广播网络中OSPF邻接关系建立过程
OSPF属于链路状态路由协议,工作过程包括三个阶段:
(1) 邻居发现à双向通信
在相连的路由器之间建立OSPF邻居关系,并保持双向通信。
路由器从所有启动OSPF的接口上发出Hello报文。如果两台路由器之间能够交互Hello报文,并且能够成功协商Hello报文中携带的参数,则它们就成为了邻居。当互为邻居的路由器在彼此的Hello报文中找到本端的Router ID时,双向通信就建立了。
Hello报文中包含(但不限于)如下信息:
○ 始发路由器的Router ID。
○ 始发路由器接口的Area ID、网络掩码、认证信息、Hello时间间隔和邻居失效时间。
○ DR,BDR的IP地址。
○ 始发路由器接口的优先级(用于DR/BDR竞选)。
○ 始发路由器的邻居的Router ID。
(2) 数据库同步à完全邻接
路由器使用LSA发布本端的全部链路状态。邻居之间交换LSA,同步LSDB,达到完全邻接状态。
邻居路由器之间建立双向通信后,使用DD、LSR、LSU和LSAck报文交换LSA,建立邻接关系。简要过程如下:
路由器产生LSA,用来描述该设备上的全部链路状态。
○ 邻居之间交换LSA。当路由器接收到邻居发送的LSA时,将拷贝一份到本地LSDB,再传播给其它邻居。
○ 当路由器及其邻居都获得了相同的LSDB时,达到完全邻接状态。
说明
如果没有链路代价、网络增删变化,OSPF将不会产生LSDB的更新和通告。如果发生变化,则通告变化的链路状态,快速同步LSDB。
(3) 计算SPT(Shortest Path Tree,最短路径树)à形成路由表
路由器依据LSDB计算出到达每个目标网络的最短路径,形成OSPF路由表。
路由器上获得完整的LSDB后,将运行Dijkstra算法生成一棵从本地到每个目标网络的SPT。SPT中记录了目标网络、下一跳地址和代价。OSPF依据SPT形成路由表。
如果发生链路代价或网络增删变化,则会引起LSDB的更新。设备将再次运行Dijkstra算法,生成新的SPT,并更新路由表。
说明
Dijkstra算法用来在一个有权重的有向图中,找到从一个顶点到其他顶点的最短路径。
路由重分布是指:将设备上存在的默认路由、静态路由、直连路由引入OSPF进程,以Type 5 LSA和Type 7 LSA的方式发送给邻居。
路由重分布常用于AS间互联。通过在ASBR上配置路由重分布,可以将AS外部的路由信息传播到AS内部,也可以将AS内部的路由信息传播到AS外部。
每条OSPF路由前都带有一个标识,用来说明此路由的类型。设备路由发布支持以下两种OSPF路由类型:
l E1:第一类外部路由
此类路由描述了如何到达AS以外的目标网络。路由代价=本地到ASBR的代价+ASBR到目标网络的代价。Stub、NSSA区域内的路由器上不存在此类路由。
l E2:第二类外部路由
此类路由描述了如何到达AS以外的目标网络。路由代价=ASBR到目标网络的代价。Stub、NSSA区域内的路由器上不存在此类路由。
说明
E2路由的可信度比较低,OSPF认为从ASBR到自治系统之外的代价远远大于在自治系统之内到达ASBR的代价。所以,计算路由代价时只考虑ASBR到自治系统之外的代价。
路由聚合是指将具有相同前缀的路由信息汇聚为一条路由,并将汇聚后的路由替代大量琐碎路由发布给邻居。路由汇聚有助于减轻协议交互负担、减小路由表的规模,增强路由稳定性。