OSPF协议的工作原理

2021-03-25 18:10:06 云杰通信 99

OSPF协议的工作原理

  OSPF协议是一种链路状态协议,那么OSPF是如何来描述链路连接状况呢?

  抽象模型Model 1表示路由器的一个不连接其他路由器,只连接了一个段。此时,对于运行 OSPF的路由器R1,只能识别本身,无法识别该网段上的设备(主机等);抽象模型Model 2表示路由器R1通过点对点链路(如PPP、HDLC等)连接一台路由器R2;抽象模型Model 3表示路由器R1通过点对多点(如Frame Relay、X.25等)链路连接多台路由器R3、R4等,此时路由器R5、R6之间不进行互联;抽象模型Model 4表示路由器R1通过点对多点(如Frame Relay、X.25等)链路连接多台路由器R5、R6等,此时路由器R5、R6之间互联。以上抽象模型着重于各类链路层协议的特点,而不涉及具体的链路层协议细节。该模型基本表达了当前网络链路的连接种类。

  在OSPF协议中,分别对以上四种链路状态类型作了描述:

  对于抽象模型Model 1(以太网链路),使用Link ID(连接的网段)、Data(掩码)、Type(类型)和Metric(代价)来描述。此时的Link ID即为路由器R1接口所在网段,Data为所用掩码,Type为3(Stubnet),Metric为代价值。

  对于抽象模型Model 2(点对点链路),先使用Link ID(连接的网段)、Data(掩码)、Type(类型)和Metric(代价)来描述接口路由,以上各参数与Model 1相似。接下来描述对端路由器R2,四个参数名不变,但其含义有所不同。此时Link ID为路由器R2的Router ID,Data为路由器R2的接口地址,Type为1(Router),Metric仍为代价值。

  对于抽象模型Model 3(点对多点链路,不全连通),先使用Link ID(连接的网段)、Data(掩码)、Type(类型)和Metric(代价)来描述接口路由,以上各参数与Model 1相似。接下来分别描述对端路由器R3、R4的方法,与在Model 2中描述R2类似。

  对于抽象模型Model 4(点对多点链路,全连通),先使用Link ID(网段中DR的接口地址)、Data(本接口的地址)、Type(类型)和Metric(代价)来描述接口路由。此时Type值为2(Transnet),然后是本网段中DR(指定路由器)描述的连接通告。

  计算路由

  路由器完成周边网络的拓扑结构的描述(生成LSA)后,发送给网络中的其他路由器,每台路由器生成链路状态(LSDB)。路由器开始执行SPF(最短路径优先)算法计算路由,路由器以自己为根节点,把LSDB中的条目与LSA进行对比,经过若干次的递归和回溯,直至路由器把所有LSA中包含的网段都找到路径(把该路由填入路由表中),此时意味着所到达的该段链路的类型标识为3(Stubnet)。

  确保LSA在路由器间传送的可靠性

  从上文可以知道,作为链路状态协议的OSPF的工作机制,与RIP等距离向量的路由协议是不一样的。距离向量路由协议是通过周期性地发送整张路由表,来使网络中的路由器的路由信息保持一致。

  在路由器R1初始化完成后,它将向路由器R2发送Hello数据包。此时R1并不知道R2的存在,因此在数据包中不包含R2的信息(参数seen=0)。而R2在接收到该数据包后,将向R1发送Hello包。此时在路由器R1和R2之间就建立了邻接关系,它们就可以把LSA发送给对方。当然,在发送时OSPF考虑到要尽量减少占用的带宽,它采用了一些技巧,我们将在下一节简单介绍这些内容。

  众所周知,IP协议是一种不可靠的、面向无连接的协议,它本身没有确认和错误重传机制。那么,在这种协议基础之上,要做到数据包丢失或出错后进行重传,上层协议必须本身具备这种可靠的机制。OSPF采取了与TCP类似的确认和超时重传机制。链路状态数据库描述(DD)数据包中包含了一些参数,序列号(seq)、报文号(I)、结尾标识(M)及主从标志(MS)。

  高效率地进行LSA的交换

  在RIP等距离向量路由协议中,路由信息的交互是通过周期性地传送整张路由表的机制来完成的,该机制使距离向量路由协议无法高效地进行路由信息的交换。在OSPF协议中,为了提高传输效率,在进行链路状态通告(LSA)数据包传输时,使用包含LSA头(Head)的链路状态数据库描述数据包进行传输,因为每个LSA头中不包含具体的链路状态信息,它只含有各LSA的标识(该标识唯一代表一个LSA),所以,该报文非常小。

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

  8 小结

  综上所述,我们可以归纳出在OSPF协议中使用到的五种协议报文,并简单介绍了它们的作用,我们作个简单的小结:

  ◆ Hello报文,通过周期性地发送来发现和维护邻接关系;

  ◆ DD(链路状态数据库描述)报文,描述本地路由器保存的LSDB(链路状态数据库);

  ◆ LSR(LS Request)报文,向邻居请求本地没有的LSA;

  ◆ LSU(LS Update)报文,向邻居发送其请求或更新的LSA;

  ◆ LSAck(LS ACK)报文,收到邻居发送的LSA后发送的确认报文。

  OSPF协议采用的特殊机制

  指定路由器和备份指定路由器

  在OSPF协议中,路由器通过发送Hello报文来确定邻接关系,每一台路由器都会与其他路由器建立邻接关系,这就要求路由器之间两两建立邻接关系,每台路由器都必须与其他路由器建立邻接关系,以达到同步链路状态数据库的目的,在网络中就会建立起n×(n-1)/2条邻接关系(n为网络中OSPF路由器的数量),这样,在进行数据库同步时需要占用一定的带宽。

  为了解决这个问题,OSPF采用了一个特殊的机制:选举一台指定路由器(DR),使网络中的其他路由器都和它建立邻接关系,而其他路由器彼此之间不用保持邻接。路由器间链路状态数据库的同步,都通过与指定路由器交互信息完成。这样,在网络中仅需建立n-1条邻接关系。

  要被选举为指定路由器,该路由器应符合以下要求:

  ◆ 该路由器是本网段内的OSPF路由器;

  ◆ 该OSPF路由器在本网段内的优先级(Priority)>0;

  ◆ 该OSPF路由器的优先级最大,如果所有路由器的优先级相等,路由器号(Router ID)最大的路由器(每台路由器的Router ID是唯一的)被选举为指定路由器。

  满足以上条件的路由器被选举为指定路由器,而第二个满足条件的路由器则当选为备份指定路由器。

  指定路由器和备份指定路由器的选举,是由路由器通过发送Hello数据报文来完成的。

  OSPF协议中的区域划分

  OSPF协议在大规模网络的使用中,链路状态数据库比较庞大,它占用了很大的空间。在执行最小生成数算法时,要耗费较长的时间和很大的资源,网络拓扑变化的概率也大大增加。这些因素的存在,不仅耗费了路由器大量的存储空间,加重了路由器CPU的负担,而且,整个网络会因为拓扑结构的经常变化,长期处于“动荡”的不可用的状态。

  OSPF协议之所以能够支持大规模的网络,进行区域划分是一个重要的原因。

  OSPF协议允许网络方案设计人员根据需要把路由器放在不同的区域(Area)中,两个不同的区域通过区域边界路由器(ABR)相连。在区域内部的路由信息同步,采取的方法与上文提到的方法相同。在两个不同区域之间的路由信息传递,由区域边界路由器(ABR)完成。它把相连两个区域内生成的路由,以类型3的LSA向对方区域发送。

  OSPF协议使用区域号(Area ID)来区分不同的区域,其中,区域0为骨干区域(根区域)。因为在区域间不再进行链路状态信息的交互(实际上,在区域间传递路由信息采用了可能导致路由自环的递归算法),OSPF协议依靠维护整个网络链路状态来实现无路由自环的能力,在区域间无法实现。