一 OSPF路由协议
OSPF路由协议是用于网际协议(IP)网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议(IGP),在单一自治系统(AS)内部工作。适用于IPv4的OSPFv2协议定义于RFC 2328 ,RFC 5340 定义了适用于IPv6的OSPFv3。
二 OSPF路由概述
OSPF(下称"协议"或"本协议")仅在单一自治系统内部路由网际协议(IP)数据包,因此被分类为内部网关协议。该协议从所有可用的路由器中搜集链路状态(Link-state)信息从而构建该网络的拓扑图,由此决定提交给网际层(Internet Layer)的路由表,最终路由器依据在网际协议数据包中发现的目的IP地址,结合路由表作出转发决策。OSPF原生支持VLSM与CIDR。
本协议使用Dijkstra算法计算出到达每一网络的最短路径,并在检测链路的变化情况(如链路失效)时执行该算法快速收敛到新的无环路拓扑。
本协议可以通过调整路由界面的开销值来管控数据包的流向(也就是说,OSPF通过开销值来落实管理员锁制定的路由策略)。开销值是RTT、链路吞吐量、链路可用(可靠)性等衡量因素的无量纲整数表达。
一个OSPF网络可以划分成多个与骨干区域(Backbone Area,区域号为0)相连的区域,各区域的区域号可以使用正整数(如0)或点分十进制记法(如0.0.0.0)表达。0号(或0.0.0.0号)区域分配给该网络的核心,称为骨干区域,其他区域必须与骨干区域通过区域边界路由器(Area Border Router)直接或间接(通过OSPF虚链接)相连。同时,ABR负责维护全网的聚合路由,并为每个区域保留一份单独的链路状态数据库(Link-State Database)。
与大多数路由协议不同(参考BGP和RIP的工作过程),本协议不依赖于传输层协议(如TCP、UDP)提供数据传输、错误检测与恢复服务,数据包直接封装在网际协议(协议号89)内传输。
本协议使用多播(Multicast)技术提供邻居发现(Neighbor Discovery)服务,对于不支持多播(广播)功能的链路,协议提供了相应的配置选项以便正常工作。默认情况下,协议监听224.0.0.5(IPv4)、FF02::5(IPv6)组播地址(别名:AllSPFRouters)。对于DR与BDR,协议会额外监听224.0.0.6(IPv4)、FF02::6(IPv6)组播地址(别名:AllDRRouters)。本协议数据包只传输一跳(TTL或Hop Count等于且仅等于1),不能跨越广播域。
在IPv4协议上工作时,OSPF可通过内建的安全机制保护链路状态数据库的安全性。在IPv6网络上,本协议使用IPSec提供安全服务。
OSPFv3对OSPFv2进行了如下修改:
1. 邻居路由器只使用链路本地地址进行路由信息交换(虚拟链路除外)
2. OSPFv3基于每条单独的链路进行工作
3. 链路状态通告与Hello报文中不再包含网际协议前缀(IP Prefix)信息
三 OSPF路由工作过程
运行OSPF路由协议的路由器之间建立邻居关系,OSPF的操作就是基于邻居关系之上完成的,邻居关系建立起之后,路由器之间泛洪LSA的信息,LSA叫链路状态通告,链路状态用于描述整个网络拓扑结构的一系列信息(接口Cost,IP地址等),有助于每台路由器了解网络拓扑结构,大家都泛洪LSA也收集LSA。(运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系。之后彼此之间开始交互LSA,也就是链路状态通告,注意这里交互的不是路由信息,而是链路状态通告,那么什么是链路状态通告呢,你可以简单的理解为每台路由器都产8生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告,更通俗点的讲法是,每台路由器都产生一个通告,这个通告描述它自家门口的情况。)