OSPF是由IETFIGP工作组为IP网开发的路由协议。该工作组成立于1998年,专门设计用于因特网的基于最短路径优先(SPF)算法的IGP。与IGRP类似,OSPF创建的原因是到了八十年代中期,RIP不能服务于大型、异构网络的缺陷愈发明显。本文介绍OSPF的路由环境、基础的路由算法和基本的协议组件。
OSPF是由多个研究结果发展而来的,包括1978年为ARPANET开发的Bolt,Beranek,Newman(BBN)SPF算法,Dr. Radia Perlman对路由信息容错性广播的研究(1988),BBN在区域路由的工作(1986)和OSIIS-IS路由协议的早期版本。
OSPF有两个主要的特性。首先该协议是开放的,即其规范是公开的,公布的OSPF规范是RFC1247。另一个基本的特性是OSPF基于SPF算法,该算法也称为Dijkstra算法,即以创建该算法的人来命名。
OSPF是个链接状态路由协议,在同一层的区域内与其它所有路由器交换链接状态公告(LSA)信息。OSPFLSA中包含连接的接口、使用的metric及其它的变量信息。OSPF路由器积累链接状态信息,并使用SPF算法来计算到各节点的最短路径。
作为链接状态路由协议,OSPFRIPIGRP这些距离向量路由协议是不同的。使用距离向量算法的路由器的工作模式是在路由更新信息中把路由表全部或部分发送给其相邻的路由器。
二、路由层次
RIP不同,OSPF的工作是有层次的,其层次中最大的实体是自治系统(AS),即遵循共同的路由策略统一管理下的网络群。虽然OSPF可以与其它AS中的路由器交换路由信息,但它们是一种AS内部(内部网关)路由协议。
一个AS可以分为多个区间,即一组连续的网络和相连的主机。拥有多个接口的路由器可以加入多个区间,这些路由器称为区间边缘路由器,分别为每个区间保存其拓扑数据库。拓扑数据库实际上是与路由器有关联的网络的总图,包含从同一区间所有路由器收到的LSA的集合。因为同一区间内的路由器共享相同的信息,所以它们具有相同的拓扑数据库。(术语域(domain)有时用于描述含有相同拓扑数据库的路由器组成的网络,通常与AS可互换。)
区间的划分产生了两种不同类型的OSPF路由,区别在于源和目的是在相同的还是不同的区间,分别为区间内路由和跨区间路由。
OSPF主干负责在区间之间分发路由信息,包含所有的区间边缘路由器、非全部属于某区间的网络及其相连的路由器。下图是一个分为若干区间的OSPF自治系统的例子。
上图中,路由器456101112构成了主干。如果区间3中的主机H1要给区间2中的主机H2发送数据,则先发给路由器13,它转发给路由器12,再转给路由器11,路由器11再沿主干转发给路由器10,然后通过两个区间内路由器(97)到达主机H2
主干本身也是个OSPF区间,所以所有的主干路由器与其它区间路由器一样,使用相同的过程和算法来维护主干内的路由信息,主干拓扑对所有的跨区间路由器都是可见的。
可以以非连续主干的形式来定义区间,这时,主干的连接必须通过虚拟链接来保持。虚拟链接可以配置在任意共享非主干区间链接的路由器对之间,就象它们有直接链接一样工作。
运行OSPFAS边缘路由器通过外部网关协议,如EGPBGP,或通过配置信息来学习外部路由。
三、SPF算法
最短路径优先(SPF)路由算法是OSPF的基础。当SPF路由器加点后,它就初始化路由协议数据结构,然后等待下层协议关于接口已可用的通知信息。当路由器确认接口已准备好,就用OSPF Hello协议来获取邻居信息,即具有在共同的网络上接口的路由器。路由器向邻居发送Hello包并接收它们的Hello包。除了帮助学习邻居外,Hello包也有keep-alive的功能。
在多重访问网络(支持多于两个路由器的网络)中,Hello协议选出一个指派路由器和一个备份指派路由器。指派路由器负责为整个多重访问网络生成LSA,它可以减少网络通信量和拓扑数据库的大小。
当两个相邻路由器的链接状态数据库同步后,就称为邻接。在多重访问网络中,指派路由器决定哪些路由器应该相邻接,拓扑数据库在邻接路由器对间进行同步。邻接控制路由协议分组的分发,只在邻接点间交换。
每个路由器周期性地发送LSA,提供其邻接点的信息或当其状态改变时通知其它路由器。通过对已建立的邻接关系和链接状态进行比较,失效的路由器可以很快被检测出来,网络拓扑相应地更动。从LSA生成的拓扑数据库中,每个路由器计算最短路径树,以自己为根。这个最短路径树就生成了路由表。
四、分组格式
所有的OSPF分组均有24字节的头,如下图:
其中各域为:
· 版本号--标识使用的OSPF版本。
· 类型--标识OSPF分组类型,为下列类型之一:
--Hello:建立和维持邻居关系。
--
数据库描述:描述拓扑数据库内容,此类信息在初始化邻接关系时交换。
--
链接状态请求:从相邻路由器发来的拓扑数据库请求。此类信息在路由器通过检查数据库描述分组发现其部分拓扑数据库过期后发送。
--
链接状态更新:对链接状态请求分组的响应,也用于通常的LSA散发。单个链接状态更新分组中可以包含多个LSA
--
链接状态确认:确认链接状态更新分组。
· 分组长度--指示包括OSPF头在内的分组长度,以字节计。
· 路由器ID--标识分组来源。
· 区间ID--标识分组所属的区间。所有的OSPF分组都与某一个区间相关联。
· 校验码--对整个分组的内容检查传输中是否发生损坏。
· 认证类型--所有的OSPF协议交换均被认证。认证类型可以在每区间的基础上配置。
· 认证--包含认证信息。
· 数据--包含封装的上层信息。
五、附加特性
OSPF的附加特性包括等价、多路径路由和基于上层服务类型(TOS-type of service)请求的路由。基于TOS的路由支持可以指定特定服务类型的上层协议。例如,应用程序可能指定某些数据为紧急的,如果OSPF有高优先级的链接,就可用于传输紧急数据。
OSPF支持一个或多个metric。如果只用一个metric,则为任意的,且不支持TOS。如果使用多于一个metric,通过对由三个IP TOS位(延迟、吞吐量和可靠性)生成的八种组合各使用独立的metric(因此也是独立的路由表)可以支持TOS。例如,如果IP TOS位指示低延迟、低吞吐量和高可靠性,OSPF就基于此TOS设计计算到所有目的的路由。
每个目的地址都含有IP子网掩码,允许VLSM(variable-length subnet mask)。通过VLSMIP网可以分成各个不同大小的子网,这给了网管更大的网络管理的灵活性。