开放最短路径优先OSPF (Open Shortest Path First) 是为克服RIP的缺点在1989 年开发出来的。OSPF 的原理很简单,但实现起来却较复杂。
“开放”表明OSPF协议不是受某一家厂商控制, 而是公开发表的。 “最短路径优先”是因为使用了迪杰斯特拉 (Dijkstra) 提出的最短路径算法SPF。
OSPF2已成为互联网标准协议RFC2328。采用分布式的链路状态协议 (link state protocol)。注意:OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。 “链路状态”就是说明本路由器都和哪些路由器相邻, 以及该链路的“度量”(metric)或“代价”。度量的数值与费用、距离、时延和带宽等有关。
只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
链路状态数据库 (link-state database)
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。
这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。
为了使OSPF能够用于规模很大的网络,OSPF将 一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个32位的区域标识符(用点分十进制表示)。区域也不能太大,在一个区域内的路由器最好不超过200 个。
划分区域的好处就是将利用洪泛法交换链路状态信 息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。OSPF 使用层次结构的区域划分。在上层的区域叫做主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
R6是自治系统边界路由器。
OSPF不用UDP而是直接用IP数据报传送。(首部协议字段数值为89) 。OSPF构成的数据报很短。这样做可减少路由信息 的通信量。
数据报很短的另一好处是可以不必将长的数据报分片传送。但分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OSPF对不同的链路可根据IP分组的不同服务类型TOS而设置成不同的代价。因此,OSPF对于不同类型的业务可计算出不同的路由。
如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径间的负载平衡。所有在OSPF路由器之间交换的分组都具有鉴别的功能。支持可变长度的子网划分和无分类编址CIDR。每一个链路状态都带上一个32 位的序号,序号越大状态就越新。
OSPF 的基本操作
OSPF还规定每隔一段时间,如30分钟,要刷新一次数据库中的链路状态。由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多。OSPF没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于100 ms。
多点接入的局域网采用了选举产生指定的路由器 (designated router) 的方法,使广播的信息量大大减 少。指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。指定路由器与本LAN上的所有其他路由器都是邻接的,并且与它们交换信息。邻居但不是邻接的路由器之间不交换信息。有一台备份的指定路由器总是保持最新的状态数据,以便缓解主指定路由器崩溃时的转接和取代主指定路由器的需要。