OSPF开放最短路径优先(Open Shortest Path First)协议
- 为克服RIP的缺点(限制网络规模,坏消息传得慢)在1989年开发出来的
- 原理很简单,但实现很复杂
- 使用了Dijkstra提出的最短路径算法SPF(Shortest Path First)
- 采用分布式的链路状态协议(link state protocol)
- 现在使用OSPFv2
- OSPF是网络层协议,它不使用TCP或UDP,而直接用IP数据报传送(其IP数据报首部的协议字段为89)
- 重要优点:OSPF更新过程收敛速度快,没有坏消息传的慢的问题
链路状态(Link State)路由算法
概述
- 每个结点具有完整的网络拓扑结构信息。它们执行两项任务:第一,主动测试相邻结点状态。第二,定期的将所直连的链路状态传播给所有其他结点
- 每当链路状态报文到达时,路由结点便使用这些状态信息去更新自己的网络拓扑图,一旦网络拓扑图有变化,结点就用Dijkstra最短路径算法重新计算路由(从单一源点出发到达所有目的结点的最短路径),以更新自己的路由表(虽然用Dijkstra算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储下一跳,只有到了下一跳路由器,才能知道再下一跳该怎么走)
链路状态算法有三个核心特性
- 采用洪泛法(flooding),向本自治系统中所有路由器发送信息
- 发送的信息是与本路由器相邻的所有路由器的链路状态(这只是路由器掌握的部分信息。链路状态:本路由器都和哪些路由器相邻,以及该链路的度量 (metric),度量是个抽象的概念,对于OSPF协议,度量主要指费用、距离、时延、带宽等)
- 当链路状态发生变化或每隔一段时间(如30分钟),路由器才用洪泛法向所有路由器发送此信息(在OSPF协议中,这种信息叫链路状态更新分组,除此之外,结点还定期发送Hello消息和链路状态数据库(LSDB)描述符消息。Hello消息用于发现和维护链路上的邻居关系;LSDB描述符消息则包含了发送节点的整个链路状态数据库的概要信息,以便邻居节点可以比较各自的LSDB并决定是否需要交换更详细的LSA(链路状态通告)信息。这些定期发送的消息有助于保持邻居关系,并在网络拓扑结构发生变化时快速进行响应
与距离向量(Distance Vector)路由算法的比较
- 在距离向量路由算法中,每个结点仅与它的直接邻居交谈,它为它的邻居提供它知道的全部信息(自己到网络中所有其他结点的最小距离估计)
- 在链路状态算法中,每个结点与所有结点交谈,但它仅提供与它直接相连的链路状态(自己到所有邻居结点的最小距离估计)
OSPF算法
OSPF算法是最典型的链路状态算法,它除了具有链路状态算法通有的特点外,还具有以下特点
- OSPF对不同的链路可根据IP分组的不同服务类型(TOS)而设置成不同的代价。因此,OSPF对于不同的业务可计算出不同的路由,十分灵活
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量进行多路径间的负载均衡
- 所有在OSPF路由器之间交换的分组都具有鉴别功能,因而保证了仅在可信赖的路由器之间交换链路状态信息
- 每个链路状态都带上一个32位的序号,序号越大,链路状态越新
在OSPF中,全网的拓扑结构图叫做链路状态数据库
OSPF算法的主要优点
- 每个路由结点都使用同样的原始状态数据独立地计算路径,而不依赖中间结点的计算
- 链路状态报文不加改变的传播,易于定位故障
- 链路状态报文仅包含单个结点所直连的链路状态信息,其大小与网络规模(结点个数)无关
OSPF的区域划分
为使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干更小的范围,称为区域。划分区域的好处是,将利用洪泛法交换链路状态信息的范围局限于每个区域而非整个自治系统,减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑而不知道其他区域的网络拓扑情况。这些区域也有层次之分。处在上层的域称为主干区域,负责连通其他下层的区域,并且还连接其他自治系统
- 主干区域的标识符规定为0.0.0.0
- R3、R4、R7是区域边界路由器ABR(area border router)
- R3、R4、R5、R6、R7是主干路由器BR(backbone router)
- R6是自治系统边界路由器ASBR(AS border router)
OSPF的五种分组类型即分组格式
- 问候(Hello)分组
- 数据库描述(Database Description)分组,即“摘要信息”
- 链路状态请求(Link State Request)分组
- 链路状态更新(Link State Update)分组
- 链路状态确认(Link State Acknowledgment)分组