Alex_McAvoy

想要成为渔夫的猎手

OSPF 协议

【概述】

开放最短路径优先(Open Shortest Path First,OSPF)协议,是使用分布式链路状态路由算法的典型代表,其也是内部网关协议 IGP 的一种

其具有以下特点:

  • 对不同的链路可根据 IP 分组的不同服务类型而设置不同的代价,因此,对于不同类型的业务可计算出不同的路由
  • 若到同一目的网络有多条代价相同的路由,那么可将通信量同时分配给这几条路径,这被称为多路径间的负载均衡
  • 所有在 OSPF 路由器间交换的 IP 数据报都具有鉴别的功能,从而保证仅在可信赖的路由器间交换链路状态信息
  • 每一个发送的链路状态上都会附加一个 $32$ 位的序号,序号越大表示链路状态越新
  • 支持可变长的子网划分与无分类编址 CIDR

【与 RIP 的比较】

与 RIP 相比,OSPF 与其主要有以下区别:

  • OSPF 采用洪泛法向本自治系统内所有路由器发送路由信息;RIP 仅向直接相邻的路由器发送路由信息
  • OSPF 发送的路由信息是与本路由器直接相邻的路由器的链路状态,即本路由器与哪些相邻,以及该链路的度量代价;RIP 发送的路由信息是本路由器所知道的全部信息,即整个路由表
  • OSPF 只有当链路状态发生变化时,才向所有路由发送信息;RIP 中无论网络拓扑是否改变,路由器间都会定期交换路由信息
  • OSPF 每个路由器的链路状态仅涉及与相邻路由器的连通状态,与整个网络规模无关,因此更新过程收敛快,适用于大型网络;RIP 更新过程可能存在慢收敛问题,适用于小型网络
  • OSPF 是网络层协议,直接使用 IP 数据报传送路由信息,其 IP 数据报首部协议字段为 $89$;RIP 是应用层协议,在传输层使用 UDP 协议

【工作原理】

对于 OSPF 来说,由于各路由间频繁的交换链路状态信息,因此所有的路由器最终都可以建立出一个链路状态数据库,这个数据库实际上就是全网拓扑结构图,其在全网范围内都是一致的,这被称为链路状态数据库的同步

在建立出这个链路状态数据库后,每个路由器就可以根据这个全网拓扑结构图使用 Dijkstra 算法,来计算从自己到各目的网络的最优路径,从而构造自己的路由表

在此之后,每当链路状态发生变化时,每个路由器就根据更新后的全网拓扑结构图来重新计算自己到各目的网络的最优路径,构造新的路由表

需要注意的是,虽然使用 Dijkstra 能够计算出完整的路径,但为了减小路由表的容量,路由表中并不会存储完整路径,只会存储下一跳,只有到达下一跳路由器,才能知道再下一跳怎么走

因此,在采用 OSPF 的路由器中,每一个路由表项都有两条项目:<目的网络 N>,<下一跳路由器的地址 X>

【OSPF 分组】

OSPF 分组会作为 IP 数据报的数据部分封装到 IP 数据报中,每个 OSPF 分组由固定的 $24B$ 的分组首部与数据部分组成,具体格式如下图

其中,类型字段规定了 OSPF 分组的类型,总共有以下五种类型的分组:

  • 问候分组:用来发现、维持邻站的可达性
  • 数据库描述分组:向邻站给出自己的链路状态数据库中的所有链路状态的摘要信息
  • 链路状态请求分组:请求发送某些链路状态项目的详细信息
  • 链路状态更新分组:使用洪泛法向全网更新链路状态
  • 链路状态确认分组:对链路更新分组的确认

【链路数据库的建立与维护】

通常每隔 $10$ 秒,每两个相邻路由器都要交换一次问候分组,以便知道哪些站可达

在路由器开始工作时,OSPF 让每一个路由器使用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息

之后,路由器使用链路状态请求分组,向对方请求发送自己缺少的某些链路状态项目的详细信息

经过一系列的分组交换,全网同步的链路数据库就建立完成了

在网络运行过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态,在其他路由器更新后,发送链路状态确认分组对更新分组进行确认

此外,为确保链路状态数据库的同步,OSPF 规定每隔一段时间就刷新一次数据库中的链路状态,这个时间通常规定为 $30$ 分钟

如下图,给出了两个路由器分组交换的流程

【区域】

划分区域

为了使 OSPF 能够用于大规模网络,其将一个自治系统划分为若干更小的范围,每个范围称为区域(Area),每一区域通过用一个 $32$ 位的区域标识符来标识

在一个区域内,路由器一般不超过 $200$ 个,同时,区域内的每一路由器只知道本区域的完整网络拓扑,不知道其他区域的网络拓扑情况

划分区域的好处就是使用洪泛法交换链路状态信息的范围局限于每一个区域,从而大大减少了整个网络上的通信量

层次结构

区域之间也有层次之分,处于上层的区域称为主干区域(Backbone Area),其区域标识符规定为 0.0.0.0,用于连通其他在下层的区域

在主干区域内部的路由器被称为主干路由器,主干区域连接其他下层区域的路由器称为区域边界路由器,主干区域连接其他自治系统的路由器称为自治系统边界路由器

如下图,在一个自治系统内部划分区域后,R3R4R5R6R7 为主干路由器,R3R4R7 为区域边界路由器,R4 为自治系统边界路由器

感谢您对我的支持,让我继续努力分享有用的技术与知识点!