1. 简介

  • OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯彻(Dijkstra)算法被用来计算最短路径树。OSPF支持负载均衡和基于服务类型的选路,也支持多种路由形式,如特定主机路由和子网路由等。
  • OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。
  • 作为一种链路状态的路由协议,OSPF将链路状态组播数据LSA(Link State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。

2. 工作原理

  • OSPF简单来说就是两个相邻的路由器通过发报文的形式成为邻居关系,邻居再相互发送链路状态信息形成邻接关系,之后各自根据最短路径算法算出路由,放在OSPF路由表,OSPF路由与其他路由比较后优的加入全局路由表。整个过程使用了五种报文、三个阶段、四张表。

2.1 五种报文

  • Hello报文:建立并维护邻居关系;
  • DBD报文:发送链路状态头部信息;
  • LSR报文:把从DBD中找出需要的链路状态头部信息传给邻居,请求完整信息;
  • LSU报文:将LSR请求的头部信息对应的完整信息发给邻居;
  • LSACK:收到LSU报文后确认该报文。

2.2 三个阶段

  • 邻居发现:通过发送Hello报文形成邻居关系。
  • 路由通告:邻居间发送链路状态信息形成邻接关系。
  • 路由计算:根据最短路径算法算出路由表。

2.3 四张表

  • 邻居表:主要记录形成邻居关系路由器。
  • 链路状态数据库:记录链路状态信息。
  • OSPF路由表:通过链路状态数据库得出。
  • 全局路由表:OSPF路由与其他比较得出。

3. 工作过程

(1)了解自身链路
  • 每台路由器了解其自身的链路,即与其直连的网络。
(2)寻找邻居
  • 不同于RIP,OSPF协议运行后,并不立即向网络广播路由信息,而是先寻找网络中可与自己交换链路状态信息的周边路由器。可以交互链路状态信息的路由器互为邻居。
(3)创建链路状态数据包
  • 路由器一旦建立了邻居关系,就可以创建链路状态数据包。
(4)链路状态信息传递
  • 路由器将描述链路状态的LSA泛洪到邻居,最终形成包含网络完整链路状态信息的链路状态数据库。
(5)计算路由
  • 路由区域内的每台路由器都可以使用SPF算法来独立计算路由。

4. OSPF邻居建立过程

4.1 OSPF的七个邻居状态:

名称 状态 过程及效果
Down 互相不认识 一且本地发出OSPFhello包进入下一个状态
Init
初始化
单向发hello包 接收到的hello包中,包含本地的RID,进入下一状态 

(在NBMA网络中没有init,而是有一个Attempt代替这个状态,这个状态表示本端正在努力的试图与对方建立邻居,也就是在发生hello包)

2way
双向通信
双向认识
邻居关系建立的标志
然后进行条件匹配:
条件匹配:1.点到点直接进入下一个状态,
2.MA进行DR/BDR选举,
3.非DR/BDR间不得进入下一状态
Exstart
预启动
确认条件 使用类似 hello的DBD包(假的DBD包,区别于hello包)
进行主从关系选举,RID数值大为主,优先进入下一状态
Exchange
准交换
交换目录 使用真正的DBD包来进行数据库目录共享,需要ACK保障
Loading
加载
获取未知信息 使用LSR/LSU/LSack来获取未知的LSA信息
full转发 邻接关系建立的标志 建立ospf邻居,正常工作

4.2 OSPF邻居协商过程图解

5. 优点

(1)OSPF 适合在大范围的网络:OSPF 协议当中对于路由的跳数,它是没有限制的,所以 OSPF 协议能用在许多场合,同时也支持更加广泛的网络规模。只要是在组播的网络中,OSPF协议能够支持数十台路由器一起运作。
(2)组播触发式更新:OSPF 协议在收敛完成后,会以触发方式发送拓扑变化的信息给其他路由器,这样就可以减少网络宽带的利用率;同时,可以减小干扰,特别是在使用组播网络结构,对外发出信息时,它对其他设备不构成其他影响
(3)收敛速度快:如果网络结构出现改变,OSPF 协议的系统会以最快的速度发出新的报文,从而使新的拓扑情况很快扩散到整个网络;而且,OSPF 采用周期较短的 HELLO 报文来维护邻居状态。
(4)以开销作为度量值:OSPF 协议在设计时,就考虑到了链路带宽对路由度量值的影响。OSPF 协议是以开销值作为标准,而链路开销和链路带宽,正好形成了反比的关系,带宽越是高,开销就会越小,这样一来,OSPF 选路主要基于带宽因素。
(5)OSPF 协议的设计是为了避免路由环路:在使用最短路径的算法下,收到路由中的链路状态,然后生成路径,这样不会产生环路。
(6)应用广泛:广泛的应用在互联网上,其他会有大量的应用实例。证明这是使用最广泛的IGP 之一。

6. OSPF区域

  • OSPF 中划分区域的目的就是在于控制链路状态信息LSA 泛洪的范围、减小链路状态数据库LSDB的大小、改善网络的可扩展性、达到快速地收敛。
  • OSPF 将区域划分为以下几种类型:
1)骨干区域 :作为中央实体,其他区域与之相连,骨干区域编号为 0,在该区域中,各种类型的 LSA 均允许发布。
2)标准区域 :除骨干区域外的默认的区域类型,在该类型区域中,各种类型的 LSA 均允许发布。
3)末梢区域 :即 STUB 区域,该类型区域中不接受关于 AS外部的路由信息,即不接受类型 5 的 AS 外部LSA,需要路由到自治系统外部的网络时,路由器使用缺省路由(0.0.0.0),末梢区域中不能包含有自治系统边界路由器 ASBR。
4)完全末梢区域 :该类型区域中不接受关于 AS 外部的路由信息,同时也不接受来自 AS 中其他区域的汇总路由,即不接受类型 3、类型 4、类型 5 的 LSA,完全末梢区域也不能包含有自治系统边界路由器 ASBR。

7. 配置示例

①  必须配置router-id;
②  Network number and mask。

SG-6000(config-vrouter)# router ospf 100

SG-6000(config-router)# router-id 2.2.2.2

SG-6000(config-router)# network 10.1.1.0/24 area 0

SG-6000(config-router)# network 10.2.2.0/24 area 0