首页 > 学院 > 网络通信 > 正文

OSPF路由协议详解

2019-11-04 12:08:26
字体:
来源:转载
供稿:网友

  ◆1.OSPF的骨干区域及虚拟链路(Virtual-link)
  
  ——在OSPF路由协议中存在一个骨干区域(Backbone),该区域包括属于这个区域的网络及相应的路由器,骨干区域必须是连续的,同时也要求其余区域必须与骨干区域直接相连。骨干区域一般为区域0,其主要工作是在其余区域间传递路由信息。所有的区域,包括骨干区域之间的网络结构情况是互不可见的,当一个区域的路由信息对外广播时,其路由信息是先传递至区域0(骨干区域),再由区域0将该路由信息向其余区域作广播。骨干区域与其余区域的关系在这里不在熬述。
  
  ——在实际网络中,可能会存在backbone不连续的或者某一个区域与骨干区域物理不相连的情况,在这两种情况下,系统治理员可以通过设置虚拟链路的方法来解决。
  
  ——虚拟链路是设置在两个路由器之间,这两个路由器都有一个端口与同一个非骨干区域相连。虚拟链路被认为是属于骨干区域的,在OSPF路由协议看来,虚拟链路两端的两个路由器被一个点对点的链路连在一起。在OSPF路由协议中,通过虚拟链路的路由信息是作为域内路由来看待的。下面我们分两种情况来说明虚拟链路在OSPF路由协议中的作用。
  
  1.1 当一个区域与area0没有物理链路相连时
  
  ——前文已经提到,一个骨干区域Area 0必须位于所有区域的中心,其余所有区域必须与骨干区域直接相连。但是,也存在一个区域无法与骨干区域建立物理链路的可能性,在这种情况下,我们可以采用虚拟链路。虚拟链路使该区域与骨干区域间建立一个逻辑联接点,该虚拟链路必须建立在两个区域边界路由器之间,并且其中一个区域边界路由器必须属于骨干区域。
  
  
  1.2 残域(Stub area)
  
  ——在OSPF路由协议的链路状态数据库中,可以包括AS外部链路状态信息,这些信息会通过flooding传递到AS内的所有OSPF路由器上。但是,在OSPF路由协议中存在这样一种区域,我们把它称为残域(stub area),AS外部信息不答应广播进/出这个区域。对于残域来说,访问AS外部的数据只能根据默认路由(default-route)来寻址。这样做有利于减小残域内部路由器上的链路状态数据库的大小及存储器的使用,提高路由器计算路由表的速度。
  
  ——当一个OSPF的区域只存在一个区域出口点时,我们可以将该区域配置成一个残域,在这时,该区域的边界路由器会对域内广播默认路由信息。需要注重的是,一个残域中的所有路由器都必须知道自身属于该残域,否则残域的设置没有作用。另外,针对残域还有两点需要注重:一是残域中不答应存在虚拟链路;二是残域中不答应存在AS边界路由器。
  
  ◆2.OSPF协议路由器及链路状态数据包分类
  
  2.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地址。
  
  2.2 OSPF链路状态广播数据包种类
  
  ——随着OSPF路由器种类概念的引入,OSPF路由协议又对其链路状态广播数据包(LSA)作出了分类。OSPF将链路状态广播数据包共分成5类,分别为:
  
  ——类型1:又被称为路由器链路信息数据包(Router Link),所有的OSPF路由器都会产生这种数据包,用于描述路由器上联接到某一个区域的链路或是某一端口的状态信息。路由器链路信息数据包只会在某一个特定的区域内广播,而不会广播至其它的区域。
  
  ——在类型1的链路数据包中,OSPF路由器通过对数据包中某些特定数据位的设定,告诉其余的路由器自身是一个区域边界路由器或是一个AS边界路由器。并且,类型1的链路状态数据包在描述其所联接的链路时,会根据各链路所联接的网络类型对各链路打上链路标识,Link ID。
  
  
  ——类型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。
  
  ◆3.OSPF协议工作过程
  
  ——OSPF路由协议针对每一个区域分别运行一套独立的计算法则,对于ABR来说,由于一个区域边界路由器同时与几个区域相联,因此一个区域边界路由器上会同时运行几套OSPF计算方法,每一个方法针对一个OSPF区域。下面对OSPF协议运算的全过程作一概括性的描述。
  
  3.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路由表。
  
  3.2 建立OSPF交互关系adjacency
  
  ——OSPF路由协议通过建立交互关系来交换路由信息,但是并不是所有相邻的路由器会建立OSPF交互关系。下面将OSPF建立adjacency的过程简要介绍一下。
  
  ——OSPF协议是通过Hello协议数据包来建立及维护相邻关系的,同时也用其来保证相邻路由器之间的双向通信。OSPF路由器会周期性地发送Hello数据包,当这个路由器看到自身被列于其它路由器的Hello数据包里时,这两个路由器之间会建立起双向通信。在多接入的环境中,Hello数据包还用于发现指定路由器DR,通过DR来控制与哪些路由器建立交互关系。
  
  ——两个OSPF路由器建立双向通信这后的第二个步骤是进行数据库的同步,数据库同步是所有链路状态路由协议的最大的共性。在OSPF路由协议中,数据库同步关系仅仅在建立交互关系的路由器之间保持。
  
  ——OSPF的数据库同步是通过OSPF数据库描述数据包(Database Description 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路由器建立交互关系的最后一个状态,在这时,建立起交互关系的路由器之间已经完成了数据库同步的工作,它们的链路状态数据库已经一致。
  
  3.3 域间路由
  
  ——前面一节描述了OSPF路由协议的单个区域中的计算过程。在单个OSPF区域中,OSPF路由协议不会产生更多的路由信息。为了与其余区域中的OSPF路由器通讯,该区域的边界路由器会产生一些其它的信息对域内广播,这些附加信息描绘了在同一个AS中的其它区域的路由信息。具体路由信息交换过程如下:
  
  ——在OSPF的定义中,所有的区域都必须与区域0相联,因此每一个区域都必须有一个区域边界路由器与区域0相联,这一个区域边界路由器会将其相联接的区域内部结构数据通过Summary Link广播至区域0,也就是广播至所有其它区域的边界路由器。在这时,与区域0相联的边界路由器上有区域0及其它所有区域的链路状态信息,通过这些信息,这些边界路由器能够计算出至相应目的地的路由,并将这些路由信息广播至与其相联接的区域,以便让该区域内部的路由器找到与区域外部通信的最佳路由。
  
  3.4 AS外部路由
  
  ——一个自治域AS的边界路由器会将AS外部路由信息广播至整个AS中除了残域的所有区域。为了使这些AS外部路由信息生效,AS内部的所有的路由器(除残域内的路由器)都必须知道AS边界路由器的位置,该路由信息是由非残域的区域边界路由器对域内广播的,其链路广播数据包的类型为类型4。
  
  ◆4.OSPF路由协议验证
  
  ——在OSPF路由协议中,所有的路由信息交换都必须经过验证。在前文所描述的OSPF协议数据包结构中,包含有一个验证域及一个64位长度的验证数据域,用于特定的验证方式的计算。
  
  ——OSPF数据交换的验证是基于每一个区域来定义的,也就是说,当在某一个区域的一个路由器上定义了一种验证方式时,必须在该区域的所有路由器上定义相同的协议验证方式。另外一些与验证相关的参数也可以基于每一个端口来定义,例如当采用单一口令验证时,我们可以对某一区域内部的每一个网络设置不同的口令字。
  
  ——在OSPF路由协议的定义中,初始定义了两种协议验证方式,方式0及方式1,分别介绍如下:
  
  ——验证方式0:采用验证方式0表示OSPF对所交换的路由信息不验证。在OSPF的数据包头内64位的验证数据位可以包含任何数据,OSPF接收到路由数据后对数据包头内的验证数据位不作任何处理。
  
  ——验证方式1:验证方式1为简单口令字验证。这种验证方式是基于一个区域内的每一个网络来定义的,每一个发送至该网络的数据包的包头内都必须具有相同的64位长度的验证数据位,也就是说验证方式1的口令字长度为64bits,或者为8个字符。
  
  ◆5.小结
  
  ——前文介绍了OSPF路由协议的概念及该协议的工作原理。OSPF路由协议定义于RFC1247及RFC1583,该协议提供了一个不同的网络通过同一种TCP/IP协议交换网络信息的途径。作为一种链路状态的路由协议,OSPF具备许多优点:快速收敛,支持变长网络屏蔽码,支持CIDR以及地址summary,具有层次化的网络结构,支持路由信息验证等。所有这些特点保证了OSPF路由协议能够被应用到大型的、复杂的网络环境中。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表