内部网关协议OSPF
前面几篇文章我们学习了内部网关协议,提到了其中一种协议RIP,今天来看看另外一种协议:OSPF。
OSPF协议的基本特点
OSPF,即Open Shortest Path First,开放最短路径优先,它最主要的特征就是使用分布式的链路状态协议,而不是像RIP那样的距离向量协议。OSPF的三个要点和RIP协议的都不一样(和哪些路由器交换信息?交换什么信息?何时交换?)
(1)向本自治系统中所有路由器发送信息。这里使用的是洪泛法,即路由器通过所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再将此信息发往其所有的相邻路由器。(除了刚刚发来消息那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。RIP协议仅仅向自己相邻的几个路由器发送信息。
(2)发送的信息就是与本路由器相邻的所有路由器的链路状态,只是路由器所知道的部分信息。链路状态就是说明本路由器都和哪些路由器相邻,以及该链路的度量(用来表示费用、距离、时延、带宽等等)。RIP协议发送的信息是:到所有网络的距离和下一跳路由器。
(3)只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。RIP协议不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。
OSPF的链路状态数据库能较快的进行更新,使各个路由器能及时更新其路由表,OSPF的更新过程收敛的快是其重要优点。
由于各路由器之间频繁的交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图,全网是一致的。每一个路由器都知道全网共有多少个路由器,以及哪些路由器是相连的,其代价是多少。每一个路由器使用链路状态数据库中的数据,构造出自己的路由表。RIP协议下,每一个路由器虽然知道自己到所有网络的距离以及下一跳路由器,但却不知道全网的拓扑结构,只有到了下一跳路由器,才知道再下一跳应当怎样走。
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域。如下图所示:
一个自治区域被划分为四个区域,每个区域都有一个32位的区域标识符。当然一个区域也不能太大,一个区域内的路由器最好不超过200个。划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整拓扑,而不知道其它区域的网络拓扑。为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫做主干区域,主干区域的标识符规定为0.0.0.0,它的作用是用来连通其它在下层的区域。从其它区域来的信息都由区域边界路由器进行概括。在上图中,R3, R4, R7都是区域边界路由器。在主干区域内的路由器叫做主干路由器,如R3, R4, R5, R6, R7。一个主干路由器可以同时是区域边界路由器,如R3, R4, R7。在主干区域内还要有一个路由器专门和本自治系统外的其它自治系统交换路由信息,这样的路由器叫做自治系统边界路由器,如R6。
采用分层次划分区域的方法虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂了,但却使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于规模很大的自治系统中。
OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89)。OSPF构成的数据报很短,这样做可减少路由信息的通信量,也不必将长的数据报分片传送(分片传送的数据报只要丢失一个,就无法组装成原来的数据报,这导致整个数据报就必须重传)。
OSPF分组使用24字节的固定长度首部,分组的数据部分有五种类型,先来看下OSPF首部各字段的意义:
-
版本
当前的版本号是2 -
类型
是五种分组类型中的一种 -
分组长度
包括OSPF首部在内的分组长度,以字节为单位 -
路由器标识符
标志发送该分组的路由器的接口的IP地址 -
区域标识符
分组属于的区域的标识符 -
检验和
用来检验分组中的差错 -
鉴别类型
目前只有两种,0(不用)和1(口令) -
鉴别
鉴别类型为0时就填入0,鉴别类型为1则填入8个字符的口令
除了以上基本特点外,OSPF还具有下列的一些特点:
(1)OSPF允许管理员给每条路由指派不同的代价。例如,高带宽的卫星链路对于非实时的业务可设置为较低的代价,但对于时延敏感的业务可设置为较高的代价。因此,OSPF对于不同类型的业务可计算出不同的路由。商用的网络在使用OSPF时,通常根据链路带宽来计算链路的代价
(2)如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径,这叫做多路径间的负载平衡
(3)所有在OSPF路由器之间交换的分组,都具有鉴别的功能,因而保证了仅可在可信赖的路由器之间交换链路状态信息
(4)OSPF支持可变长度的子网划分和无分类的编址CIDR(超网)
(5)由于网络中的链路状态可能经常发生变化,因此OSPF让每一个链路状态都带上一个32位的序号,序号越大就越新。OSPF规定,链路状态序号增长的速率不得超过每5秒钟1次
OSPF的五种分组类型
OSPF共有以下五种分组类型
(1)类型1,问候分组,用来发现和维持邻站的可达性
(2)类型2,数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息
(3)类型3,链路状态请求分组,向对方请求发送某些链路状态项目的详细信息
(4)类型4,链路状态更新分组,用洪泛法对全网更新链路状态。路由器使用这种分组将其链路状态通知给邻站。
(5)类型5,链路状态确认分组,对链路更新分组的确认。
OSPF规定,每两个相邻的路由器,每隔10s要交换一次问候分组,这样就能确知哪些邻站是可达的。对相邻路由器来说,可达是最基本的要求,因为只有可达邻站的链路状态信息才存入链路状态数据库。在正常情况下,网络中传送的绝大多数OSPF分组都是问候分组。若有40s没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表。
其它的四种分组都是用来进行链路状态数据库的同步。当一个路由器刚开始工作时,它只能通过问候分组得知它有哪些相邻的路由器在工作,以及将数据发往相邻路由器所需的代价。OSPF让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。摘要信息主要就是指出有哪些路由器的链路状态信息已经写入了数据库。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了。下图给出了OSPF的基本操作,说明了两个路由器需要交换的各种类型的分组。
为了确保链路状态数据库与全网的状态保持一致,OSPF规定每隔一段时间,要刷新一次数据库中的链路状态。