6.3.2 OSPF协议
1.OSPF协议的要点
开放最短路径优先(OSPF)协议是分布式的链路状态协议。“链路状态”是说明本路由器都和哪些路由器相邻,以及该链路的“度量”。“度量”的含义是广泛的,它可表示距离、时延、费用和带宽等。
归纳起来,OSPF协议具有以下几个要点。
(a)当链路状态发生变化时,OSPF协议使用洪泛法向本自治系统中的所有路由器发送信息,即每个路由器都向所有其他相邻路由器发送信息(但不再发送给刚刚发来信息的那个路由器)。所发送的信息就是与本路由器相邻的所有路由器的链路状态。
(b)各路由器之间频繁地交换链路状态信息,所有的路由器最终都能建立一个链路状态数据库(Link State DataBase,LSDB),它与全网的拓扑结构图相对应。每一个路由器使用链路状态数据库中的数据,利用最短路径优先(Shortest Path First,SPF)算法,可计算出到达任意目的地的路由,构造出自己的路由表。OSPF协议的路由表主要包括目的网络、链路代价和下一个路由器等。
(c)OSPF协议还规定每隔一段时间,如30分钟,要刷新一次数据库中的链路状态,以确保链路状态数据库的同步(即每个路由器所具有的全网拓扑结构图都是一样的)。
2.OSPF协议的区域
(1)OSPF协议的区域划分
对于规模较大的网络,OSPF协议通常将一个自治系统进一步划分为若干个区域(Area),可使利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,减少了整个网络上的通信量。一个区域的OSPF路由器只保存本区域的链路状态,每个路由器的链路状态数据库都可以保持合理的大小,路由计算的时间、报文数量也都不会过大。
在区域划分时,设有一个骨干区域(Backbone Area),其他为常规区域(Normal Area)。区域的命名可以采用整数数字,如1,2,3等,也可以采用IP地址的形式,0.0.0.1,0.0.0.2等,区域0(或者为0.0.0.0)代表骨干区域。
所有的常规区域必须直接与骨干区域相连(物理或者逻辑连接),常规区域只能与骨干区域交换链路状态通告(Link State Advertisement,LSA),常规区域与常规区域之间即使直连也不能互换LSA。例如,图6-12中Area1,Area2,Area3,Area4只能与Area0互换LSA,然后再由Area0转发,Area0就像是一个中转站。
(2)OSPF路由器类型
根据一台路由器的多个接口归属的区域不同,OSPF路由器可以分为以下几种类型。
(a)内部路由器(Internal Router,IR):内部路由器属于单个区域,该路由器所有接口都属于同一个区域。
图6-12 OSPF区域划分示意图
(b)区域边界路由器(Area Border Router,ABR):区域边界路由器属于多个区域,该类路由器的接口同时属于两个以上的OSPF区域,且至少有一个接口属于骨干区域。
(c)骨干路由器(Backbone Router):骨干路由器至少有一个接口属于骨干区域。所有的ABR和位于Area0的内部设备都是骨干路由器。
(d)自治系统边界路由器(Autonomous System Boundary Router,ASBR):若OSPF路由器能将外部路由协议重分布进OSPF协议(重分布是指在采用不同路由协议的自治系统之间交换和通告路由选择信息),则称为ASBR。但是若只是将OSPF协议重分布进其他路由协议,则不能称为ASBR。
OSPF协议中的路由器类型如图6-13所示。
图6-13 0SPF协议中的路由器类型
3.OSPF协议的工作原理
OSPF协议的工作原理可以分成3步:建立邻接关系、链路状态信息泛洪和计算路径。
(1)建立邻接关系
OSPF路由器通过互相发送问候(Hello)报文,验证参数后建立邻接关系。
(2)链路状态信息泛洪
OSPF链路状态信息泛洪(也称为洪泛)过程为:通过IP数据报的组播对各种链路状态通告(LSA)进行泛洪(OSPF协议的LSA报文是封装在IP数据报中的),LSA用于描述OSPF接口上的信息,包括接口上的IP地址、子网掩码、网络类型和链路度量值(Cost)等。
OSPF路由器是将自己所知道的链路状态全部发给邻居(即相邻路由器),相邻路由器将收到的链路状态全部放入链路状态数据库(LSDB),同时再发给自己的所有相邻路由器,在传递过程中,不对链路状态进行更改。通过这样的过程,最终网络中全部OSPF路由器都拥有本网络所有的链路状态,并且根据此链路状态能描绘出相同的全网拓扑图。
(3)计算路径
一个路由器完成链路状态数据库的构建和更新后,根据链路状态数据库的信息运行SPF算法(Dijkstra算法),找到网络中每个目的地的最短路径,并建立路由表。
到达目标网络如果有多条开销相同的路径,那么OSPF协议可以同时选多条路径进行负载均衡(最多允许同时选6条链路)。
4.OSPF分组(OSPF数据报)
(1)OSPF分组格式
OSPF分组格式如图6-14所示。
OSPF分组由24 B固定长度的首部字段和数据部分组成。数据部分可以是5种类型分组(后述)中的一种。下面先简单介绍OSPF首部各字段的作用。
(a)版本(1 B):表示协议的版本,当前的版本号是2。
(b)类型(1 B):表示OSPF的分组类型。
(c)分组长度(2 B):以字节为单位指示OSPF的分组长度。
图6-14 OSPF分组格式
(d)路由器标识符(4 B):标志发送该分组的路由器的接口的IP地址。
(e)区域标识符(4 B):标识分组属于的区域。
(f)校验和(2 B):检测OSPF分组中的差错。
(g)鉴别类型(2 B):用于定义区域内使用的鉴别方法,目前只有两种类型的鉴别:0(没有鉴别)和1(口令)。
(h)鉴别(8 B):用于鉴别数据部分真正的值。鉴别类型为0时填0,鉴别类型为1时填8个字符的口令。
由图6-14可以看到,与RIP报文不同,OSPF分组不用UDP报文传送,而是直接用IP数据报传送。
(2)OSPF的5种分组类型
(a)类型1,问候(Hello)分组,用来发现和维持邻站(相邻路由器)的可达性。OSPF协议规定:两个相邻路由器每隔10s就要交换一次问候分组,若间隔40s没有收到某个相邻路由器发来的问候分组,就认为这个相邻路由器是不可达的。
(b)类型2,数据库描述(Database Description)分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
(c)类型3,链路状态请求(Link State Request)分组,向对方请求发送某些链路状态项目的详细信息。
(d)类型4,链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。
(e)类型5,链路状态确认(Link State Acknowledgment)分组,对链路状态更新分组的确认。
类型3、类型4、类型5这3种分组是当链路状态发生变化时,各路由器之间交换的OSPF分组,以达到链路状态数据库的同步。
5.OSPF协议的特点
OSPF协议的主要特点如下。
(a)由于一个路由器的链路状态只涉及与相邻路由器的连通状态,与整个IP网的规模并无直接关系,因此OSPF协议适合规模较大的网络。
(b)OSPF协议是动态算法,能自动和快速地适应网络环境的变化。具体说就是链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。
(c)OSPF协议没有“坏消息传播得慢”的问题,其响应网络变化的时间小于100ms。
(d)OSPF协议支持基于服务类型的路由选择。OSPF协议可根据IP数据报的不同服务类型将不同的链路设置成不同的代价,即对于不同类型的业务可计算出不同的路由。
(e)如果到同一个目的网络有多条相同代价的路径,OSPF协议可以将通信量分配给这几条路径——多路径间的负载平衡。
(f)有良好的安全性。OSPF协议规定,路由器之间交换的任何信息都必须经过鉴别,OSPF协议支持多种认证机制,而且允许各个区域间的认证机制可以不同,这样就保证了只有可依赖的路由器才能广播路由信息。