OSPF是由IETF的IGP工作组为IP网开发的路由协议。该工作组成立于1998年, 专门设计用于因特网的基于最短路径优先(SPF)算法的IGP。与IGRP类似,OSPF创建的原因是到了八十年代中期, RIP不 能服务于大型、异构网络的缺陷愈发明显。本文介绍OSPF的路由环境、基础的路由算法和基本的协议组件。
OSPF是由多个研究结果发展而来的,包括1978年为ARPANET开发的Bolt,Beranek,Newman(BBN)的SPF算法, Dr. Radia Perlman对路由信息容错性广播的研究(1988),BBN在区域路由的工作(1986)和OSI的IS-IS路由协议的早期版本。
OSPF有两个主要的特性。首先该协议是开放的,即其规范是公开的,公布的OSPF规范是RFC1247。 另一个基本的特性是OSPF基于SPF算法,该算法也称为Dijkstra算法,即以创建该算法的人来命名。
OSPF是个链接状态路由协议,在同一层的区域内与其它所有路由器交换链接状态公告(LSA)信息。OSPF的LSA中包含连接的接口、 使用的metric及其它的变量信息。OSPF路由器积累链接状态信息,并使用SPF算法来计算到各节点的最短路径。
作为链接状态路由协议,OSPF与RIP和IGRP这些距离向量路由协议是不同的。 使用距离向量算法的路由器的工作模式是在路由更新信息中把路由表全部或部分发送给其相邻的路由器。
二、路由层次
与RIP不同,OSPF的工作是有层次的,其层次中最大的实体是自治系统(AS),即遵循共同的路由策略统一管理下的网络群。 虽然OSPF可以与其它AS中的路由器交换路由信息,但它们是一种AS内部(内部网关)路由协议。
一个AS可以分为多个区间,即一组连续的网络和相连的主机。拥有多个接口的路由器可以加入多个区间, 这些路由器称为区间边缘路由器, 分别为每个区间保存其拓扑数据库。拓扑数据库实际上是与路由器有关联的网络的总图,包含从同一区间所有路由器收到的LSA的集合。 因为同一区间内的路由器共享相同的信息,所以它们具有相同的拓扑数据库。 (术语域(domain)有时用于描述含有相同拓扑数据库的路由器组成的网络,通常与AS可互换。)
区间的划分产生了两种不同类型的OSPF路由,区别在于源和目的是在相同的还是不同的区间,分别为区间内路由和跨区间路由。
OSPF主干负责在区间之间分发路由信息,包含所有的区间边缘路由器、非全部属于某区间的网络及其相连的路由器。 下图是一个分为若干区间的OSPF自治系统的例子。

上图中,路由器4、5、6、10、11和12构成了主干。如果区间3中的主机H1要给区间2中的主机H2发送数据,则先发给路由器13, 它转发给路由器12,再转给路由器11,路由器11再沿主干转发给路由器10,然后通过两个区间内路由器(9和7)到达主机H2。
主干本身也是个OSPF区间,所以所有的主干路由器与其它区间路由器一样,使用相同的过程和算法来维护主干内的路由信息, 主干拓扑对所有的跨区间路由器都是可见的。
可以以非连续主干的形式来定义区间,这时,主干的连接必须通过虚拟链接来保持。 虚拟链接可以配置在任意共享非主干区间链接的路由器对之间,就象它们有直接链接一样工作。 运行OSPF的AS边缘路由器通过外部网关协议,如EGP或BGP,或通过配置信息来学习外部路由。
三、SPF算法
最短路径优先(SPF)路由算法是OSPF的基础。当SPF路由器加点后,它就初始化路由协议数据结构, 然后等待下层协议关于接口已可用的通知信息。当路由器确认接口已准备好,就用OSPF Hello协议来获取邻居信息, 即具有在共同的网络上接口的路由器。路由器向邻居发送Hello包并接收它们的Hello包。除了帮助学习邻居外, Hello包也有keep-alive的功能。
在多重访问网络(支持多于两个路由器的网络)中,Hello协议选出一个“指派路由器”和一个备份指派路由器。 指派路由器负责为整个多重访问网络生成LSA,它可以减少网络通信量和拓扑数据库的大小。