计算机网络(六) 网关--内部网关协议RIP和OSPF

内部网关协议RIP

RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议。RIP是一种分布式的基于距离向量的路由选择协议

RIP协议要求网络中每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。

RIP协议将“距离”定义为从一路由器到直接连接的网络的距离定义为1。RIP协议的“距离”也称为“跳数”。

RIP允许一条路径最多只能包含15个路由器。“距离”等于16时相当于不可达。可见RIP只适用于小型互联网

RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。


RIP协议的特点:

1)仅和相邻路由器交换信息。

2)路由器交换的信息是当前本路由器所知道的全部信息,即自己的路由表。

3)按固定的时间间隔交换路由信息,例如每隔30秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。


路由表中最主要的信息:到某个网络的距离(即最短距离),以及应经过的下一跳地址。

路由表更新的原则是找出到每个目的网络的最短距离。这种更新算法又称为距离向量算法

距离向量算法:

对每一个相邻路由器发送过来的RIP报文,进行以下步骤:

1)对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加一(见后面的解释1)。每一个项目都有三个关键数据,即:到目的网络N,距离是d,下一跳路由器是X。

2)对修改后的RIP报文中的每一个项目,进行以下步骤:

       若原来的路由表中没有目的网络N,则把该项目添加到路由表中(见解释2)。

       否则(即在路由表中有目的网络N,这时就再查看下一跳路由器地址)

                 若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目(见解释3)。

                 否则(即这个项目是:到目的网络N,但下一跳路由器不是X)

                           若收到的项目中的距离d小于路由表中的距离,则进行更新(见解释4)。

                           否则什么也不做(见解释5)。

3)若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为16(表示不可达)。

4)返回i。

距离向量算法的基础是Bellman-Ford算法(或Ford-Fulkerson算法)。这种算法要点:设X是结点A到B的最短路径上的一个结点。若把路径A->B拆成两段路径A->X和X->B,则每一段路径A->X和X->B也都分别是结点A到X和结点X到B的最短路径。


解释1:这样做是为了便于进行本路由表的更新。

解释2:表明这是新的目的网络,应当加入到路由表中。

解释3:为什么要替换呢?因为这是最新的消息,要以最新的消息为准。

解释4:例如,若路由表中已有项目“Net2,5,P”,就要更新为“Net2,4,X”。因为到网络Net2的距离变短了。

解释5:若距离更大了,显然不应更新。

路由表
目的网络 距离 下一跳路由器
Net1 3 R1
Net2 4 R2
Net3 1 直接交付


RIP2协议的报文格式

RIP协议使用运输层的用户数据报UDP进行传送(使用UDP的端口520)

RIP的首部占4个字节,命令字段指出报文的意义。“1”表示请求路由信息,“2”表示对请求路由信息的响应或未被请求而发出的路由更新报文。首部后面必为0是为了4字节的对齐。

RIP2报文中德路由部分由若干个路由信息组成。每个路由信息需要用20个字节。地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。如采用IP地址就令这个字段的值为2(原来考虑RIP也可用其他非TCP/IP协议的情况)。路由标记填入自治系统号ASN(Autonoumous System Number),这是考虑使RIP有可能收到本自治系统以外的路由选择信息。

RIP2还具有简单的鉴别功能。若使用鉴别功能,则将原来写入第一个路由信息的位置用作鉴别。这时将地址族标识符置为全1(即0xFFFF),而路由标记写入鉴别类型,剩下的16字节为鉴别数据。

一个RIP报文最多可包括25个路由,因而RIP报文的最大长度是4+25*20=504字节。若超过,必须再用一个RIP报文来传送。


问题:当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。

当网络Net出了故障,与之唯一相连的路由器A将到该网Net的距离改为16(表示不可达)。但由于路由器按固定的时间间隔交换路由信息(例如30秒),所以该路由器A可能要等一段时间后才将更新消息发送出去。然而其他的路由器B可能把自己的路由表发送过来了,该路由器A误以为可经过其他路由器B到达该网(该路由器A唯一与该网Net相连,其他路由器B通过该路由器A与该网相连,所以其他路由器B到该网Net的距离比16小),所以路由器A将到该网Net的距离调整为其他路由器B的距离加一,而其他路由器B把收到的该路由器A到该网Net的路由信息用来更新自己通过该路由器A(即下一跳为路由器A)到该网Net的距离。由此这样的更新一直继续下去,直到路由器到该网的距离都增大到16。

特点:好消息传播得快,而坏消息传播得慢。(因为更新机制,坏消息可能被好消息覆盖,而该好消息会一直更新为坏消息为止)

为了使坏消息传播得更快些,可以采用多种措施。例如,让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送。

优点:实现简单,开销小

缺点:最大距离为15限制了网络的规模。其次,路由器之间交换的路由信息是路由器中德完整路由表,因而随着网络规模的扩大,开销也就大。最后,“坏消息传播得慢”,使更新过程的收敛时间过长。



内部网关协议OSPF

开放最短路径优先OSPF(Open Shortest Path First)。

“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。

注意:OSPF只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。

主要特征:使用分布式的链路状态协议(link state protocol)

OSPF的三个要点和RIP的都不一样:

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

2)发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路地的“度量(metric)”。OSPF将这个“度量”用来表示费用、距离、时延、带宽等等。这些都由网络管理人员来决定。有时为方便称这个度量为“代价”

3)只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。


由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(link-state database),这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的(这称为链路状态数据库的同步)。

为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围叫做区域(area).每一个区域都有一个32位的区域标识符(用点分十进制表示)。一个区域内的路由器最好不超过20个。

划分区域的好处就是利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。


为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫做主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器(area border router)进行概括。每一个区域至少应当有一个区域边界路由器。在主干区域内的路由器叫做主干路由器(backbone router)。在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息。这样的路由器叫做自治系统边界路由器

 

采用分层次划分区域的方法虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂,但却使每一个区域内部交换路由信息的通信量大大减小。

OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89)。OSPF构成的数据报很短。减少路由信息的通信量,不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。

OSPF特点:

1)允许管理员给每条路由指派不同的代价。例如,高带宽的卫星链路对于非实时的业务可设置为较低的代价。OSPF对于不同类型的业务可计算出不同的路由。链路的代价可以是1至65535中的任何一个无量纲的数。

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

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

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

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


OSPF共有以下五种分组类型:

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

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

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

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

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

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

所谓同步就是指不同路由器的链路状态数据库的内容是一样的。两个同步的路由器叫做“完全邻接的”(fully adjacent)路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状体数据库并没有到达一致。

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

解决方法:OSPF让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。摘要信息主要就是指出有哪些路由器的链路状态信息(以及其序号)已经写入了数据库。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了。


OSPF的基本操作,说明了两个路由器需要交换各种类型的分组。

计算机网络(六) 网关--内部网关协议RIP和OSPF_第1张图片

在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。

OSPF使用的是可靠的洪泛法。路由器R用洪泛法发出链路状态更新分组。一些小的箭头表示更新分组。第一次先发给相邻的三个路由器。这三个路由器将收到的分组再进行转发时,要将其上游路由器除外。可靠的洪泛法是在收到更新分组后要发送确认(收到重复的更新分组只需要发送一次确认)。空心箭头表示确认分组。


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


由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多。

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






















你可能感兴趣的:(计算机网络)