随着Internet技术在全球范围内的飞速发展,IP网络作为一种最有前景的网络技术,受到了人们的普遍关注。而作为IP网络生存、运作、组织的核心——IP路由技术提供了解决IP网络动态可变性、实时性、QoS等关键技术的一种可能。在众多的路由技术中,OSPF协议已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由技术之一。本文在分析OSPF动态路由协议基本工作原理的基础上,提出了Dijkstra算法和OSPF路由表计算的实现方法。
目前应用较多的路由协议有RIP和OSPF,它们同属于内部网关协议,但RIP基于距离矢量算法,而OSPF基于链路状态的最短路径优先算法。它们在网络中利用的传输技术也不同。
RIP是利用UDP的520号端口进行传输,实现中利用套接口编程,而OSPF则直接在IP上进行传输,它的协议号为89。在RIP当中,所有的路由都由跳数来描述,到达目的地的路由最大不超过16跳,且只保留唯一的一条路由,这就限制了RIP的服务半径,即其只适用于小型的简单网络。同时,运行RIP的路由器需要定期地(一般30s)将自己的路由表广播到网络当中,达到对网络拓扑的聚合,这样不但聚合的速度慢而且极容易引起广播风暴、累加到无穷、路由环致命等问题。为此,OSPF应运而生。OSPF是基于链路状态的路由协议,它克服了RIP的许多缺陷:
第一,OSPF不再采用跳数的概念,而是根据接口的吞吐率、拥塞状况、往返时间、可靠性等实际链路的负载能力定出路由的代价,同时选择最短、最优路由并允许保持到达同一目标地址的多条路由,从而平衡网络负荷;
第二,OSPF支持不同服务类型的不同代价,从而实现不同QoS的路由服务;
第三,OSPF路由器不再交换路由表,而是同步各路由器对网络状态的认识,即链路状态数据库,然后通过Dijkstra最短路径算法计算出网络中各目的地址的最优路由。这样OSPF路由器间不需要定期地交换大量数据,而只是保持着一种连接,一旦有链路状态发生变化时,才通过组播方式对这一变化做出反应,这样不但减轻了不参与系统的负荷而且达到了对网络拓扑的快速聚会。而这些正是OSPF强大生命力和应用潜力的根本所在。
一、OSPF工作原理分析
OSPF是一种分层次的路由协议,其层次中最大的实体是AS(自治系统),即遵循共同路由策略管理下的一部分网络实体。在每个AS中,将网络划分为不同的区域。每个区域都有自己特定的标识号。对于主干(backbone)区域,负责在区域之间分发链路状态信息。这种分层次的网络结构是根据OSPF的实际提出来的。当网络中自治系统非常大时,网络拓扑数据库的内容就更多,所以如果不分层次的话,一方面容易造成数据库溢出,另一方面当网络中某一链路状态发生变化时,会引起整个网络中每个节点都重新计算一遍自己的路由表,既浪费资源与时间,又会影响路由协议的性能(如聚合速度、稳定性、灵活性等)。因此,需要把自治系统划分为多个域,每个域内部维持本域一张唯一的拓扑结构图,且各域根据自己的拓扑图各自计算路由,域边界路由器把各个域的内部路由总结后在域间扩散。这样,当网络中的某条链路状态发生变化时,此链路所在的域中的每个路由器重新计算本域路由表,而其它域中路由器只需修改其路由表中的相应条目而无须重新计算整个路由表,节省了计算路由表的时间。
OSPF由两个互相关联的主要部分组成:“呼叫”协议和“可靠泛洪”机制。呼叫协议检测邻居并维护邻接关系,可靠泛洪算法可以确保统一域中的所有的OSPF路由器始终具有一致的链路状态数据库,而该数据库构成了对域的网络拓扑和链路状态的映射。链路状态数据库中每个条目称为LSA(链路状态通告),共有5种不同类型的LSA,路由器间交换信息时就是交换这些LSA。每个路由器都维护一个用于跟踪网络链路状态的数据库,然后各路由器的路由选择就是基于链路状态,通过Dijkastra算法建立起来最短路径树,用该树跟踪系统中的每个目标的最短路径。最后再通过计算域间路由、自治系统外部路由确定完整的路由表。与此同时,OSPF动态监视网络状态,一旦发生变化则迅速扩散达到对网络拓扑的快速聚合,从而确定出新的网络路由表。
OSPF的设计实现要涉及到指定路由器、备份指定路由器的选举、协议包的接收、发送、泛洪机制、路由表计算等一系列问题。本文仅就Dijkstra算法与路由表的计算进行讨论。
二、Dijkstra算法
Dijkstra算法是路由表计算的依据,通过Dijkstra算法可以得到有关网络节点的最短路径树,然后由最短路径优先树得到路由表。
1.Dijkstra算法的描述如下:
(1)初始化集合E,使之只包含源节点S,并初始化集合R,使之包含所有其它节点。初始化路径列O,使其包含一段从S起始的路径。这些路径的长度值等于相应链路的量度值,并以递增顺序排列列表O。
(2)若列表O为空,或者O中第1个路径长度为无穷大,则将R中所有剩余节点标注为不可达,并终止算法。
(3)首先寻找列表O中的最短路径P,从O中删除P。设V为P的最终节点。若V已在集合E中,继续执行步骤2。否则,P为通往V的最短路径。将V从R移至E。
(4)建立一个与P相连并从V开始的所有链路构成的侯选路径集合。这些路径的长度是P的长度加上与P相连的长度。将这些新的链路插入有序表O中,并放置在其长度所对应的等级上。继续执行步骤2。
2.Dijkstra算法举例:
下面我们以路由器A为例,来说明最短路径树的建立过程:
(1)路由器A找到了路由器B、C,将它们列入候选列表{B:1;C:2}。
(2)从候选列表中找出最小代价项B,将B加入最短路径树并从候选列表中删除。接着从B开始寻找,找到了D,将其放入候选列表{C:2;D:2}。
(3)从列表中找出C,再由C又找到了D。但此时D的代价为4,所以不再加入候选列表。最后将D加入到最短路径树。此时候选列表为空,完成了最短路径树的计算。
三、OSPF路由表的计算与实现
有关路由表的计算是OSPF的核心内容,它是动态生成路由器内核路由表的基础。在路由表条目中,应包括有目标地址、目标地址类型、链路的代价、链路的存活时间、链路的类型以及下一跳等内容。关于整个计算的过程,主要由以下五个步骤来完成:
(1)保存当前路由表,当前存在的路由表为无效的,必须从头开始重新建立路由表;
(2)域内路由的计算,通过Dijkstra算法建立最短路径树,从而计算域内路由;
(3)域间路由的计算,通过检查Summary-LSA来计算域间路由,若该路由器连到多个域,则只检查主干域的Summary-LSA;
(4)查看Summary-LSA:在连到一个或多个传输域的域边界路由器中,通过检查该域内的Summary-LSA来检查是否有比第(2)(3)步更好的路径;
(5)AS外部路由的计算,通过查看AS-External-LSA来计算目的地在AS外的路由。
通过以上步骤,OSPF生成了路由表。但这里的路由表还不同于路由器中实现路由转发功能时用到的内核路由表,它只是OSPF本身的内部路由表。因此,完成上述工作后,往往还要通过路由增强功能与内核路由表交互,从而实现多种路由协议的学习。
OPSF作为一种重要的内部网关协协议的普遍应用,极大地增强了网络的可扩展性和稳定性,同时也反映出了动态路由协议的强大功能。但是,在有关OSPF协议的研究、实现中尚存在一些问题,如数据库的溢出、度量的刻画、以及MTU协商等等。同时,在IPv6中,OSPFv3基于链路的处理机制、IP地址的变化、泛洪范围的增加、包格式、LSA的变化以及邻居的识别等技术都将是我们共同探讨的课题。
OSPF路由协议概念及工作原理
|
——随着Internet技术在全球范围的飞速发展,OSPF已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由协议之一。OSPF(Open Shortest Path First)路由协议是由IETF(Internet Engineering Task Force)IGP工作小组提出的,是一种基于SPF算法的路由协议,目前使用的OSPF协议是其第二版,定义于RFC1247和RFC1583。
1.概述
——OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。
——作为一种链路状态的路由协议,OSPF将链路状态广播数据包LSA(Link State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。
2.数据包格式
——在OSPF路由协议的数据包中,其数据包头长为24个字节,包含如下8个字段:
* Version number-定义所采用的OSPF路由协议的版本。
* Type-定义OSPF数据包类型。OSPF数据包共有五种: * Hello-用于建立和维护相邻的两个OSPF路由器的关系,该数据包是周期性地发送的。 * Database De.ion-用于描述整个数据库,该数据包仅在OSPF初始化时发送。 * Link state request-用于向相邻的OSPF路由器请求部分或全部的数据,这种数据包是在当路由器发现其数据已经过期时才发送的。 * Link state update-这是对link state请求数据包的响应,即通常所说的LSA数据包。 * Link state acknowledgment-是对LSA数据包的响应。 * Packet length-定义整个数据包的长度。 * Router ID-用于描述数据包的源地址,以IP地址来表示。 * Area ID-用于区分OSPF数据包属于的区域号,所有的OSPF数据包都属于一个特定的OSPF区域。 * Checksum-校验位,用于标记数据包在传递时有无误码。 * Authentication type-定义OSPF验证类型。 * Authentication-包含OSPF验证信息,长为8个字节。 3.OSPF基本算法
3.1 SPF算法及最短路径树
——SPF算法是OSPF路由协议的基础。SPF算法有时也被称为Dijkstra算法,这是因为最短路径优先算法SPF是Dijkstra发明的。SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF算法中,被称为最短路径树。在OSPF路由协议中,最短路径树的树干长度,即OSPF路由器至每一个目的地路由器的距离,称为OSPF的Cost,其算法为:Cost = 100×106/链路带宽
——在这里,链路带宽以bps来表示。也就是说,OSPF的Cost 与链路的带宽成反比,带宽越高,Cost越小,表示OSPF到目的地的距离越近。举例来说,FDDI或快速以太网的Cost为1,2M串行链路的Cost为48,10M以太网的Cost为10等。
3.2 链路状态算法
——作为一种典型的链路状态的路由协议,OSPF还得遵循链路状态路由协议的统一算法。链路状态的算法非常简单,在这里将链路状态算法概括为以下四个步骤:
当路由器初始化或当网络结构发生变化(例如增减路由器,链路状态发生变化等)时,路由器会产生链路状态广播数据包LSA(Link-State Advertisement),该数据包里包含路由器上所有相连链路,也即为所有端口的状态信息。
所有路由器会通过一种被称为刷新(Flooding)的方法来交换链路状态数据。Flooding是指路由器将其LSA数据包传送给所有与其相邻的OSPF路由器,相邻路由器根据其接收到的链路状态信息更新自己的数据库,并将该链路状态信息转送给与其相邻的路由器,直至稳定的一个过程。 当网络重新稳定下来,也可以说OSPF路由协议收敛下来时,所有的路由器会根据其各自的链路状态信息数据库计算出各自的路由表。该路由表中包含路由器到每一个可到达目的地的Cost以及到达该目的地所要转发的下一个路由器(next-hop)。
第4个步骤实际上是指OSPF路由协议的一个特性。当网络状态比较稳定时,网络中传递的链路状态信息是比较少的,或者可以说,当网络稳定时,网络中是比较安静的。这也正是链路状态路由协议区别与距离矢量路由协议的一大特点。
4.OSPF路由协议的基本特征
——前文已经说明了OSPF路由协议是一种链路状态的路由协议,为了更好地说明OSPF路由协议的基本特征,我们将OSPF路由协议与距离矢量路由协议之一的RIP(Routing Information Protocol)作一比较,归纳为如下几点:
——RIP路由协议中用于表示目的网络远近的唯一参数为跳(HOP),也即到达目的网络所要经过的路由器个数。在RIP路由协议中,该参数被限制为最大15,也就是说RIP路由信息最多能传递至第16个路由器;对于OSPF路由协议,路由表中表示目的网络的参数为Cost,该参数为一虚拟值,与网络中链路的带宽等相关,也就是说OSPF路由信息不受物理跳数的限制。并且,OSPF路由协议还支持TOS(Type of Service)路由,因此,OSPF比较适合应用于大型网络中。
——RIP路由协议不支持变长子网屏蔽码(VLSM),这被认为是RIP路由协议不适用于大型网络的又一重要原因。采用变长子网屏蔽码可以在最大限度上节约IP地址。OSPF路由协议对VLSM有良好的支持性。
——RIP路由协议路由收敛较慢。RIP路由协议周期性地将整个路由表作为路由信息广播至网络中,该广播周期为30秒。在一个较为大型的网络中,RIP协议会产生很大的广播信息,占用较多的网络带宽资源;并且由于RIP协议30秒的广播周期,影响了RIP路由协议的收敛,甚至出现不收敛的现象。而OSPF是一种链路状态的路由协议,当网络比较稳定时,网络中的路由信息是比较少的,并且其广播也不是周期性的,因此OSPF路由协议即使是在大型网络中也能够较快地收敛。
——在RIP协议中,网络是一个平面的概念,并无区域及边界等的定义。随着无级路由CIDR概念的出现,RIP协议就明显落伍了。在OSPF路由协议中,一个网络,或者说是一个路由域可以划分为很多个区域area,每一个区域通过OSPF边界路由器相连,区域间可以通过路由总结(Summary)来减少路由信息,减小路由表,提高路由器的运算速度。
——OSPF路由协议支持路由验证,只有互相通过路由验证的路由器之间才能交换路由信息。并且OSPF可以对不同的区域定义不同的验证方式,提高网络的安全性。
——OSPF路由协议对负载分担的支持性能较好。OSPF路由协议支持多条Cost相同的链路上的负载分担,目前一些厂家的路由器支持6条链路的负载分担。
5.区域及域间路由
——前文已经提到过,在OSPF路由协议的定义中,可以将一个路由域或者一个自治系统AS划分为几个区域。在OSPF中,由按照一定的OSPF路由法则组合在一起的一组网络或路由器的集合称为区域(AREA)。
——在OSPF路由协议中,每一个区域中的路由器都按照该区域中定义的链路状态算法来计算网络拓扑结构,这意味着每一个区域都有着该区域独立的网络拓扑数据库及网络拓扑图。对于每一个区域,其网络拓扑结构在区域外是不可见的,同样,在每一个区域中的路由器对其域外的其余网络结构也不了解。这意味着OSPF路由域中的网络链路状态数据广播被区域的边界挡住了,这样做有利于减少网络中链路状态数据包在全网范围内的广播,也是OSPF将其路由域或一个AS划分成很多个区域的重要原因。
——随着区域概念的引入,意味着不再是在同一个AS内的所有路由器都有一个相同的链路状态数据库,而是路由器具有与其相连的每一个区域的链路状态信息,即该区域的结构数据库,当一个路由器与多个区域相连时,我们称之为区域边界路由器。一个区域边界路由器有自身相连的所有区域的网络结构数据。在同一个区域中的两个路由器有着对该区域相同的结构数据库。
——我们可以根据IP数据包的目的地地址及源地址将OSPF路由域中的路由分成两类,当目的地与源地址处于同一个区域中时,称为区域内路由,当目的地与源地址处于不同的区域甚至处于不同的AS时,我们称之为域间路由。
OSPF的骨干区域及虚拟链路(Virtual-link)
——在OSPF路由协议中存在一个骨干区域(Backbone),该区域包括属于这个区域的网络及相应的路由器,骨干区域必须是连续的,同时也要求其余区域必须与骨干区域直接相连。骨干区域一般为区域0,其主要工作是在其余区域间传递路由信息。所有的区域,包括骨干区域之间的网络结构情况是互不可见的,当一个区域的路由信息对外广播时,其路由信息是先传递至区域0(骨干区域),再由区域0将该路由信息向其余区域作广播。
——在实际网络中,可能会存在backbone不连续的或者某一个区域与骨干区域物理不相连的情况,在这两种情况下,系统管理员可以通过设置虚拟链路的方法来解决。
——虚拟链路是设置在两个路由器之间,这两个路由器都有一个端口与同一个非骨干区域相连。虚拟链路被认为是属于骨干区域的,在OSPF路由协议看来,虚拟链路两端的两个路由器被一个点对点的链路连在一起。在OSPF路由协议中,通过虚拟链路的路由信息是作为域内路由来看待的。下面我们分两种情况来说明虚拟链路在OSPF路由协议中的作用。
1.当一个区域与area0没有物理链路相连时
——前文已经提到,一个骨干区域Area 0必须位于所有区域的中心,其余所有区域必须与骨干区域直接相连。但是,也存在一个区域无法与骨干区域建立物理链路的可能性,在这种情况下,我们可以采用虚拟链路。虚拟链路使该区域与骨干区域间建立一个逻辑联接点,该虚拟链路必须建立在两个区域边界路由器之间,并且其中一个区域边界路由器必须属于骨干区域。
——在上面所示的例子中,区域1与区域0并无物理相连链路,我们可以在路由器A及路由器B之间建立虚拟链路,这样,将区域2作为一个穿透网络(Transit-network),路由器B作为接入点,区域1就与区域0建立了逻辑联接。
2.当骨干区域不连续时
——OSPF路由协议要求骨干区域area0必须是连续的,但是,骨干区域也会出现不连续的情况,例如,当我们想把两个OSPF路由域混合到一起,并且想要使用一个骨干区域时,或者当某些路由器出现故障引起骨干区域不连续的情况,在这些情况下,我们可以采用虚拟链路将两个不连续的区域0连接到一起。这时,虚拟链路的两端必须是两个区域0的边界路由器,并且这两个路由器必须都有处于同一个区域的端口。
——在上面的例子中,穿过区域1的虚拟链路将两个分为两半的骨干区域连接到一起,路由器A与B之间的路由信息作为OSPF域内路由来处理。
——另外,当一个非骨干区域的区域分裂成两半时,不能采用虚拟链路的方法来解决。当出现这种情况时,分裂出的其中一个区域将被其余的区域作为域间路由来处理。 残域(Stub area)
——在OSPF路由协议的链路状态数据库中,可以包括AS外部链路状态信息,这些信息会通过flooding传递到AS内的所有OSPF路由器上。但是,在OSPF路由协议中存在这样一种区域,我们把它称为残域(stub area),AS外部信息不允许广播进/出这个区域。对于残域来说,访问AS外部的数据只能根据默认路由(default-route)来寻址。这样做有利于减小残域内部路由器上的链路状态数据库的大小及存储器的使用,提高路由器计算路由表的速度。
——当一个OSPF的区域只存在一个区域出口点时,我们可以将该区域配置成一个残域,在这时,该区域的边界路由器会对域内广播默认路由信息。需要注意的是,一个残域中的所有路由器都必须知道自身属于该残域,否则残域的设置没有作用。另外,针对残域还有两点需要注意:一是残域中不允许存在虚拟链路;二是残域中不允许存在AS边界路由器。
6.OSPF协议路由器及链路状态数据包分类
6.1 OSPF路由器分类
——当一个AS划分成几个OSPF区域时,根据一个路由器在相应的区域之内的作用,可以将OSPF路由器作如下分类:
——内部路由器:当一个OSPF路由器上所有直联的链路都处于同一个区域时,我们称这种路由器为内部路由器。内部路由器上仅仅运行其所属区域的OSPF运算法则。
——区域边界路由器:当一个路由器与多个区域相连时,我们称之为区域边界路由器。区域边界路由器运行与其相连的所有区域定义的OSPF运算法则,具有相连的每一个区域的网络结构数据,并且了解如何将该区域的链路状态信息广播至骨干区域,再由骨干区域转发至其余区域。
——AS边界路由器:AS边界路由器是与AS外部的路由器互相交换路由信息的OSPF路由器,该路由器在AS内部广播其所得到的AS外部路由信息;这样AS内部的所有路由器都知道至AS边界路由器的路由信息。AS边界路由器的定义是与前面几种路由器的定义相独立的,一个AS边界路由器可以是一个区域内部路由器或是一个区域边界路由器。
——指定路由器—DR:在一个广播性的、多接入的网络(例如Ethernet、TokenRing及FDDI环境)中,存在一个指定路由器(Designated Router),指定路由器主要在OSPF协议中完成如下工作:
——指定路由器产生用于描述所处的网段的链路数据包—network link,该数据包里包含在该网段上所有的路由器,包括指定路由器本身的状态信息。
——指定路由器与所有与其处于同一网段上的OSPF路由器建立相邻关系。由于OSPF路由器之间通过建立相邻关系及以后的flooding来进行链路状态数据库是同步的,因此,我们可以说指定路由器处于一个网段的中心地位。 ——需要说明的是,指定路由器DR的定义与前面所定义的几种路由器是不同的。DR的选择是通过OSPF的Hello数据包来完成的,在OSPF路由协议初始化的过程中,会通过Hello数据包在一个广播性网段上选出一个ID最大的路由器作为指定路由器DR,并且选出ID次大的路由器作为备份指定路由器BDR,BDR在DR发生故障后能自动替代DR的所有工作。当一个网段上的DR和BDR选择产生后,该网段上的其余所有路由器都只与DR及BDR建立相邻关系。在这里,一个路由器的ID是指向该路由器的标识,一般是指该路由器的环回端口或是该路由器上的最小的IP地址。
6.2 OSPF链路状态广播数据包种类
——随着OSPF路由器种类概念的引入,OSPF路由协议又对其链路状态广播数据包(LSA)作出了分类。OSPF将链路状态广播数据包共分成5类,分别为:
类型1:又被称为路由器链路信息数据包(Router Link),所有的OSPF路由器都会产生这种数据包,用于描述路由器上联接到某一个区域的链路或是某一端口的状态信息。路由器链路信息数据包只会在某一个特定的区域内广播,而不会广播至其它的区域。
——在类型1的链路数据包中,OSPF路由器通过对数据包中某些特定数据位的设定,告诉其余的路由器自身是一个区域边界路由器或是一个AS边界路由器。并且,类型1的链路状态数据包在描述其所联接的链路时,会根据各链路所联接的网络类型对各链路打上链路标识,Link ID。表一列出了常见的链路类型及链路标识。
链路类型 具体描述 链路标识
1 用于描述点对点的网络 相邻路由器的路由器标识 2 用于描述至一个广播性网络的链路 DR的端口地址 3 用于描述至非穿透网络,即stub网络的链路 stub网络的网络号码 4 用于描述虚拟链路 相邻路由器的路由器标识
——类型2:又被称为网络链路信息数据包(Network Link)。网络链路信息数据包是由指定路由器产生的,在一个广播性的、多点接入的网络,例如以太网、令牌环网及FDDI网络环境中,这种链路状态数据包用来描述该网段上所联接的所有路由器的状态信息。
——指定路由器DR只有在与至少一个路由器建立相邻关系后才会产生网络链路信息数据包,在该数据包中含有对所有已经与DR建立相邻关系的路由器的描述,包括DR路由器本身。类型2的链路信息只会在包含DR所处的广播性网络的区域中广播,不会广播至其余的OSPF路由区域。
——类型3和类型4:类型3和类型4的链路状态广播在OSPF路由协议中又称为总结链路信息数据包(Summary Link),该链路状态广播是由区域边界路由器或AS边界路由器产生的。Summary Link描述的是到某一个区域外部的路由信息,这一个目的地地址必须是同一个AS中。Summary Link也只会在某一个特定的区域内广播。类型3与类型4两种总结性链路信息的区别在于,类型3是由区域边界路由器产生的,用于描述到同一个AS中不同区域之间的链路状态;而类型4是由AS边界路由器产生的,用于描述不同AS的链路状态信息。
——值得一提的是,只有类型3的Summary Link才能广播进一个残域,因为在一个残域中不允许存在AS边界路由器。残域的区域边界路由器产生一条默认的Summary Link对域内广播,从而在其余路由器上产生一条默认路由信息。采用Summary Link可以减小残域中路由器的链路状态数据库的大小,进而减少对路由器资源的利用,提高路由器的运算速度。
——类型5:类型5的链路状态广播称为AS外部链路状态信息数据包。类型5的链路数据包是由AS边界路由器产生的,用于描述到AS外的目的地的路由信息,该数据包会在AS中除残域以外的所有区域中广播。一般来说,这种链路状态信息描述的是到AS外部某一特定网络的路由信息,在这种情况下,类型5的链路状枋数据包的链路标识采用的是目的地网络的IP地址;在某些情况下,AS边界路由器可以对AS内部广播默认路由信息,在这时,类型5的链路广播数据包的链路标识采用的是默认网络号码0.0.0.0。
7.OSPF协议工作过程
——OSPF路由协议针对每一个区域分别运行一套独立的计算法则,对于ABR来说,由于一个区域边界路由器同时与几个区域相联,因此一个区域边界路由器上会同时运行几套OSPF计算方法,每一个方法针对一个OSPF区域。下面对OSPF协议运算的全过程作一概括性的描述。
7.1 区域内部路由
——当一个OSPF路由器初始化时,首先初始化路由器自身的协议数据库,然后等待低层次协议(数据链路层)提示端口是否处于工作状态。
——如果低层协议得知一个端口处于工作状态时,OSPF会通过其Hello协议数据包与其余的OSPF路由器建立交互关系。一个OSPF路由器向其相邻路由器发送Hello数据包,如果接收到某一路由器返回的Hello数据包,则在这两个OSPF路由器之间建立起OSPF交互关系,这个过程在OSPF中被称为adjacency。在广播性网络或是在点对点的网络环境中,OSPF协议通过Hello数据包自动地发现其相邻路由器,在这时,OSPF路由器将Hello数据包发送至一特殊的多点广播地址,该多点广播地址为ALLSPFRouters。在一些非广播性的网络环境中,我们需要经过某些设置来发现OSPF相邻路由器。在多接入的环境中,例如以太网的环境,Hello协议数据包还可以用于选择该网络中的指定路由器DR。
——一个OSPF路由器会与其新发现的相邻路由器建立OSPF的adjacency,并且在一对OSPF路由器之间作链路状态数据库的同步。在多接入的网络环增中,非DR的OSPF路由器只会与指定路由器DR建立adjacency,并且作数据库的同步。OSPF协议数据包的接收及发送正是在一对OSPF的adjacency间进行的。
——OSPF路由器周期性地产生与其相联的所有链路的状态信息,有时这些信息也被称为链路状态广播LSA(Link State Advertisement)。当路由器相联接的链路状态发生改变时,路由器也会产生链路状态广播信息,所有这些广播数据是通过Flood的方式在某一个OSPF区域内进行的。Flooding算法是一个非常可靠的计算过程,它保证在同一个OSPF区域内的所有路由器都具有一个相同的OSPF数据库。根据这个数据库,OSPF路由器会将自身作为根,计算出一个最短路径树,然后,该路由器会根据最短路径树产生自己的OSPF路由表。
7.2 建立OSPF交互关系adjacency
——OSPF路由协议通过建立交互关系来交换路由信息,但是并不是所有相邻的路由器会建立OSPF交互关系。下面将OSPF建立adjacency的过程简要介绍一下。
——OSPF协议是通过Hello协议数据包来建立及维护相邻关系的,同时也用其来保证相邻路由器之间的双向通信。OSPF路由器会周期性地发送Hello数据包,当这个路由器看到自身被列于其它路由器的Hello数据包里时,这两个路由器之间会建立起双向通信。在多接入的环境中,Hello数据包还用于发现指定路由器DR,通过DR来控制与哪些路由器建立交互关系。
——两个OSPF路由器建立双向通信这后的第二个步骤是进行数据库的同步,数据库同步是所有链路状态路由协议的最大的共性。在OSPF路由协议中,数据库同步关系仅仅在建立交互关系的路由器之间保持。
——OSPF的数据库同步是通过OSPF数据库描述数据包(Database De.ion Packets)来进行的。OSPF路由器周期性地产生数据库描述数据包,该数据包是有序的,即附带有序列号,并将这些数据包对相邻路由器广播。相邻路由器可以根据数据库描述数据包的序列号与自身数据库的数据作比较,若发现接收到的数据比数据库内的数据序列号大,则相邻路由器会针对序列号较大的数据发出请求,并用请求得到的数据来更新其链路状态数据库。
——我们可以将OSPF相邻路由器从发送Hello数据包,建立数据库同步至建立完全的OSPF交互关系的过程分成几个不同的状态,分别为:
——Down:这是OSPF建立交互关系的初始化状态,表示在一定时间之内没有接收到从某一相邻路由器发送来的信息。在非广播性的网络环境内,OSPF路由器还可能对处于Down状态的路由器发送Hello数据包。
——Attempt:该状态仅在NBMA环境,例如帧中继、X.25或ATM环境中有效,表示在一定时间内没有接收到某一相邻路由器的信息,但是OSPF路由器仍必须通过以一个较低的频率向该相邻路由器发送Hello数据包来保持联系。
——Init:在该状态时,OSPF路由器已经接收到相邻路由器发送来的Hello数据包,但自身的IP地址并没有出现在该Hello数据包内,也就是说,双方的双向通信还没有建立起来。 ——2-Way:这个状态可以说是建立交互方式真正的开始步骤。在这个状态,路由器看到自身已经处于相邻路由器的Hello数据包内,双向通信已经建立。指定路由器及备份指定路由器的选择正是在这个状态完成的。在这个状态,OSPF路由器还可以根据其中的一个路由器是否指定路由器或是根据链路是否点对点或虚拟链路来决定是否建立交互关系。
——Exstart:这个状态是建立交互状态的第一个步骤。在这个状态,路由器要决定用于数据交换的初始的数据库描述数据包的序列号,以保证路由器得到的永远是最新的链路状态信息。同时,在这个状态路由器还必须决定路由器之间的主备关系,处于主控地位的路由器会向处于备份地位的路由器请求链路状态信息。
——Exchange:在这个状态,路由器向相邻的OSPF路由器发送数据库描述数据包来交换链路状态信息,每一个数据包都有一个数据包序列号。在这个状态,路由器还有可能向相邻路由器发送链路状态请求数据包来请求其相应数据。从这个状态开始,我们说OSPF处于Flood状态。
——Loading:在loading状态,OSPF路由器会就其发现的相邻路由器的新的链路状态数据及自身的已经过期的数据向相邻路由器提出请求,并等待相邻路由器的回答。
——Full:这是两个OSPF路由器建立交互关系的最后一个状态,在这时,建立起交互关系的路由器之间已经完成了数据库同步的工作,它们的链路状态数据库已经一致。 7.3 域间路由
——前面一节描述了OSPF路由协议的单个区域中的计算过程。在单个OSPF区域中,OSPF路由协议不会产生更多的路由信息。为了与其余区域中的OSPF路由器通讯,该区域的边界路由器会产生一些其它的信息对域内广播,这些附加信息描绘了在同一个AS中的其它区域的路由信息。具体路由信息交换过程如下:
——在OSPF的定义中,所有的区域都必须与区域0相联,因此每一个区域都必须有一个区域边界路由器与区域0相联,这一个区域边界路由器会将其相联接的区域内部结构数据通过Summary Link广播至区域0,也就是广播至所有其它区域的边界路由器。在这时,与区域0相联的边界路由器上有区域0及其它所有区域的链路状态信息,通过这些信息,这些边界路由器能够计算出至相应目的地的路由,并将这些路由信息广播至与其相联接的区域,以便让该区域内部的路由器找到与区域外部通信的最佳路由。
7.4 AS外部路由
——一个自治域AS的边界路由器会将AS外部路由信息广播至整个AS中除了残域的所有区域。为了使这些AS外部路由信息生效,AS内部的所有的路由器(除残域内的路由器)都必须知道AS边界路由器的位置,该路由信息是由非残域的区域边界路由器对域内广播的,其链路广播数据包的类型为类型4。
8.OSPF路由协议验证
——在OSPF路由协议中,所有的路由信息交换都必须经过验证。在前文所描述的OSPF协议数据包结构中,包含有一个验证域及一个64位长度的验证数据域,用于特定的验证方式的计算。
——OSPF数据交换的验证是基于每一个区域来定义的,也就是说,当在某一个区域的一个路由器上定义了一种验证方式时,必须在该区域的所有路由器上定义相同的协议验证方式。另外一些与验证相关的参数也可以基于每一个端口来定义,例如当采用单一口令验证时,我们可以对某一区域内部的每一个网络设置不同的口令字。 ——在OSPF路由协议的定义中,初始定义了两种协议验证方式,方式0及方式1,分别介绍如下:
——验证方式0:采用验证方式0表示OSPF对所交换的路由信息不验证。在OSPF的数据包头内64位的验证数据位可以包含任何数据,OSPF接收到路由数据后对数据包头内的验证数据位不作任何处理。
——验证方式1:验证方式1为简单口令字验证。这种验证方式是基于一个区域内的每一个网络来定义的,每一个发送至该网络的数据包的包头内都必须具有相同的64位长度的验证数据位,也就是说验证方式1的口令字长度为64bits,或者为8个字符。
9.小结
——前文介绍了OSPF路由协议的概念及该协议的工作原理。OSPF路由协议定义于RFC1247及RFC1583,该协议提供了一个不同的网络通过同一种TCP/IP协议交换网络信息的途径。作为一种链路状态的路由协议,OSPF具备许多优点:快速收敛,支持变长网络屏蔽码,支持CIDR以及地址summary,具有层次化的网络结构,支持路由信息验证等。所有这些特点保证了OSPF路由协议能够被应用到大型的、复杂的网络环境中。
|