OSPF(Open Shortest Path First,开放最短路径优先)是IP路由协议家族中的重要成员,作为一种内部网关协议(IGP),它在单个自治系统(AS)内负责分发IP路由信息。作为一种网络层协议,OSPF使用协议号89,其管理距离(AD)默认值为110。在通信过程中,OSPF使用组播地址224.0.0.5进行常规通信,并使用224.0.0.6向指定路由器(DR)或备份指定路由器(BDR)发送更新。
OSPF核心术语
理解OSPF离不开其核心术语,它们是构成协议逻辑的基础:
- 邻居:运行OSPF且直连的路由器,其接口需位于同一区域。邻居关系通常通过Hello报文自动发现。
- 邻接:路由器与其DR/BDR之间建立的逻辑连接。只有建立了邻接关系的路由器才会交换路由信息。
- 链路状态通告:承载链路状态和路由信息的数据包,在OSPF邻居间共享。
- 指定路由器与备份指定路由器:在广播或多路访问网络中,DR负责代表该网络生成LSA并管理泛洪过程,BDR则在DR失效时接替其职责。
- 区域:用于构建OSPF分层网络的逻辑分组。
- 区域边界路由器:连接多个OSPF区域(至少一个骨干区域)的路由器。
- 自治系统边界路由器:连接OSPF域与非OSPF域(如运行RIP协议或其他路由协议的网络)的路由器。
- Router-ID:用于唯一标识OSPF路由器的IP地址。
- 开销:链路状态协议为每条链路赋予的度量值,OSPF使用接口开销作为选路的唯一标准。
OSPF主要特性
OSPF协议具备多项现代路由协议所需的先进特性:
- 属于无类别路由协议,支持VLSM、CIDR和手动路由汇总。
- 支持等价多路径负载均衡。
- 采用增量更新机制,仅在网络拓扑变化时发送更新,节省带宽。
- 管理距离为110,默认使用接口开销作为度量。
- 使用组播地址
224.0.0.5和224.0.0.6进行高效的路由信息交换。
OSPF报文类型
OSPF定义了5种报文类型,共同协作以完成邻居发现、数据库同步和信息更新。

Hello报文
Hello报文(类型1)有两个主要功能:发现并维护邻居关系,以及作为保活机制。它在组播地址224.0.0.5上发送。
DD报文
DD(Database Description,数据库描述)报文用于在两个路由器之间初步同步它们的链路状态数据库(LSDB)摘要信息,以确定需要交换哪些具体的路由信息。
LSR报文
LSR(Link State Request,链路状态请求)报文用于向邻居请求特定且缺失的链路状态记录。
LSU报文
LSU(Link State Update,链路状态更新)报文是对LSR报文的回复,其中包含了被请求的一个或多个完整的LSA。
LSAck报文
LSAck(Link State Acknowledgement,链路状态确认)报文用于确认已收到LSU,确保链路状态信息可靠传递。
LSA类型详解
LSA是构成OSPF链路状态数据库的基石,共有7种主要类型。

Router-LSA
1类LSA由每台OSPF路由器生成,描述该路由器连接到所在区域的链路状态和开销。它仅在生成区域内泛洪,是OSPF中最基础的LSA。
Network-LSA
2类LSA由多路访问网络中的指定路由器(DR)生成,描述了该网络上所有路由器的列表以及网络掩码。它同样在区域内泛洪。
Network-summary-LSA
3类LSA由区域边界路由器(ABR)生成,用于将某个区域的网络前缀摘要信息通告到其他区域,是实现区域间路由的关键。
ASBR-summary-LSA
4类LSA也由ABR生成,其作用是告知本区域内的路由器如何到达位于其他区域的自治系统边界路由器(ASBR)。
AS-external-LSA
5类LSA由ASBR生成,用于将重分发到OSPF的外部路由(如来自RIP或静态路由)通告到整个OSPF自治系统。
NSSA LSA
7类LSA是NSSA(非完全末梢区域)特有的。该区域内的ASBR将外部路由以7类LSA的形式在NSSA内泛洪。NSSA的ABR会将其转换为5类LSA再注入骨干区域。
Opaque LSA
Opaque LSA(9、10、11类)是用于OSPF扩展功能的通用载体。9类在接口所在网段泛洪,10类在区域内泛洪,11类在整个AS内泛洪。
路由器类型
根据在OSPF网络中的位置和功能,路由器可分为4种类型。

内部路由器
内部路由器的所有接口都位于同一个OSPF区域内。同一区域内的所有内部路由器拥有完全一致的LSDB。
骨干路由器
骨干路由器是至少有一个接口位于骨干区域(Area 0)的路由器。
区域边界路由器
区域边界路由器连接多个OSPF区域,其中至少一个必须是骨干区域。它为其连接的每个区域维护独立的LSDB,并负责在区域间传递汇总后的路由信息。
自治系统边界路由器
自治系统边界路由器是连接OSPF域与其他路由域(如运行EIGRP、BGP或静态路由的网络)的网关。它负责将外部路由重分发到OSPF,反之亦然。
OSPF路由类型
OSPF定义了4种路由类型,在路由表中以不同代码区分,优先级依次降低:
- 区域内路由:目的地与路由器在同一区域。
- 区域间路由:目的地位于OSPF自治系统内的其他区域。
- 第一类外部路由:外部路由的开销等于AS内部开销加外部重分发开销,可靠性高。
- 第二类外部路由:外部路由的开销仅等于重分发时设置的外部开销,默认类型。
区域类型
OSPF通过划分不同特性的区域来优化网络性能和管理。

普通区域
包括骨干区域和标准区域。骨干区域是所有非骨干区域的汇聚中心。所有非骨干区域必须与骨干区域直接相连或通过虚链路连接。
STUB区域
末梢区域不允许5类外部LSA进入。ABR会向该区域注入一条默认路由(0.0.0.0/0),以减少区域内的LSDB和路由表规模。
Totally STUB区域
完全末梢区域在STUB区域的基础上更进一步,同时阻止3类区域间LSA的进入。区域内所有去往区域外的流量都依赖于ABR注入的唯一一条默认路由。
NSSA区域
非完全末梢区域允许外部路由以7类LSA的形式引入,但不允许5类LSA进入。这为需要在末梢区域内引入特定外部路由的场景提供了灵活性。
Totally NSSA区域
完全NSSA区域类似于NSSA区域,但它同时过滤来自骨干区域的3类LSA。ABR会向该区域注入一条默认路由。
网络类型
OSPF支持多种网络类型,以适应不同的底层链路特性。

广播类型
这是以太网等广播网络的默认OSPF网络类型。它要求链路支持二层广播,并需要选举DR/BDR来优化邻接关系的建立和LSA的泛洪。
NBMA类型
非广播多路访问是帧中继网络的默认OSPF网络类型。它不具备广播能力,所有OSPF报文(包括Hello)均需以单播方式发送给每个邻居,并且仍然需要DR/BDR。
点到点类型
用于两台路由器直接相连的链路(如PPP、HDLC)。不选举DR/BDR,通过组播224.0.0.5直接建立邻接关系。
点到多点类型
用于中心站点连接多个分支站点的场景。不选举DR/BDR,中心路由器与每个分支路由器建立独立的点到点逻辑连接。
总结
OSPF作为一种功能强大、应用广泛的链路状态路由协议,其核心在于通过分层的区域设计、多样化的LSA报文和清晰的路由器角色划分,实现了大规模网络的高效、稳定和快速收敛。深入理解其报文交互机制、LSA泛洪范围以及各种区域类型的特性,是设计、部署和运维基于OSPF网络的基础。