1
计算机网络技术理论与实践
1.6.2.3 5.2.3 OSPF协议工作原理及实验

5.2.3 OSPF协议工作原理及实验

OSPF(Open Shortest Path First,开放最短路径优先)协议是一种基于链路状态算法的分层路由协议。“开放”表明它是一个公开的协议,由标准协议组织制定,各厂商都可以得到协议的细节。“最短路径优先”是该协议在进行路由计算时使用的算法。

在OSPF的分层结构中,最顶层的实体是自治系统(AS)。自治系统是指遵循共同路由策略管理下的网络实体。当网络中自治系统规模非常大时,自治系统内设备上的拓扑数据库中的内容也会非常庞大,不仅容易造成数据库溢出,而且当网络中某条链路状态发生变化时,会导致整个自治系统中每个设备都重新计算一遍自己的路由表,既浪费了系统的资源和时间,又会影响路由协议的性能,如聚合速度、稳定性和灵活性等。因此,需要把自治系统划分为多个区域,每个区域都有自己特定的标识号。在这些区域中有一个主干(backbone)区域,负责在区域间分发链路状态信息。

这种分层次的网络结构中,每个区域内部维持一张唯一的本域拓扑结构图,各域内部的路由器根据所在域的拓扑图各自计算路由,域边界路由器把本域的内部路由总结后向其他域进行扩散。当网络中某条链路状态发生变化时,此链路所在域中的每台路由器都需要重新计算本域的路由表,而其他域中的路由器只需根据从边界路由器得到的信息修改其路由表中相应条目即可,不需要重新计算整个路由表,节省了大量的时间和处理能力。

OSPF协议包含两个比较重要的部分:Hello协议和可靠泛洪机制。Hello协议用于检测邻居并维护邻接关系;可靠泛洪机制在某条链路状态发生变化时,会将变化的信息发送给同一域中的所有OSPF路由器,从而确保整个域内的路由器始终具有一致的链路状态数据库。这个数据库记录了本域内的网络拓扑和所有链路的状态,其中每个条目被称为LSA(链路状态通告)。在OSPF协议中常用7种不同类型的LSA,路由器间通过这些LSA交换链路信息,用以跟踪网络中各条链路的状态。OSPF路由器的路由选择就是基于整个域中的所有链路状态,通过Dijkstra算法建立起以本路由器为根的最短路径树,从中获取本路由器(树根)到达树上每个节点(每个目标网络)的最短路径。然后通过计算域间路由、自治系统外部路由来完成整个网络上的路由表。此外,OSPF会动态监视网络的状态,一旦网络状态发生了变化,则将该变化迅速扩散,实现对域内网络拓扑的快速收敛,并计算出新的路由表。

1.OSPF基本概念

OSPF是目前内部网关协议中使用最为广泛、性能最优的一个协议。下面对OSPF协议中的一些基本概念进行解释。

(1)链路状态

OSPF使用链路状态路由(Link State Routing,LSR)算法,与RIP所使用的距离向量路由算法是完全不同的。在链路状态路由算法中,每一个路由器所获得的网络信息不局限于邻居路由器的路由表信息,而是包括了整个网络的拓扑结构和所有链路状态信息。路由器收集其所在区域内各路由器间连接的状态信息,即链路状态信息(Link-State),生成链路状态数据库(Link-State Database)。路由器通过所有链路状态信息来了解整个网络的状态,并利用最短路径优先算法独立地计算出到达任意目的网络的最优路径。

(2)区域

OSPF协议采用了分层路由策略,将网络分割成一个主干网络连接的一组相互独立的网络,这些相互独立的网络称为区域(Area),主干网络称为主干区域。每个区域如同一个独立的网络,其中的OSPF路由器只保存本区域的链路状态。这样,每个路由器的链路状态数据库都可以维持合理的大小,降低了路由计算的时间和路由信息报文的数量。

(3)网络类型

在OSPF协议中,将路由器所连接的物理网络划分为4种类型:广播多路访问型(Broadcast MultiAccess)、非广播多路访问型(None Broadcast MultiAccess)、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。这几种网络的结构如图5-16所示,其中Point-to-MultiPoint与NBMA的网络类型相同,只是逻辑连接方式有所不同。

img150

图5-16 OSPF划分的网络类型

(4)路由器类型

在OSPF协议中,路由器可以按不同的需要,充当以下四种路由器角色中的几种。

·内部路由器:所有端口在同一区域中的路由器,它只维护一个链路状态数据库。

·主干路由器:具有连接主干区域端口的路由器。

·区域边界路由器(ABR):具有连接多个区域端口的路由器,一般作为一个区域的出口。ABR会为每一个连接的区域建立链路状态数据库,并将所连接区域的路由摘要信息发送到主干区域,主干区域上的ABR则负责将各个区的域路由摘要信息分发到其他区域中。

·自治域系统边界路由器(ASBR):至少拥有一个连接外部自治域网络(如非OSPF网络)端口的路由器,负责将非OSPF网络的路由信息传入OSPF网络。

(5)指派路由器(DR)和备份指派路由器(BDR)

在多路访问网络上可能存在多个路由器,如果每个路由器都与所有相邻路由器建立邻接关系,会形成大量的邻接关系,从而导致大量开销。为此,OSPF协议在区域中选举一个DR,每个路由器都与DR建立邻接关系,这样可以大大减少邻接关系的数量。DR负责收集本域中所有的链路状态信息,并发布给域内的其他路由器。选举DR的同时也会选举一个BDR,在DR失效的时候,BDR可以担负起DR的职责,从而提高网络的稳定性。

2.OSPF协议操作过程

OSPF协议的执行过程如下:

(1)建立路由器的邻接关系

邻接关系(Adjacency)是指OSPF路由器为了交换路由信息,从相邻路由器中选择出一部分,并与之建立起来的连接关系。路由器首先向外发送拥有自身路由器标识(Router ID)信息的Hello报文。Router ID是路由器在OSPF协议操作中对自己的标识。在路由器上如果配置了环回接口(Loopback Interface),该接口上的IP地址会自动成为路由器的标识,当有多个环回接口时,这些环回接口中最大的IP地址将作为路由器的标识。环回接口是路由器上的一种虚拟接口,路由器上并没有这种物理接口,它是逻辑存在并永久开启的。如果路由器上没有配置环回接口,所有物理接口上配置的最大的IP地址会成为这台路由器的标识。

如果路由器从某端口收到其他路由器发来的含有其Router ID信息的Hello报文,则根据该端口所处网络的类型确定是否可以与其建立邻接关系。在点对点网络中,路由器会直接和对端路由器建立起邻接关系,并直接进入发现其他路由器的过程。若为MultiAccess网络,该路由器将进入选举DR/BDR步骤。

(2)选举DR/BDR

不同类型的网络选举DR和BDR的方式有所不同。在MultiAccess网络中具有多个路由器,OSPF协议需要选择一个DR作为链路状态更新的中心节点。选举过程是基于Hello报文内的Router ID和优先权(Priority)字段值来确定DR的。优先权字段取值范围为0~255,优先权值最高的路由器被选为DR,如果优先权值大小一样,则Router ID值最高的路由器被选为DR。优先权值次高的路由器或者优先权一样时,Router ID值次之的路由器被选举为BDR。优先权值和Router ID值都可以由操作人员直接设置。

(3)发现路由器

在点对点网络中,当路由器间建立好邻接关系后,需要利用Hello报文中的Router ID来确认主从关系,然后主从路由器间相互交换所有链路状态信息的描述,每台路由器对收到的描述信息进行分析,如果收到的描述信息中有新的链路状态信息,则要求对方发送该条链路状态信息的完整内容。通过这样的交互,主从路由器间可以建立起完全邻接(Full Adjacency)关系,使每台路由器都拥有自己独立、完整的链路状态数据库,作为本路由器上路由计算的基础。

在MultiAccess网络中,DR与BDR交换链路状态信息,并同时与本区域内其他路由器交换链路状态信息。

(4)选择适当的路由器

当一个路由器拥有完整、独立的链路状态数据库后,它将依据该数据库的内容独立地采用SPF算法构造出以自己为树根,包含其他所有路由器的一个最短路径树,用此最短路径树得出到每一个目的网络的最短路径,并将这些最短路径存入路由表中。目前最常用的SPF算法是Dijkstra算法。

OSPF利用度量(Cost)作为衡量指标来计算最短路径,Cost最小的路径即为最短路径。在配置OSPF路由器时可根据实际情况,采用链路带宽、时延或经济上的费用等信息来设置链路的Cost。链路的Cost值越小,说明该链路的质量越好。

(5)维护路由信息

当链路状态发生变化时,OSPF协议通过Flooding(洪泛)机制由相关路由器将链路状态变化信息通告给本域内的其他路由器。OSPF路由器接收到链路状态更新报文时,将更新自己的链路状态数据库,然后采用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新路由表的计算。即使链路状态没有发生改变,OSPF路由信息也会自动更新,默认时间为30分钟。

3.OSPF路由器信息交互过程

OSPF协议在路由信息交互过程中采用5种报文:Hello报文(Hello Packet)、数据库描述报文(Database Description Packet)、链路状态请求报文(Link State Request Packet)、链路状态更新报文(Link State Update Packet)及链路状态确认报文(Link State Acknowledgement Packet)。

在链路状态更新报文中,OSPF协议使用链路状态通告(LSA)来描述链路状态更新信息。当网络中的某些链路状态发生变化时,包括链路中断、路由器端口失效,甚至误码过多导致协议运行不正常等,与这些链路直接相连的路由器就会向网络中广播反映这种变化的链路状态通告。

为了保证LSA准确无误地传送和接收,需要使用链路状态确认报文进行确认,如果没有收到确认报文就会重新传送LSA。LSA中包含连接的接口、使用的Metric及其他链路信息。OSPF路由器通过LSA收集链接状态变化的信息,并使用SPF算法重新计算本路由器到各目的网络的最短路径。LSA包含于链路状态更新报文中,具有几种不同类型。

·LSA TYPE 1:每台路由器为所属区域产生的LSA,描述此区域内该路由器所连链路的状态和代价。一个边界路由器可以产生多个区域的LSA TYPE1。

·LSA TYPE 2:由DR产生,含有某个区域的BMA/NBMA网络中所有链路状态和代价信息,及其中连接的路由器。只有DR可以监测该信息。

·LSA TYPE 3:由ABR产生,汇总本区域内部路由信息为默认路由,通告给其他ABR,并从其他ABR接收LSA TYPE3信息,汇总后通知本区域内的路由器通往区域外的路由信息。

·LSA TYPE 4:由ABR产生,通过主干区域发送到其他ABR,含有ASBR的路由信息,与LSA TYPE 3的区别在于TYPE 4描述到OSPF自治系统外部的路由,而TYPE 3则描述到自治系统内部各区域的路由。

·LSA TYPE 5:由ASBR产生,含有关于自治系统外的路由信息。除了存根区域和完全存根区域,LSA TYPE 5在整个网络中发送。

·LSA TYPE 6:多播OSPF(MOSF),可以让路由器利用链路状态数据库的信息构造用于多播报文的多播发布树。

·LSA TYPE 7:由ASBR产生的NSSA区域所连自治系统外部的路由信息,仅在本NSSA中广播。LSA TYPE 7可以转换为LSA TYPE 5。

上述LSA类型中所涉及的区域类型参见OSPF规范。

在RIP等距离向量路由协议中,路由信息的交互是通过周期性地传送整张路由表来完成的,这种机制使距离向量路由协议无法高效地交换路由信息。

在OSPF协议中,为了提高传输效率,在进行链路状态信息传输时,先使用包含LSA头(Head)的链路状态数据库描述报文,因为每个LSA头中不包含具体的链路状态信息,只含有各LSA的标识(此标识唯一确定一个LSA),所以该报文非常小。邻接路由器间首先使用这种尺寸很小的报文,确认相互之间哪些LSA是对方没有的,然后只传输对方没有LSA的完整内容。

对于邻接路由器有,而自己没有的LSA,路由器会发送一个链路状态请求报文给邻接路由器,请求对方发送该LSA,邻接路由器在收到链路状态请求报文后,回应一个链路状态更新报文,其中包含了相应LSA的完整信息,在接收到对方发出的链路状态确认报文后,这两台路由器完成了本条LSA信息的同步。

OSPF协议采用增量传输的方法,来保持邻接路由器中链路状态数据库(LSDB)的一致性。

4.OSPF协议的特点

目前应用较多的路由协议有RIP和OSPF,它们同属于内部网关协议,RIP采用距离矢量算法,而OSPF采用基于链路状态的最短路径优先算法。在网络中传输协议信息时,RIP使用的是UDP协议,而OSPF则直接在IP协议上进行传输,OSPF的协议号为89。

在RIP度中,所有路由的度量都由跳数来描述,到达目的地的路由最大不超过16跳,且只保留唯一的一条路由,这就限制了RIP的网络半径,只适用于小型、简单的网络。此外,运行RIP的路由器需要定期地(一般30s)将自己的路由表广播到网络中,以实现对网络拓扑的聚合,这种聚合方式速度慢而且很容易引起广播风暴、累加到无穷、路由环等问题。

OSPF克服了RIP的许多缺陷,具有以下特点:

(1)OSPF不再采用跳数作为路径的度量,而是根据接口的吞吐率、拥塞状况、往返时延、可靠性等实际链路的传输能力来评估路由的代价,能够选择出到达目的网络最短、最优路由。

(2)OSPF支持不同服务类型采用不同代价,从而实现不同QoS的路由选择服务。

(3)OSPF路由器不再交换路由表,而是同步各路由器对网络状态的认识,即链路状态数据库,然后通过Dijkstra算法计算出到达网络中各目的地址的最优路由。因此OSPF路由器间不需要定期地交换大量数据,只是保持着一种连接,一旦有链路状态发生变化时,才通过组播方式将这一变化通告给所有路由器,这样不但减轻了整个网络的负荷,而且能够实现对网络拓扑的快速聚合。

(4)采用OSPF协议的自治系统,支持区域划分和路由分级管理,经过合理的规划和设计可以支持超过1 000台路由器,这是RIP协议无法做到的。

(5)OSPF采用一些方法(如SPF算法、邻接关系等)避免了路由中环路的产生。

(6)OSPF可以支持变长子网掩码来节省IP地址资源,这对于当前IPv4地址短缺问题是非常重要的。

(7)在采用OSPF协议的网络中,如果通过OSPF计算出到达同一目的网络有两条以上度量相等的路由,则会将这些等价路由都添加到路由表中。在进行数据转发时可以通过多条等价路由来实现负载分担或负载均衡,并且能够提高路由的稳定性。

(8)在OSPF协议中,邻接路由器间进行路由信息通告时,可以通过密码进行身份验证,以确定邻接路由器的合法性。

(9)OSPF协议使用组播地址发送协议报文,与广播方式相比,可以节省网络带宽资源,并降低了网络中其他非OSPF设备的处理开销。

5.OSPF协议配置和分析实验

本实验主要是学会在路由器上配置OSPF协议,并对OSPF协议的工作过程进行分析。

(1)实验目的

掌握路由器上OSPF协议的配置方法,能够在模拟环境中进行路由器上OSPF协议的配置,并能够通过debug信息分析OSPF协议的工作过程。

(2)实验环境

采用Dynamips仿真环境,Dynamips仿真软件的前端可以采用Dynagen进行文本拓扑设计,也可以使用GNS3进行图形拓扑设计。

(3)实验拓扑

在本实验中,采用的拓扑结构如图5-17所示。其中采用两台路由器RT1和RT2将两台主机PC1、PC2连接在一起,两台路由器之间采用串口进行连接,而两台主机与路由器之间都采用以太网进行连接。

img151

图5-17 OSPF协议实验拓扑图

(4)配置过程

首先PC1、PC2、RT1和RT2的配置与静态路由实验的配置完全一样,唯一不同的就是在RT1和RT2上将静态路由删除掉,配置上用OSPF协议来自动计算路由。

步骤1

在RT1的配置模式下配置OSPF协议。

进入OSPF配置模式:

RT1(config)#Router ospf 10

配置与RT1直连的网络,并指明该网络所属的区域:

RT1(config-ospf)#Network 1.0.0.0 255.0.0.0area 0

RT1(config-ospf)#Network 2.0.0.0 255.0.0.0area 0

进入s1/1接口配置模式:

RT1(config)#interface s1/1

配置从接口S1/1发送hello包的时间间隔,和认为通过接口S1/1相连的邻居已经不存在的时间间隔:

RT1(config-if)#ip ospf hello-interval 5

RT1(config-if)#ip ospf dead-interval 20

在RT2上也进行类似的配置。

步骤2

在RT1和RT2的特权执行模式下打开调式信息:

RT1#Debug ip ospf events

可以观察到OSPF协议交互的所有事件信息,通过这些信息来分析OSPF协议的工作过程。

(5)问题和分析

问题1:为什么打开debug信息后只能看到hello包,看不到OSPF协议的其他交互信息?

解释:因为OSPF的主要协议交互过程是在刚配置完OSPF协议时就进行了,而在网络运行过程中,只要没有链路状态的变化就不再交互链路状态信息了。所以要观察OSPF协议的工作过程就要先打开debug信息,然后再配置OSPF协议。由于打开了debug信息,所以配置时会弹出各种显示信息,影响配置的过程。

问题2:为什么修改了某条链路的状态后,仍然看不到交互的链路状态信息?

解释:由于洪泛的信息量太大,默认情况下,会将其禁止掉,而在OSPF协议中链路状态发生变化时,是采用洪泛的方式将变化信息向全网发送,所以要打开洪泛信息的调试,就可以看到链路状态更新时发送的消息:

RT1#Debug ip ospf flood

img152