第5节OSPF协议一、概述OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(AutonomousSystem),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。作为一种链路状态的路由协议,OSPF将链路状态广播数据包LSA(LinkStateAdvertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。二、OSPF协议的特点可以适应大规模网络路由变化收敛快无路由自环支持可变长子网掩码VLSM支持等值路由支持区域划分提供路由分级管理支持验证支持以组播地址发送协议报文三、OSPF通过链路状态描述网络拓扑作为一种典型的链路状态的路由协议,OSPF还得遵循链路状态路由协议的统一算法。链路状态的算法非常简单,在这里将链路状态算法概括为以下四个步骤:1、首先当路由器初始化或当网络结构发生变化(例如增减路由器,链路状态发生变化等)时,路由器会产生链路状态广播数据包LSA(Link-StateAdvertisement),该数据包里包含路由器上所有相连链路,也即为所有端口的状态信息。2、然后所有路由器会通过一种被称为刷新(Flooding)的方法来交换链路状态数据。Flooding是指路由器将其LSA数据包传送给所有与其相邻的OSPF路由器,相邻路由器根据其接收到的链路状态信息更新自己的数据库,并将该链路状态信息转送给与其相邻的路由器,直至稳定的一个过程。3、然后当网络重新稳定下来,也可以说OSPF路由协议收敛下来时,所有的路由器会根据其各自的链路状态信息数据库计算出各自的路由表。该路由表中包含路由器到每一个可到达目的地的Cost以及到达该目的地所要转发的下一个路由器(next-hop)。4、第4个步骤实际上是指OSPF路由协议的一个特性。当网络状态比较稳定时,网络中传递的链路状态信息是比较少的,或者可以说,当网络稳定时,网络中是比较安静的。这也正是链路状态路由协议区别与距离矢量路由协议的一大特点。对以太网的链路状态描述1对0的链路状态描述linkid:10.0.0.0/*网段*/data:255.0.0.0/*掩码*/type:StubNet(3)/*类型*/metric:50/*花费*/对PPP的链路状态描述1对1的链路状态描述对本接口网段地址的描述linkid:20.0.0.0/*网段*/data:255.0.0.0/*掩码*/type:StubNet(3)/*类型*/metric:5/*花费*/对路由器RTB的描述linkid:2.2.2.2/*RTB的routerid*/data:20.0.0.2/*RTB的接口地址*/type:Router(1)/*类型*/metric:5/*花费*/对Frame-relay的链路状态描述1对多的链路状态描述(多点之间无连接)对本接口地址的描述linkid:40.0.0.1/*网段*/data:255.255.255.255/*掩码*/type:StubNet(3)/*类型*/metric:5/*花费*/对路由器RTF的描述linkid:3.3.3.3/*RTF的routerid*/data:40.0.0.1/*与RTF相连的接口地址*/type:Router(1)/*类型*/metric:5/*花费*/对路由器RTE的描述linkid:4.4.4.4/*RTE的routerid*/data:40.0.0.1/*与RTE相连的接口地址*/type:Router(1)/*类型*/metric:5/*花费*/对X.25的链路状态描述1对多(全连通)的链路状态描述对每个路由器的描述linkid:30.0.0.3/*网段中DR的接口地址*/data:30.0.0.1/*本接口的地址*/type:TransNet(2)/*类型*/metric:50/*花费*//*DR(6.6.6.6)生成的LSA*/Netmask:255.255.255.0Attached:30.0.0.1RouterAttached:30.0.0.2RouterAttached:30.0.0.3Router加上LSA的头(head)结构Type:Router/*LSA的类型*/Isid:1.1.1.1/*LSA的标识*/advrtr:1.1.1.1/*生成该LSA的路由器*/Isage:4/*本条LSA的老化时间*/len:108/*LSA的长度*/seq#:80000001/*LSA的序列号*/cksum:0x3543/*LSA的校验和*/Linkcoute:7/*本LSA中包含的连接个数*/四、运行SPF算法计算路由SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF算法中,被称为最短路径树。在OSPF路由协议中,最短路径树的树干长度,即OSPF路由器至每一个目的地路由器的距离,称为OSPF的Cost。由此生成每一个路由器的OSPF路由表。两台路由器建立邻居关系OSPF的五种协议报文1、HELLO报文,发现及维持邻居关系,选举DR、BDR。2、DD报文,描述本地LSDB的情况。3、LSR报文,向对端请求本端没有或对端更新的LSA。4、LSU报文,向对方更新LSA。5、LSAck报文,收到LSU之后进行确认。OSPF的邻居状态将OSPF相邻路由器从发送Hello数据包,建立数据库同步至建立完全的OSPF交互关系的过程分成几个不同的状态。1、Down这是OSPF建立交互关系的初始化状态,表示在一定时间之内没有接收到从某一相邻路由器发送来的信息。在非广播性的网络环境内,OSPF路由器还可能对处于Down状态的路由器发送Hello数据包。2、Attempt该状态仅在例如帧中继、X.25或ATM环境中有效,表示在一定时间内没有接收到某一相邻路由器的信息。但是OSPF路由器仍必须通过以一个较低的频率向该相邻路由器发送Hello数据包来保持联系。3、Init在该状态时,OSPF路由器已经接收到相邻路由器发送来的Hello数据包,但自身的IP地址并没有出现在该Hello数据包内,也就是说,双方的双向通信还没有建立起来。4、2-Way这个状态可以说是建立交互方式真正的开始步骤。在这个状态,路由器看到自身已经处于相邻路由器的Hello数据包内,双向通信已经建立。指定路由器及备份指定路由器的选择正是在这个状态完成的。在这个状态,OSPF路由器还可以根据其中的一个路由器是否指定路由器或是根据链路是否点对点或虚拟链路来决定是否建立交互关系。5、Exstart这个状态是建立交互状态的第一个步骤。在这个状态,路由器要决定用于数据交换的初始的数据库描述数据包的序列号,以保证路由器得到的永远是最新的链路状态信息。同时,在这个状态路由器还必须决定路由器之间的主备关系,处于主控地位的路由器会向处于备份地位的路由器请求链路状态信息。6、Exchange在这个状态,路由器向相邻的OSPF路由器发送数据库描述数据包来交换链路状态信息,每一个数据包都有一个数据包序列号。在这个状态,路由器还有可能向相邻路由器发送链路状态请求数据包来请求其相应数据。7、Loading在loading状态,OSPF路由器会就其发现的相邻路由器的新的链路状态数据及自身的已经过期的数据向相邻路由器提出请求,并等待相邻路由器的回答。8、Full这是两个OSPF路由器建立交互关系的最后一个状态,在这时,建立起交互关系的路由器之间已经完成了数据库同步的工作,它们的链路状态数据库已经一致。DR(DesignatedRouter)指定路由器五、DR与BDRDR的选举过程登记选民本网段的OSPF路由器本村内的18岁以上公民登记候选人本网段内的priority0的OSPF路由器本村内30岁以上公民,在本村居住3年以上竞选演说所有priority0的OSPF路由器都认为自己是DR所有的候选人都认为自己应该当村长投票选priority值最大的,若值相等,选RouterID最大选年纪最大,若年龄相等,按姓氏笔画排序DR选举中的指导思想选举制DR是各路由器选出来的,而非人工指定的终身制DR一旦当选,除非路由器故障,否则不会更换。世袭制选出DR的同时,也选出BDR。DR故障后,由BDR接替成为新DR。由于DR的出现给协议带来的变化为了减少在一个网段内带宽的占用,提出了DR。这样就将同一网段内LSDB同步的次数由O(N)2减少为O(N)。六、划分区域OSPF在大型网络中可能遇到的问题:LSDB非常庞大,占用大量的存储空间。计算最小生成树耗时增加,CPU负担很重。网络拓扑结构经常变化,网络经常处于“动荡”之中。解决办法——划分区域在OSPF路由协议的定义中,可以将一个路由域或者一个自治系统AS划分为几个区域。在OSPF中,由按照一定的OSPF路由法则组合在一起的一组网络或路由器的集合称为区域(AREA)。在OSPF路由协议中,每一个区域中的路由器都按照该区域中定义的链路状态算法来计算网络拓扑结构,这意味着每一个区域都有着该区域独立的网络拓扑数据库及网络拓扑图。对于每一个区域,其网络拓扑结构在区域外是不可见的,同样,在每一个区域中的路由器对其域外的其余网络结构也不了解。这意味着OSPF路由域中的网络链路状态数据广播被区域的边界挡住了,这样做有利于减少网络中链路状态数据包在全网范围内的广播,也是OSPF将其路由域或一个AS划分成很多个区域的重要原因。随着区域概念的引入,意味着不再是在同一个AS内的所有路由器都有一个相同的链路状态数据库,而是路由器具有与其相连的每一个区域的链路状态信息,即该区域的结构数据库。当一个路由器与多个区域相连时,称之为区域边界路由器(ABR)。一个区域边界路由器有自身相连的所有区域的网络结构数据。在同一个区域中的两个路由器有着对该区域相同的结构数据库。区域间的路由计算ABR区域边界路由器七、骨干区域在OSPF路由协议中存在一个骨干区域(Backbone),该区域包括属于这个区域的网络及相应的路由器。同时也要求其余区域必须与骨干区域直接相连,即所有的ABR都属于骨干区域。骨干区域一般为区域0,骨干区域必须是连续的。骨干区域主要工作是在其余区域间传递路由信息。所有的区域,包括骨干区域之间的网络结构情况是互不可见的,当一个区域的路由信息对外广播时,其路由信息是先传递至区域0(骨干区域),再由区域0将该路由信息向其余区域作广播。八、虚连接(VirtualLink)在实际网络中,可能会存在backbone不连续的或者某一个区域与骨干区域物理不相连的情况,在这两种情况下,系统管理员可以通过设置虚拟链路的方法来解决。虚拟链路是设置在两个路由器之间,这两个路由器都有一个端口与同一个非骨干区域相连。虚拟链路被认为是属于骨干区域的,在OSPF路由协议看来,虚拟链路两端的两个路由器被一个点对点的链路连在一起。在OSPF路由协议中,通过虚拟链路的路由信息是作为域内路由来看待的。九、与自治系统外部通信十、OSPF路由器的分类当一个AS划分成几个OSPF区域时,根据一个路由器在相应的区域之内的作用,可以将OSPF路由器作如下分类:1、内部路由器IAR当一个OSPF路由器上所有直连的链路都处于同一个区域时,称这种路由器为内部路由器。内部路由器上仅仅运行其所属区域的OSPF运算法则。2、区域边界路由器ABR当一个路由器与多个区域相连时,称之为区域边界路由器。区域边界路由器运行与其相连的所有区域定义的OSPF运算法则,具有相连的每一个区域的网络结构数据,并且了解如何将该区域的链路状态信息广播至骨干