开放最短路径优先 OSPF(Open shortest path first)协议, “开放” 标明 OSPF 协议不是受某一家厂商控制,而是公开发表的;”最短路径优先” 是因为使用了 Dijkstra 提出的最短路径算法 SPF

OSPF 最主要的特征就是使用分布式的链路状态协议。OSPF 是基于链路状态的,不像 RIP 那样是基于距离向量的, OSPF 采用 SPF 算法计算路由,从算法上保证了不会产生路由环路。

OSPF 不限制网络规模,更新效率高,收敛速度快。

链路状态是指本路由器都和哪些路由器相邻,以及相应链路的”代价”(cost)

“代价” 用来表示费用、距离、时延、带宽,等等,这些都由网络管理人员来决定的。思科路由器中 OSPF 计算代价的方法: 100Mbps/链路带宽,计算结果小于 1 的值仍记为1; 大于1且有小数的,舍去小数。

1. OSPF 概述

使用洪泛法=向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器(类似广播)。最终整个区域内所有路由器都得到了这个信息的一个副本。

而 RIP 仅和相邻路由器交换信息

发送的信息就是与本路由器相邻的所有路由器的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价——费用、距离、时延、带宽等)。

而 RIP 交换的信息是自己的路由表

只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息进行交换。

而 RIP 是每30s路由表交换一次。

最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图

2. 工作原理

OSPF 相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。

  • Hello 分组封装在 IP 数据报中,发往组播地址224.0.0.5

  • 发送周期为10秒

  • 40 秒未收到来自邻居路由器的 Hello 分组,则认为该邻居路由器不可达。

  • 使用 OSPF 的每个路由器都会产生链路状态通告 LSA(Link State Adverisement)。LSA 中包含以下内容:

    • 直连网络的链路状态信息
    • 邻居路由器的链路状态信息
  • LSA 被封装在链路状态更新分组 LSU 中,柔用洪泛法发送

  • 使用 OSPF 的每个路由器都有一个链路状态数据库 LSDB,用于存储 LSA。通过各路由器洪泛发送封装有自己 LSA 的 LSU 分组,各路由器的 LSDB 最终将达到一致。

  • 使用 OSPF 的各路由器基于 LSDB 进行最短路径优先 SPF 计算,构建出各自到达其它各路由器的最短路径,即构建各自的路由表。

3. OSPF 分组类型

OSPF 有以下五种分组类型:

  1. 问候(Hello)分组

    用来发现和维护邻居路由器的可达性。

  2. 数据库描述 (Database Description)分组

    向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息

  3. 链路状态请求(Link State Request) 分组

    向邻居路由器请求发送桌些链路状态项目的详细信息。

  4. 链路状态更新 (Link State Update) 分组

    路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。

  5. 链路状态确认 (Link State Acknowledgment) 分组

    这是对链路状态更新分组的确认分组。

4. 多点接入网络

OSPF 在多点接入网络中路由器邻居关系的建立:

  1. 选举指定路由器 DR(designated router)和备用的指定路由器BDR(backup designated router)
  2. 所有的非 DR/BDR 只与 DR/BDR 建立邻居关系
  3. 非 DR/BDR 之间通过 DR/BDR 交换信息

为了使 OSPF 能够用于规模很大的网络,OSPF 把一个自治系统再划分为若干个更小的范围,叫做区域 (Area)

区域内路由器 IR(internal router): R1, R2, R8, R9

主干路由器 BBR(backbone router): R3, R4, R5, R6, R7

区域边界路由器 ABR(area borcler rauter): R3, R4, R7

自治系统边界路由器 ASBR(AS border +outer):R6