OSPF

OSPF

简介

OSPF多用于大型IPv4网络,是基于链路状态的路由协议,与基于距离矢量的路由协议相比具有更快的收敛速度,支撑的网络规模也更大。

定义

OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议。目前针对IPv4协议使用的是OSPF Version 2(RFC2328)。OSPF是不属于任何一个厂商或组织私有的路由协议,使用Dijkstra的最短路径(SPF)算法计算路由。在OSPF中引入了区域的概念,有效的减少了路由选择协议对路由器CPU和内存的占用,同时也降低了路由选择协议的通信量,使得构建大型层次化网络成为可能。

目的

随着网络中路由器数目的增加,Rip路由协议由于自身的一些问题,如路由自环、最大跳数限制等,难以为大型网络提供良好的支持。IETF组织(Internet Engineering Task Force)开发了OSPF路由协议,对大型网络的发展起到了重要的作用。

OSPF路由协议具有如下特性:

适应范围广——支持各种规模的网络,最多可支持几百台路由器。

快速收敛——在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。

无自环——由于OSPF根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。

区域划分——允许自治系统的网络被划分成区域来管理,路由器的链路状态数据库仅需和所在区域的其他路由器保持一致。链路状态数据库的减小大大降低了对路由器内存的占用和CPU的消耗。同时,需要在区域间传送的路由信息的减小,降低了网络带宽的占用。

路由分级——使用4类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。

等价路由——支持到同一目的地址的多条等价路由。

支持验证——支持基于区域和接口的报文验证,以保证报文交互的安全性。

组播发送——在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰。

OSPF基本概念

介绍OSPF的基本概念,包括OSPF报文类型、路由器类型等内容。OSPF协议具有以下特点:

OSPF把自治系统划分成逻辑意义上的一个或多个区域。
OSPF通过LSA(Link State Advertisement)的形式发布链路状态。
OSPF依靠在OSPF区域内各路由器间交互OSPF报文来达到路由信息的统一。
OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。

OSPF报文类型

表1 OSPF报文类型

报文类型 报文作用
Hello报文 周期性发送,用来发现和维持OSPF邻居关系。
DD报文(Database Description packet) 描述本地LSDB的摘要信息,用于两台路由器进行数据库同步。
LSR报文(Link State Request packet) 用于向对方请求所需的LSA。路由器只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。
LSU报文(Link State Update packet) 用于向对方发送其所需要的LSA。

LSA类型

表2 OSPF LSA类型

LSA类型 LSA作用
Router-LSA(Type1) 每个路由器都会产生,描述了路由器的链路状态和开销,在所属的区域内传播。
Network-LSA(Type2) 由DR产生,描述本网段的链路状态,在所属的区域内传播。
Network-summary-LSA(Type3) 由ABR产生,描述区域内所有的路由,并通告给其他相关区域。
ASBR-summary-LSA(Type4) 由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
AS-external-LSA(Type5) 由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了Stub区域和NSSA区域)。
NSSA LSA(Type7) 由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
Opaque LSA(Type9/Type10/Type11) Opaque LSA提供用于OSPF的扩展的通用机制。其中:Type9 LSA仅在接口所在网段范围内传播。用于支持GR的Grace LSA就是Type9 LSA的一种。Type10 LSA在区域内传播。用于支持TE的LSA就是Type10 LSA的一种。Type11 LSA在自治域内传播,目前还没有实际应用的例子。

路由器类型

OSPF协议中常用到的路由器类型如图1所示。

图1 路由器类型
OSPF
表3 OSPF路由器类型

路由器类型 含义
区域内路由器(Internal Router) 该类路由器的所有接口都属于同一个OSPF区域。
区域边界路由器ABR(Area Border Router) 该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。
骨干路由器(Backbone Router) 该类路由器至少有一个接口属于骨干区域。所有的ABR和位于Area0的内部路由器都是骨干路由器。
自治系统边界路由器ASBR(AS Boundary Router) 与其他AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。

OSPF路由类型

AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。表4中按优先级从高到低顺序列出了路由类型。

表4 OSPF路由类型

路由类型 含义
Intra Area 区域内路由。
Inter Area 区域间路由。
第一类外部路由(Type1 External) 这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。到第一类外部路由的开销=本路由器到相应的ASBR的开销+ASBR到该路由目的地址的开销。
第二类外部路由(Type2 External) 这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。所以,OSPF计算路由开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销。

区域类型

表5 OSPF区域类型

区域类型 作用
Common area 缺省情况下,OSPF区域被定义为普通区域。普通区域包括标准区域和骨干区域。标准区域是最通用的区域,它传输区域内路由,区域间路由和外部路由。骨干区域是连接所有其他OSPF区域的*区域。骨干区域通常用Area 0表示。
Totally Stub Area 允许ABR发布的Type3缺省路由,不允许自治系统外部路由和区域间的路由。
Stub Area 和Totally Stub区域的不同在于该区域允许区域间路由。
NSSA Area 和Stub区域的不同在于该区域允许自治系统外部路由的引入,由ASBR发布Type 7 LSA通告给本区域。
Totally NSSA Area 和NSSA区域的不同在于该区域不允许区域间路由。

OSPF支持的网络类型

OSPF根据链路层协议类型,将网络分为如表6所列四种类型。

表6 OSPF网络类型

网络类型 含义
广播类型(Broadcast) 当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。在该类型的网络中:通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF路由器的预留IP组播地址;224.0.0.6的组播地址为OSPF DR的预留IP组播地址。以单播形式发送DD报文和LSR报文。
NBMA类型(Non-broadcast multiple access) 当链路层协议是帧中继、ATM或X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
点到多点P2M类型(Point-to-Multipoint) 没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。在该类型的网络中:以组播形式(224.0.0.5)发送Hello报文。以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
点到点P2P类型(point-to-point) 当链路层协议是PPP和LAPB时,缺省情况下,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。

OSPF路由过滤

OSPF支持使用路由策略对路由信息进行过滤。缺省情况下,OSPF不进行路由过滤。
OSPF可以使用的路由策略包括route-policy,访问控制列表(access-list),地址前缀列表(prefix-list)。
OSPF路由过滤可以应用于以下几个方面:

路由引入
OSPF可以引入其它路由协议学习到的路由。在引入时可以通过配置路由策略来过滤路由,只引入满足条件的路由。

引入路由发布
OSPF引入了路由后会向其它邻居发布引入的路由信息。可以通过配置过滤规则来过滤向邻居发布的路由信息。该过滤规则只在ASBR上配置才有效(只有ASBR才能引入路由)。

路由学习
通过配置过滤规则,可以设置OSPF对接收到的区域内、区域间和自制系统外部的路由进行过滤。该过滤只作用于路由表项的添加与否,即只有通过过滤的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被发布出去。

区域间LSA学习
通过命令可以在ABR上配置对进入本区域的Summary LSA进行过滤。该配置只在ABR上有效(只有ABR才能发布Summary LSA)。

表7 区域间LSA学习与路由学习的差异

区域间LSA学习 路由学习
直接对进入区域的LSA进行过滤。 路由学习中的过滤不对LSA进行过滤,只针对LSA计算出来的路由是否添加本地路由表进行过滤。学习到的LSA是完整的。

区域间LSA发布
通过命令可以在ABR上配置对本区域出方向的Summary LSA进行过滤。该配置只在ABR上配置有效。

OSPF路由引入限制

路由引入限制,是指OSPF在引入其它路由协议路由时,对引入路由的数量进行限制。
在实际应用中,由于操作不当等原因,可能将大量外部路由引入到OSPF中,导致网络拥塞。而且,网络中的低性能节点在引入大量路由的情况下,存在无法进行有效处理的风险。通过限制引入路由数量,可以消除潜在的风险,提高网络的稳定性。

由于外部路由被OSPF引入后会以5类或者7类LSA的形式发布,所以路由引入限制是通过限制LSDB中5类和7类LSA的数量实现的。其实现方式如下:

只对路由器本身产生的5类和7类LSA的总数量进行限制。
不限制缺省路由产生的LSA。这是因为,缺省路由可以匹配所有的目的地,这样做可以保留尽可能多的外部路由。
如果配置了外部路由聚合命令,则按聚合后生成的LSA进行限制。例如,10条外部路由聚合生成一条LSA时,数量按一条计算。

缺省情况下,不对路由引入进行限制。
随着引入路由和配置路由引入限制的具体操作不同,OSPF的处理流程也不同,如表8所示。

表8 OSPF路由引入限制

场景 OSPF处理流程
先配置路由引入限制,再引入外部路由 需要引入的路由数量小于配置的路由引入限制数量,则按正常引入流程处理。需要引入的路由数量大于配置的路由引入限制数量,则只生成最大限制数量路由的LSA。此时,LSDB里的5类和7类LSA的总数量等于配置的路由引入限制数量。
已经引入了外部路由,再配置路由引入限制 引入的路由数量小于配置的路由引入限制数量,则不做任何处理。引入的路由数量大于配置的路由引入限制数量,则先将已经引入的5类或7类LSA清除,再重新生成最大限制数量路由的LSA。
当需要再引入的路由数量已经大于配置的限制数量时 如果再引入新的路由,则不做引入处理。如果需要删除之前的路由,则有以下两种情况:之前引入过这些待删除的路由,则重新引入。之前并没有引入过这些待删除的路由,则忽略此路由。
需要引入的路由数量大于已经配置的限制数量,引入路由后,再重新配置引入限制 先将已经引入的Type5或Type7 LSA清除,再重新引入,然后根据引入的路由数量和配置的路由引入限制数量的大小关系进一步处理。