首页 理论教育 开放最短路径优先协议在计算机网络中的应用

开放最短路径优先协议在计算机网络中的应用

时间:2023-11-09 理论教育 版权反馈
【摘要】:“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。从上述3个方面可以看出,OSPF协议和RIP的工作原理相差较大。主干区域的标识符规定为0.0.0.0。包括OSPF协议分组首部在内的分组长度,以字节为单位。

开放最短路径优先协议在计算机网络中的应用

1.开放最短路径优先协议的基本特点

这个协议的名字是开放最短路径优先(Open Shortest Path First,OSPF)协议。它是为克服RIP的缺点在1989年开发出来的。OSPF协议的原理很简单,但实现起来却较复杂。“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。OSPF协议的第二个版本OSPF2已成为互联网标准协议[RFC 2328]。

请注意:OSPF只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。实际上,所有的在自治系统内部使用的路由选择协议(包括RIP)都是要寻找条最短的路径。

OSPF协议最主要的特征就是使用分布式的链路状态协议(Link State Protocol),而不是像RIP那样的距离向量协议。和RIP相比,OSPF协议的3个要点和RIP的不同。

(1)向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(Flooding),这就是路由器通过所有输出端口向所有相邻的路由器发送信息。每个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。更具体的做法后面还要讨论。注意,RIP是仅仅向自己相邻的几个路由器发送信息。

(2)发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(Metric)。OSPF协议将这个“度量”用来表示费用、距离、时延、带宽等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便就称这个度量为“代价”。应注意,对于RIP,发送的信息是“到所有网络的距离和下一跳路由器”。

(3)只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息,而不是像RIP那样,不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。

从上述3个方面可以看出,OSPF协议和RIP的工作原理相差较大。

由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(Ink-state Database),这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的(这称为链路状态数据库的同步)。因此,每一个路由器都知道全网共有多少个路由器,以及哪些路由器是相连的、其代价是多少等。每一个路由器使用链路状态数据库中的数据,构造出自己的路由表(例如,使用Dijkstra的最短路径路由算法)。我们注意到,RIP的每一个路由器虽然知道到所有的网络的距离以及下一跳路由器,但却不知道全网的拓扑结构(只有到了下一跳路由器,才能知道再下一跳应当怎样走)。

OSPF协议的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表OSPF协议的更新过程收敛得快是其重要优点。

为了使OSPF协议能够用于规模很大的网络,OSPF协议将一个自治系统再划分为若干个更小的范围叫作区域(area)。图4-36所示的是一个自治系统被划分为4个区域。每个区域都有一个32 bit的区域标识符(用点分十进制表示)。当然,一个区域也不能太大,在一个区域内的路由器最好不超过200个。

图4-36 OSPF协议划分为两种不同的区域

划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。为了使每一个区域能够和本区域以外的区域进行通信,OSPF协议使用层次结构的区域划分。在上层的区域叫作主干区域(Backbone Area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是连通其他下层的区域。从其他区域来的信息都由区域边界路由器(Area Border Router)进行概括。在图4-36中,路由器R3、R4和R7都是区域边界路由器,而显然,每一个区域至少应当有一个区域边界路由器。在主干区域内的路由器叫作主干路由器(Backbone Router),如R3、R4、R5、R6和R7。一个主干路由器可以同时是区域边界路由器,如R3、R4和R7。在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息。这样的路由器叫作自治系统边界路由器(如图4-36所示中的R6)。

采用分层次划分区域的方法虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂。但这样做却能使每一个区域内部交换路由信息的通信量大大减小,因此使OSPF协议能够用于规模很大的自治系统中。这里再次看到了划分层次在网络设计中的重要性。OSPF协议不用UDP,而是直接用IP数据报传送(其IP数据报首部的协议字段值为89)。OSPF协议构成的数据报很短。这样做可减少路由信息的通信量。数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。

OSPF协议分组使用24 Byte的固定长度首部(图4-37),分组的数据部分可以是5种类型分组中的一种。下面简单介绍OSPF协议分组首部各字段的意义。

(1)版本。当前的版本号是2。

(2)类型。可以是5种类型分组中的一种。

(3)分组长度。包括OSPF协议分组首部在内的分组长度,以字节为单位。

(4)路由器标识符。标志发送该分组的路由器接口的IP地址

(5)区域标识符。分组属于区域的标识符。

(6)校验和。用来检测分组中的差错。

(7)鉴别类型。目前只有两种,0(不用)和1(口令)。

(8)鉴别。鉴别类型为0时就填入0,鉴别类型为1时则填入8个字符的口令。

图4-37 OSPF协议分组用IP数据报传送(www.xing528.com)

除以上的几个基本特点外,OSPF协议还具有下列特点:

(1)OSPF协议允许管理员给每条路由指派不同的代价。例如,高带宽的卫星链路对于非实时的业务可设置为较低的代价,但对于时延敏感的业务就可设置为非常高的代价。因此,OSPF协议对于不同类型的业务可计算出不同的路由。链路的代价可以是1~65 535中的任何一个量纲为1的数,因此十分灵活。商用的网络在使用OSPF协议时,通常根据链路带宽来计算链路的代价。这种灵活性是RIP所没有的。

(2)如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡(Load Balancing)。在代价相同的多条路径上分配通信量是通信量工程中的简单形式。RIP只能找出到某个网络的一条路径。

(3)所有在OSPF协议路由器之间交换的分组(例如,链路状态更新分组)都具有鉴别的功能,因而保证了仅在可信赖的路由器之间交换链路状态信息。

(4)OSPF协议支持可变长度的子网划分和无分类的编址CIDR。

(5)由于网络中的链路状态可能经常发生变化,因此OSPF协议让每一个链路状态都带上个32 bit的序号,序号越大状态就越新。OSPF协议规定,链路状态序号增长的速率不得超过5 s/次。这样,全部序号空间在600年内不会产生重复号。

2.OSPF协议的分组类型

OSPF协议共有以下5种分组类型:

(1)类型1,问候(Hel)分组,用来发现和维持邻站的可达性。

(2)类型2,数据库描述(Database Description)分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。

(3)类型3,链路状态请求(Link State Request)分组,向对方请求发送某些链路状态项目的详细信息。

(4)类型4,链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。这种分组是最复杂的,也是OSPF协议最核心的部分。路由器使用这种分组将其链路状态通知给邻站。链路状态更新分组共有五种不同的链路状态[RFC2328],此处略。

(5)类型5,链路状态确认(Link State Acknowledgment)分组,对链路更新分组的确认。

OSPF协议规定,每两个相邻路由器每隔10 s要交换一次问候分组。这样就能确知哪些邻站是可达的。对相邻路由器来说,“可达”是最基本的要求,因为只有可达邻站的链路状态信息才存入链路状态数据库(路由表就是根据链路状态数据库计算出来的)。在正常情况下,网络中传送的绝大多数OSPF协议分组都是问候分组。若有40 s没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表。

其他4种分组都用来进行链路状态数据库的同步。所谓同步就是指不同路由器的链路状态数据库的内容是一样的。两个同步的路由器叫作“完全邻接的”(Fully Adjacent)路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。

当一个路由器刚开始工作时,它只能通过问候分组得知它有哪些相邻的路由器在工作,以及将数据发往相邻路由器所需的“代价”。如果所有的路由器都把自己的本地链路状态信息对全网进行广播,那么各路由器只要将这些链路状态信息综合起来就可得出链路状态数据库。但这样做开销太大,因此OSPF协议采用下面的办法。

OSPF协议让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。摘要信息主要就是指出有哪些路由器的链路状态信息(及其序号)已经写入了数据库。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的分组交换,全网同步的链路数据库就建立起来了。图4-38给出了OSPF协议的基本操作,说明了两个路由器需要交换各种类型的分组。

图4-38 OSPF协议的基本操作

在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。OSPF协议使用的是可靠的洪泛法,其要点如图4-39所示。设路由器R用洪泛法发出链路状态更新分组。在图4-39所示中用一些小的箭头表示更新分组。第一次先发给相邻的3个路由器。这3个路由器将收到的分组再进行转发时,要将其上游路由器除外。可靠的洪泛法是在收到更新分组后要发送确认(收到重复的更新分组只需要发送一次确认),图4-39所示中的空心箭头即表示确认分组。

图4-39 用可靠的洪泛法发送更新分组

为了确保链路状态数据库与全网的状态保持一致,OSPF协议还规定每隔一段时间,如30 min,要刷新一次数据库中的链路状态。

由于一个路由器的链路状态只涉及与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此,当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多。由于OSPF协议没有“坏消息传播得慢”的问题,所以其响应网络变化的时间小于100 ms。

若N个路由器连接在一个以太网上,则每个路由器要向其他(N-1)个路由器发送链路状态信息,因此共有N(N-1)个链路状态要在这个以太网上传送。OSPF协议对这种多点接入的局域网用了指定的路由器(Designated Router)的方法,使广播的信息量大大减少。指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈