首页 OSPF协议概述

OSPF协议概述

举报
开通vip

OSPF协议概述OSPF内容概要1.概述OSPF是一个内部网关协议,用于在单一自治系统内决策路由。它是基于链路状态的路由协议,链路状态是指路由器接口或链路的参数。这些参数是接口的物理条件:包括接口是Up还是Down、接口的IP地址、分配给接口的子网掩码、接口所连的网络,以及使用路由器的网络连接的相关费用。OSPF与其他路由器交换交换信息,但所交换的不是路由,而是链路状态。OSPF路由器不是告知其他路由器可以到达哪些网络及距离是多少,而是告知它的网络链路状态,这些接口所连的网络及使用这些接口的费用。各个路由器都有其自身的链路状态,称...

OSPF协议概述
OSPF内容概要1.概述OSPF是一个内部网关 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ,用于在单一自治系统内决策路由。它是基于链路状态的路由协议,链路状态是指路由器接口或链路的参数。这些参数是接口的物理条件:包括接口是Up还是Down、接口的IP地址、分配给接口的子网掩码、接口所连的网络,以及使用路由器的网络连接的相关费用。OSPF与其他路由器交换交换信息,但所交换的不是路由,而是链路状态。OSPF路由器不是告知其他路由器可以到达哪些网络及距离是多少,而是告知它的网络链路状态,这些接口所连的网络及使用这些接口的费用。各个路由器都有其自身的链路状态,称为本地链路状态,这些本地链路状态在OSPF路由域内传播,直到所有的OSPF路由器都有完整而等同的链路状态数据库为止。一旦每个路由器都接收到所有的链路状态,每个路由器可以构造一棵树,以它自己为根,而分支表示到AS中所有网络的最短的或费用最低的路由。OSPF对于规模巨大的网络,通常将网络划分成多个OSPF区域,并只要求路由器与同一区域的路由器交换链路状态,而在区域边界路由器上交换区域内的汇总链路状态,这样可以减少传播的信息量,且使最短路径计算强度减少。在区域划分时,必须要有一个骨干区域(即区域0),其它非0或非骨干区域与骨干区域必须要有物理或者逻辑连接。当有物理连接时,必须有一个路由器,它的一个接口在骨干区,而另一个接口在非骨干区。当非骨干区不可能与物理连接到骨干区时,必须定义一个逻辑的或虚拟链路,虚拟链路由两个端点和一个传输区来定义,其中一个端点是路由器接口,是骨干区域的一部分,另一端点也是一个路由器接口,但在与骨干区没有物理连接的非骨干区域中。传输区是一个区域,介于骨干区域与非骨干区域之间。2.术语在OSPF中,经常要使用以下术语:RouterID(路由器ID):用于标识每个路由器的32位数。通常,将最高的IP地址分配给路由器ID。如果在路由器上使用了回送接口,则路由器ID是回送接口的最高IP地址,不管物理接口的IP地址。Interface(接口):路由器和具有唯一IP地址和子网掩码的网络之间的连接。NeighborRouter(相邻路由器):带有到公共网络的接口的路由器。BroadcastNetWork(广播网络):支持广播的网络。Ethernet是一个广播网络。NonBroadcastNetWork(广播网络):支持多于两个连接路由器,但没有广播能力的网络,如帧中继和X.25等网络。在非广播网络中,有非广播多点访问网络NBMA(在同一个网络上,但不能通过广播访问到)和点到多点网络。DesignatedRouteer(指定路由器DR):在广播和NBMA网络中,指定路由器用于向公共网络传播链路状态信息。BackupDesignatedRouteer(后援指定路由器DR):在DR故障时,接替DR的路由器。AreaBorderRouter(区域边界路由器ABR):连接多个OSPF区域的路由器。AutonomousSystemBorderRouter(自治系统边界路由器ASBR):一个OSPF路由器,但它连接到另一个AS,或者在同一个AS的网络区域中,但运行不同于OSPF的IGP。Adjacency(紧邻):紧邻可以在点对点连接的两个路由器之间形成,也可在广播或NBMA网络的DR和非指定路由器之间形成,还可以在BDR和非指定路由器之间形成。OSPF路由状态信息只能通过紧邻被传送和接收。Flooding(洪泛):在OSPF区域内,扩散某一链路状态,以分布和同步路由器之间的链路状态数据库。Link-StateAdvertisement(链路状态宣告LSA):描述路由器的本地链路状态,通过该通告向整个OSPF区域扩散。ExternalRouting(外部路由):从另一个AS或另一个路由协议得知的路由可以作为外部路由放到OSPF中。有两种类型的外部路由,类型1的外部路由具有的费用包含OSPF的费用,加上从ASBR到网络的费用。类型2的外部路由具有的费用仅是ASBR到网络的费用,而内部的OSPF费用可以忽略不计。IntraareaRouting(区域内路由):在相同OSPF区域的网络之间的路由,这些路由仅依据从区域内所接收的信息。InterareaRouting(区域间路由):在两个不同的OSPF区域之间的路由。区域间的路径由三部分组成:从区域到源区域的ABR的区域内路径,从源ABR到目标ABR的骨干路径,最后是从目标ABR到目标区域的路径。RouteSummarization(路由汇总):要通告的路由可能有一个区域内的路由、来自另一个AS的路由,以及从另一个路由协议得知的路由,所有这些路由可以由OSPF汇总成一个路由宣告。汇总仅可以在ABR或ASBR上发生。StubArea(存根区):只有一个出口路径的区域。3.协议包格式OSPF包共有5种包类型,任意一种包都需要加上OSPF的报文头,最后封装在IP中传送,一个OSPF包的最大长度为1500字节。其结构如下:OSPF协议一共使用5种类型的路由协议包:包类型作用1:呼叫发现和维护邻居2:数据库描述紧邻间同步数据库内容3:链路状态请求要求从邻居获取LSA4:链路状态更新向邻居通告LSA5:链路状态确认对所通告的LSA给出确认消息无论何种类型的OSPF包都有以下一个公共的报文头:版本号包类型包长度路由器ID区域ID校验和认证类型身份验证身份验证版本号:目前版本号为2。不同版本号不能会话。包类型:包类型的标志,为5种包类型中的某种。包长度:以字节计算,包括OSPF包加上首部头的长度。路由器ID:产生OSPF传输包的路由器的标识,一般就是路由器的最高IP地址。区域ID:分配给路由器传输接口的区域的32位指示器。如果包经过虚拟链路来发送,那么区域ID为骨干区域ID(ID=0),因为虚拟链路是骨干区域的一部分。校验和:整个OSPF报文包括OSPF头的校验和,使用补运算进行计算。认证类型(AuType):身份验证的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,其后64位域包含使用的证明类型所要求的数据。AuType=0表示无认证,AuType=1表示简单的口令认证,AuType=2表示MD5安全认证。3.1Hello包格式Hello呼叫报文用于发现路由器所连网络上的邻居。通过周期性地发出呼叫包,呼叫协议可用于确定邻居路由器接口是否仍然处于活动状态。在广播网络和NBMA网络,呼叫协议可以用于选取指定路由器。呼叫包被发送到Multicast多播地址AllSPFRouters(224.0.0.5)。在播发期间,有些协议包也将发送到该地址。指定或后援指定路由器发送并接收到Multicast多播地址是AllDRRouters(224.0.0.6)。Hello报文是包类型为1的OSPF包,封装在OSPF报文头后面,其格式如下:版本号=2包类型=1包长度路由器ID区域ID校验和认证类型身份验证身份验证网络掩码HelloInterval选项路由器优先级RouterDeadInterval指定路由器后援指定路由器邻居路由器……邻居路由器网络掩码:发送呼叫报文的接口的子网掩码。如果这一掩码和呼叫报文接收接口的子网掩码不匹配,则该呼叫报文不能被接收。这样可以确保共享同一网络的路由器才能成为邻居关系。HelloInterval:在接口上发送呼叫报文的时间间隔,以秒为单位。如果两路由器不具有相同的呼叫周期,则不能成为邻居关系。选项:包含5个分配位,在RFC2178中对E位已经做了说明,它确定如何传播外部链路状态宣告。在存根区,Hello报文要将该位设置为0,不能接收设置为1的Hello报文。使邻居具有兼容性。因兼容性问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,路由器可以放弃邻居关系。路由器优先级:该选项影响指定路由器DR的选取。值0表示该路由器不能被选为DR。如果是其它值,则具有最高优先级的路由器将成为DR。缺省值为1,如果所有路由器都使用该缺省值年,则具有最高IP地址的路由器将被选为DR。RouterDeadInterval:该参数(以秒为单位)用于确定邻居是否还处于活动状态。如果在由RouterDeadInterval指定的秒数内没有从已建立的邻居处收到呼叫报文,那么,邻居被宣布为故障状态。如果Hello报文中的RouterDeadInterval与接收端口所设置的RouterDeadInterval值不相同,则丢弃该报文,确保两邻居路由器具有相同的参数。指定路由器(后援指定路由器):广播网络或NBMA网络上DR(BDR)接口的IP地址。在DR(BDR)的选举过程中,这个值可能是关于DR(BDR)的起源路由器的设想,而不是最终的DR(BDR)。如果因为DR(BDR)没有选举出来或者因为是对等网络,不存在DR(BDR)该值应该取值为0.0.0.0。邻居路由器:路由器在这个网络上所拥有的邻居路由器的列表,用路由器ID表示。如果在由RouterDeadInterval指定的时间内未能从某个邻居接收到Hello呼叫包,那么,这个邻居应该从此列表中除去。3.2数据库描述包数据库描述包(DatabaseDescriptionpacket,DD)是2型OSPF包。在形成紧邻过程中的路由器之间交换数据库描述包,且由它来描述链路状态数据库,达到邻居路由器间链路状态数据库的完全同步。根据接口数和网络数,可能需要不止一个数据库描述包,来传输整个链路状态数据库。在交换过程中,所涉及到的路由器要建立主从关系。主路由器发送本路由器的数据库描述包,而从路由器通过使用主路由器发送来的数据库描述序列号认可所接收到的数据库描述包,并将本路由器的LSA头部列表发送给主路由器,从而在主从路由器间判断链路状态数据库是否完全匹配,若有不匹配的LSA头部,则应发送链路状态请求报文,并以更新报文格式给予响应,获得最新LSA的全部信息。数据库描述包要封装在类型为2的OSPF报文头后面,其具体格式如下:版本号=2包类型=2包长度路由器ID区域ID校验和认证类型身份验证身份验证接口MTU选项00000IMMS数据库描述序列号LSA首部……LSA首部接口MTU:指示通过该接口可发送的最大IP包长度。当通过虚拟链路发送时,这个域设置为0。选项:显示路由器的能力,使路由器不向没有能力的邻居发送LSAs。I位:是Init位,要发送数据库序列中的第一个包,应设置为1。随后的包要设置为0。M位:若设置为1,则表示序列中还有更多的数据库描述包将要发送出去。若置为0,则表示数据库描述包已发送完毕。MS位:主从位,在数据库描述包交换期间,1表示路由器是主路由器,而0表示路由器是从路由器。数据库描述序列号:用于数据库的同步处理,确保所有的数据库描述包全部被接收到。主路由器在发送第一个数据描述包时,应将数据库描述序列号设置为一个独特的初始值,随后序列号逐渐递增。LSA首部:这是一个LSA首部列表,由本路由器的链路状态数据库的LSAs的头部组成这个LSA首部列表。这些头部有足够的信息来描述LSA和LSA的实例。3.3链路状态请求包链路状态请求包是3型OSPF包。当两个路由器交换数据描述包的过程完成后,路由器可检测链路状态数据库部分是否有不一致或过时的LSA。此时,路由器可向邻居请求新一些的数据库描述包,以达到LSAs的完全同步。其格式为:版本号=2包类型=3包长度路由器ID区域ID校验和认证类型身份验证身份验证LS类型链路状态ID宣告路由器……LS类型链路状态ID宣告路由器LS类型:链路状态类型,有路由器LSA、网络LSA、汇总LSA、汇总LSA(ASBR)、AS-externalLSA等5种类型的LSA,分别取值1~5。链路状态ID:取值取决于LS类型,具体的取值见LSA首部定义。宣告路由器:产生LSA的路由器ID。3.4链路状态更新包链路状态更新包是4型的OSPF包,用于实现LSA的洪泛,也用于对链路状态请求包的响应。每个链路状态更新包包含一个或多个LSA,而所发送的每个更新包要通过链路状态认可包来确认认可,未收到确认包,应对所发送的LSA定时重发,以确保洪泛过程的可靠性。具体格式如下:版本号=2包类型=4包长度路由器ID区域ID校验和认证类型身份验证身份验证LSA的个数LSAsLSA的个数:定义整个更新包中包含多少个LSA,直到OSPF包总长度达到1500字节。LSAs:由一系列LSA 组成一个列表。3.5链路状态确认包链路状态确认包是5型OSPF包,该包可以确保LSA洪泛的可靠性。路由器从紧邻接收到LSA后,必须要用链路状态确认包给予明确的确认应答。LSA的确认是通过链路状态确认包中的LSA首部实现的。一个确认包可以同时对多个LSA进行确认。这些包发送到以下三个地址之一:多点传送地址AllDRouters、多点传送地址AllDSPFRouters、单点传送地址。具体格式如下:版本号=2包类型=5包长度路由器ID区域ID校验和认证类型身份验证身份验证LSAs的首部LSAs的首部:由一系列LSA的首部组成一个列表。4.链路状态LSA格式路由器可生成的链路状态信息有以下5种类型:类型1:路由器LSA,确定路由器的互连方式。由每个路由器产生,用来描述路由器的链路或接口的状态及费用。该LSA只能在本区域内洪泛;类型2:网络LSA,确定网络的互连方式。由DR产生,用于描述DR所连的多点访问网络和所连的路由器(包括DR自己),也在本区域内洪泛;类型3:ABR汇总LSA,用于传输已经被集成为单一网络信息的网络。由ABR路由器产生,将某区域上的汇总目的地址通告给另一个区域。事实上,ABR通过这些LSAs将自己所能到达的目的地(要汇总)通告给所连区域的各个区域内路由器InternalRouters;ABR也要将所连区域的目的地通告给骨干区域。当ABR产生汇总LSA时,同时要通告从ABR自己到目的地的费用,当ABR到目的地有多条路由时,应取费用最低的路由。同样,当ABR收到从另一ABR发来的同一条汇总LSA时,也要取费用低的LSA,将其通告给非骨干区;当路由器从ABR收到一条汇总LSA时,用简单的距离——矢量法而不用SPF来计算本路由器到目的地的费用和路由:总费用包括本路由器到ABR的费用和LSA中所指明的费用。在ABR上,将某区域的有关目标网络通告给骨干区时,要对目标网络进行路由聚合,将一系列子网聚合成一个超网后,通告给骨干网络。聚合时,其超网的费用为子网中的最大费用。类型4:ASBR汇总LSA,用于传输已经被集成为单一网络信息的网络。也由ABR产生,与类型为3的汇总LSA相似,但本LSA是ABR将ASBR路由器主机为目的地的一个链路信息,描述本ABR到达ASBR的费用;类型5:外部路由信息AS-external-LSA,由其它协议传入的外部路由信息。由ASBR产生,将外部系统的路由信息在本系统的所有OSPF域内洪泛;每个LSA包都有一个由20个字节组成的首部,该首部用于封装LSA包。一般许多LSA在一个OSPF报文中被路由器交换,而LSA首部的功能唯一地标识每个LSA包。同时LSA首部还用于数据描述OSPF报文和链路状态确认OSPF报文中。其格式如下:链路状态时间选项链路状态类型链路状态ID宣告路由器ID链路状态序列号和校验长度在该首部中,选项、链路状态类型、链路状态ID、宣告路由器ID等字段描述LSA包的特征,而链路状态时间、链路状态序列号确定该LSA是否是最新的。链路状态时间:生成LSA的路由器将LS时域初始化为0,在洪泛过程中,每经过一个路由器,要按InfTransDelay的量增加,这个量表示传输LSA到下一个跳跃所需要的时间。当该时间达到所设定的MaxAge参数时,要撤消该LSA。选项:指示路由器的能力。目前使用的唯一一位是E位(外部指示),对存根区域,它是0,对所有其它所有区域,它是1。链路状态类型:描述LSA包的类型,取值为1~5。链路状态ID:取决于LSA包类型,具体取值如下:LS类型链路状态ID值1生成LSA的路由器ID2这个网络的DR的IP接口地址3ABR要通告的某区域内某一目标网络的IP地址4ABR要通告的某一ASBR的路由器ID5ASBR要通告的某一外部自治系统某一目标网络的IP地址宣告路由器ID:产生LSA的路由器ID。链路状态序列号:用于识别LSA包是否是一个最新包。路由器每生成一个新的LSA时,将该序列号加1。和校验:检测LSA包的正确性。长度:LSA包括其首部的长度。LSA头中的链路类型、链路状态ID和宣告路由器ID是一个LSA的唯一标志。一个LSA将有多个实例,不同的实例通过LS的序列号、LS的校验和及LS的Age字段来描述。因此,必须要决定其实例是否是最近的,这要通过检查LS的序列号、LS的校验和及LS的Age字段内容。4.1路由器链路状态宣告链路状态类型为1的LSA包是一种路由器链路状态宣告包,其链路状态ID就是路由器的OSPFID。路由器为每个有活动OSPF接口的区域生成一个路由器LSA。包含在路由器LSA中的信息是路由器接口在该区域的状态和费用,该LSA仅在本区域内传播。进入一个区域的所有路由器接口必须在一个路由器LSA中说明。在路由器LSA中,将通告路由器的各条链路或接口的状态和费用。链路状态ID就是产生该LSA的路由器ID。路由器LSA的具体格式如下:链路状态时间选项链路状态类型=1链路状态ID宣告路由器ID链路状态序列号和校验长度00000VEB0链路个数链路ID链路数据链路类型#TOS费用度量TOS0TOS度量值…….链路ID链路数据链路类型#TOS费用度量TOS0TOS度量值VEB:用于确定路由器可能有的链路的类型。V位显示路由器是虚拟链路的端点。如果路由器是ASBR,那么将设置E位;如果路由器是ABR,那么将设置B位。链路个数:可以同时携带若干个链路信息。每个链路包括链路ID、链路数据、链路类型、#TOS、费用度量、TOS、TOS度量值等信息,用于描述路由器某接口的链路信息。链路类型:有4种链路类型。链路类型将决定其它字段的取值。类型1:对等连接到另一个路由器类型2:到多点访问网络的传输网的连接类型3:到存根网的连接,某主机地址也可认为是一个特殊的存根网络,网络号即为主机地址,掩码为225.225.225.225。类型4:虚拟连接链路ID:链路ID描述路由器接口或链路所连接的对象。链路ID一般等于邻居路由器LSA头中的链路状态ID。取值及含义要取决于具体的链路类型。对链路类型1,为邻居路由器的ID。对链路类型2,为DR接口的IP地址。对链路类型3,为IP网络/子网号。对链路类型4,为邻居路由器的ID。链路数据:链路数据也将取决于具体的链路类型。如果路由器与存根网络相连,那么取值为这个网络的IP地址掩码。对其他类型的链路,则是路由器分配给该链路接口的IP地址。链路数据在生成IP路由表产生下一跳时要用。#TOS:链路服务类型号。在2328中,该TOS已不再使用。费用度量:链路的费用度量。TOS和TOS度量:IP的服务类型与服务度量值。4.2网络链路状态宣告链路状态类型为2的LSA包是网络链路状态宣告,该LSA由DR产生和创建。一个网络LSA将通告该路由器上某一多点访问网络和所连接的路由器信息,该LSA也只能在本区域内扩散。链路状态ID标识DR到这个区域或网络的接口IP地址,费用度量不再需要,因为路由器直接连接到网络上,费用必为0。具体格式如下:链路状态时间选项链路状态类型=2链路状态ID宣告路由器ID链路状态序列号和校验长度网络掩码连接的路由器ID连接的路由器ID……连接的路由器ID网络掩码:标识该多点访问网络的网络掩码。连接的路由器:标识连接到该网络并且与DR成紧邻关系的路由器ID,包括DR本身路由器ID。所连紧邻路由器的数目可由LSA头中的长度决定。4.3网络和ASBR汇总链路状态通告链路状态类型为3或4的LSA是网络和ASBR汇总链路状态宣告,两者都由区域边界路由器ABR生成,实现区域间目标链路的描述,它只能在同一个区域内洪泛。3型汇总LSA有IP地址目标,链路状态ID就是目标IP网络号,以描述ABR到该目标网络的费用,供其它区域的路由器计算到该汇总网络的费用(总费用应为:本路由器----ABR----汇总的网络地址)。4型汇总LSA以一个自治系统边界路由器ASBR为其目标,而链路状态ID就是该ASBR的OSPF路由器ID,以描述ABR到ASBR之间的费用,它主要用于计算最佳的外部路由(某外部路由,对任一路由器来说,其总费用为本路由器----ABR----ASBR----外部路由费用的和)。链路状态ID是这两种类型LSA包之间的唯一区别。3型LSA还用于说明进入存根区域的默认路由,此时链路状态ID和网络掩码应设置为0.0.0.0,表示整个存根区可以通过该ABR到达外部任意路由。对于3型LSA,网络掩码就是目标网络的IP地址掩码,而对4型LSA,应该设置为0。费用度量值和路由器LSA相同,是ABR到该目标的费用。TOS和TOS度量是IP的服务类型和度量值。LSA的具体格式如下:链路状态时间选项链路状态类型=3或4链路状态ID宣告路由器ID链路状态序列号和校验长度网络掩码0费用度量值TOSTOS度量值4.4外部链路状态AS-externalLSA通告5型LSA是AS-externalLSA,由ASBR产生,它被用于说明自治系统以外的网络或路由,在整个自治系统(非存根区除外)内不加改变地洪泛,与路由器的链路状态数据库相独立地保存。链路状态ID域为目标网络的IP网络号,网络掩码为目的网络的掩码。在As-externalLSA中可以通告一条缺省路由,这时,链路状态ID为0.0.0.0,网络掩码也为0.0.0.0。E位用于指示外部路由是1型(E=0)还是2型(E=1),1型外部路由的度量值与内部OSPF路由域的度量具有相同的度量单位,2型外部路由的度量值大于内部OSPF路由域的度量。转发地址是指到达该外部目标网络的下一跳地址,一般是ASBR路由器,此时转发地址为0.0.0.0,表示将报文转发给产生该LSA的ASBR,但如果运行BGP协议得到外部路由的ASBR与另一自治系统的ASBR间的网络是一个多点访问网络,则转发地址应设置为该网络地址,这样可省略ASBR这个中间一跳。在该LSA中,由产生该LSA的ASBR路由器负责对该外部路由做上标志tag,以便在ASBR间传送另外的附加信息。具体格式如下:链路状态时间选项链路状态类型=5链路状态ID宣告路由器ID链路状态序列号和校验长度网络掩码E0000000费用度量值转发地址外部路由标志ETOSTOS度量值转发地址外部路由标志……5.链路状态数据库对路由器有活动接口的所有区域,路由器将维护每个区域各自的链路状态数据。在一个区域有接口的每个路由器,都有一个该区域同等的链路状态数据库。对每个区域的最短路径树的计算,分别由每个路由器以自己为树根进行。一个区域的链路状态数据库中的路由器LSA和网络LSA仅通过该区域传播。这个区域的链路状态数据库由路由器LSA、网络LSA及3型、4型汇总LSA(汇总LSA包含在区域数据结构中)组成。如果这个区域不是存根区,数据库还将包括外部路由信息AS-externalLSA。在数据库的查找过程中,是通过链路类型、链路状态ID和宣告路由器ID这3个特征值来查找的。当在传播过程中,路由器接收到一个LSA时,或路由器初始化LSA时,路由器将LSA增加到数据库中。当路由器接收到一个较新的LSA时,路由器生成一个新LSA时,或者LSA过于陈旧时,路由器将把LSA从数据库中删除。从路由器的数据库中删除任何LSA,也将从每个邻居的再传输列表中删除。每个区域都有一份相同的LSA,由LSA可以计算每个路由器将首创一个路由器LSA。如果路由器是DR,则路由器将为它是DR的网络生成一个网络LSA。ABR路由器将为区域间路由生成汇总LSA,而ASBR路由器将为外部路由生成AS-externalLSA。以下10个事件将触发产生新的LSA:1)当路由器首创的LSA的时限域到达值LSRefreshTime;2)路由器接口的状态发生改变。路由器ID是分配给路由器的最高IP地址,或分配给路由器的最高回送IP地址。如果具有最高IP地址的接口失败,那么路由器ID必须改变。3)网络的DR变化。4)邻居路由器变化为完全状态或不完全状态。5)区域内路由被增加、删除或修改。6)区域间路由被增加、删除或修改。7)路由器使一个接口在某区域内成为活动的。8)路由器的虚拟链路变化。9)外部路由变化。10)ASBR的路由器不再是ASBR。路由器将接收到的LSA保存在链路状态数据库中成为LSAs,由LSAs计算本路由器到各目的地的最短路径。每条LSA都有寿命Age,当达到MaxAge时,将从数据库中清除。因此,产生LSA的路由器每隔LSRefreshTime要对该LSA重新产生一个实例,并重新进行洪泛。为提高效率,某条LSA在刷新时并不立即洪泛,而是等待一个同步时间,将需要重新洪泛的LSA一并洪泛。6.指定路由器的选取在广播型网络上,需要选取DR和BDR。DR具有如下两个职责:1)代表该广播网络和网络上的其余路由器,由其发布该网络LSA;2)管理该网络上的扩散过程,网络上的所有路由器只有和DR之间有紧邻关系,在这种紧邻关系上实现LSA的洪泛,各路由器之间不能直接交互LSA;DR的选取是被接口的状态机所驱动(在接口状态迁移图中描述)。一般来说,一个路由器接口被激活后,要检查该接口网络是否已经存在DR,如果已经存在DR,则不管本路由器的优先权有多大,也要接受原先所确定的DR,这样可以避免太多的变化,若还不存在DR,则如果本路由器在该网络具有最高优先权的话,它将成为DR。DR被选取后,该网络可抽象为以DR为中心的一点对多点的网络拓扑,只有在DR和其他路由器之间建立紧邻关系,发送LSA报文。必须要注意,一个路由器在某一网络接口上是DR,但在另一网络接口上可能不是DR,因此,DR是一个接口特性,并不是一个完整路由器。为保证系统的稳定可靠,除DR外,还要选取一个BDR,并在BDR与其他路由器之间也要建立紧邻关系,一旦DR失效,BDR立即替代DR,描述本网络及所有路由器的链路状态。起始时,DR和BDR均设置为0.0.0.0,表示DR和BDR没有被选取。路由器将在与自己具有双向邻居关系的邻居列表(要将本路由器看成是邻居列表中的一个邻居路由器,作为DR、BDR的侯选者)中,检查由Hello报文所宣告的各邻居路由器的优先级、DR、BDR来选取新的DR和BDR。在选取过程中,要排除任何优先级为0的邻居路由器,说明这样的路由器不符合成为DR或BDR的条件。然后,从符合条件的邻居路由器(具有非0优先级、和本路由器具有双向邻居关系)中运行如下算法:1) 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 当前的DR和BDR,以在算法中进行比较;2)计算选取新的BDR;只有那些没有被Hello报文宣告为DR的路由器才有可能成为BDR。如果有一个或多个路由器被Hello报文宣告为BDR但又不是DR,则从这些被宣告为BDR的路由器中选择具有最高优先级的路由器作为BDR,在选取过程中,如果有相等优先级的路由器,那么,从中选择一个具有最大路由器ID的路由器作为BDR。如果没有一个路由器被宣告为BDR,则从所有的邻居路由器中(被宣告为DR的路由器仍然除外)选择具有最高优先级的路由器作为BDR,在选取过程中,如果有相等优先级的路由器,那么,也要从中选择一个具有最大路由器ID的路由器作为BDR。3)计算新的DR;如果有一个或多个路由器被Hello报文宣告为DR,则选择其中具有最高优先级的路由器作为DR,如果优先级相等,则选择具有最大路由器ID的路由器将作为DR。如果没有一个路由器被宣告为DR,则将新选出来的BDR作为DR。4)如果某个路由器新变成DR或BDR,或者某路由器不再成为DR或BDR,则要重复步骤2和步骤3,然后再到步骤5。例如某路由器成为DR后,在重复步骤2时,它就不能作为BDR。这样可以保证某路由器不被同时选为DR和BDR。5)按照计算结果,本路由器有可能成为DR或BDR,若这样,它将承担相应的职责,并设置相应的接口状态。如果本路由器成为DR,则接口状态为DR;如本路由器成为BDR,则接口状态为BDR;对其它情况,则接口状态为DROther。6)如果是NBMA网络,并且本路由器成为DR或BDR,则必须开始发送Hello报文给不符合成为DR条件的邻居路由器。7)如果以上计算导致DR或BDR发生改变,则这个接口上的紧邻关系也需要加以更改。一些紧邻关系需要形成,另一些紧邻关系需要解除。为此,为所有邻居状态在2-Way以上的邻居产生一个AdjOk?事件,这样,可以触发对紧邻关系合法性的检查。DR、BDR的选取之所以这么复杂,主要是为在DR失效时,BDR可以平滑的变为DR。简单说来,当OSPF路由器成为活动态并发现其邻居后,需要检查活动的DR和BDR。如果存在DR或BDR,则接受他们。如果没有BDR,则需要选取具有最高优先权的路由器为BDR,如果优先权相同,则选取具有最高路由器ID的路由器为BDR。如果没有DR,则将BDR选为DR,并重选BDR。值得注意的是,优先权影响DR和BDR的选取,但不能控制已经活动的DR、BDR,也就是说在DR、BDR选举出来后,具有更高优先权的邻居路由器不能再成为DR或BDR,最初的DR、BDR始终将有效。一旦DR、BDR选举出来,DR和其他路由器DROthers将建立紧邻关系。但各路由器的Hello报文仍然采用多播地址AllSPFRouters(224.0.0.5)发送,以跟踪邻居关系。其他路由器DROthers发送更新报文时应以多播地址AllDRRouters(224.0.0.6)发送,只有DR和BDR监听并接收该地址的报文,而DR发送更新报文时应以多播地址AllSPFRouters(224.0.0.5)发送,使所有其他路由器DROthers都能接收到,而不是向每个紧邻单独发送更新报文,这样可以提高效率。7.OSPF接口7.1OSPF接口数据OSPF协议主要关心链路和链路状态。在发送Hello报文、形成紧邻关系、发送LSA通告之前,必须要了解本身的接口状态及参数。OSPF路由器用自身的接口数据来构造Hello报文,通过发送Hello报文,将本接口的信息发送给邻居。的接口状态主要包括以下参数:IPAddressandMask:接口的IP地址及掩码,从该接口上发送OSPF报文时应将它作为IP的源地址。AreaID:接口及所连网络所属的OSPF区域ID。从该接口发送OSPF报文的区域ID。RouterID:作为宣告OSPF报文的路由器ID。NetworkType:接口所连网络的网络类型,有点对点、广播、NBMA、一点对多点、虚拟链路等网络。Cost:从本接口发送报文的费用,影响LSA中的metric。InfTransDelay:LSA通告离开该接口的延时时间,每个LSA离开该接口时,要在其寿命域加上该时间。State:接口所处的状态,是有限状态机中的某一状态。RouterPriority:路由器在该接口上的优先级。在多点访问网络上将影响到DR、BDR的选取。DesignatedRouter:在多点访问网络上,需要选取一个DR来描述该网络的状态。一个DR需要用其路由器ID和该路由器在该接口的IP地址表示。DR和该网络上的其它路由器构成紧邻关系,DR用网络LSA来通告该网络的状态,在网络LSA中将标识该DR的接口IP地址作为链路状态ID。BackupDesignatedRouter:在多点访问网络上,需要选取一个BDR,作为备用DR来描述该网络的状态。一个BDR需要用其路由器ID和该路由器在该接口的IP地址表示。BDR与该网络上的其他路由器构成紧邻关系。HelloInterval:在该接口上发送Hello报文的时间间隔。RouterDeadInterval:在该时间间隔内应该从该接口接收到由邻居发来的Hello报文,若在此时间内,未从邻居收到Hello报文,则可认为邻居已处于非活动状态。WaitTimer:在选取DR、BDR之前,等待邻居在Hello报文中宣告DR、BDR的时间间隔。RxmtInterval:在发送数据描述包和链路状态请求包时未能收到OSPF确认包,需要重新发送这些OSPF报文的时间间隔。HelloTimer:设置HelloInterval的一个定时器,当时间到达时,应在该接口上发送一个Hello报文。neighboringRouters:有效邻居路由器列表,由Hello报文产生该邻居列表。紧邻关系要从该邻居列表中产生。AuType:安全鉴权类型。AuthenticationKey:安全鉴权值。7.2OSPF接口状态机OSPF接口在完全有效之前,将经历一系列状态,包括Down、Point-to-Point、Waiting、DR、Backup、Drother、LoopBack等7种状态。Down:是接口的初始状态。此时接口不能使用,所有的接口参数被设置为初始值,在接口上既不能发送也不能接收各种协议包。Point-to-Point:该接口状态仅适用于点对点、一点对多点和虚拟链路的网络类型。当接口状态迁移到该状态时,该接口已完全有效,可以间隔发送Hello报文,并和另一端的邻居开始试图建立紧邻关系。Waiting:该接口状态仅适用于广播网络和NBMA网络类型。在该状态下,路由器将通过Hello报文选取DR、BDR。为此,当接口迁移到该状态时,将发送和接收Hello报文,设置等待时间。只有在该状态下路由器试图识别DR和BDR,这样可以避免DR、BDR的太多变化。DR:仅适用于广播和NBMA网络,在该状态下,本路由器在该接口及所连网络上是DR,试图和该接口网络上的其他路由器建立紧邻关系。将由本路由器产生网络LSA,该网络LSA包括网络所连的所有路由器(包括DR自己)。Backup:仅适用于广播和NBMA网络,在该状态下,路由器在该接口及所连网络上是BDR,在DR失效时,它将提升为DR。它也试图和该接口网络上的其他路由器建立紧邻关系。它在洪泛过程中与DR的作用过程有所不同。DRother:仅适用于广播和NBMA网络,在该状态下,路由器在该接口及所连网络上既不是DR也不是BDR。它将和DR、BDR形成紧邻关系,并且跟踪网络上的邻居关系。Loopback:在该状态下,接口被软件或硬件环回。在该接口上不能发送报文,但在路由器LSA中仍然能通告接口的IP地址,使测试包能够发现其接口地址。下图揭示了在外部事件作用下OSPF接口状态的迁移过程:在状态迁移过程中,需要有以下事件来触发各状态的迁移:IE1(InterfaceUp):底层协议指示网络接口可以使用,对点对点、一点对多点、虚拟链路等网络类型,进入Point-to-Point状态,对广播网络、NBMA网络等多点访问网络类型,进入Waiting状态。IE2(InterfaceDwon):底层协议指示网络接口不能使用,进入Down状态。IE3(LoopInd):网络管理员或底层协议指示网络接口被环回,进入Loopback状态。IE4(UnLoopInd):网络管理员或底层协议指示网络接口环回被撤消,进入Down状态。IE5(BackupSeen):检测到或未检测到BDR的存在。从邻居收到一个Hello报文后,若本路由器和邻居已具有双向通信能力,即在Hello报文中能看到自己,则可以用两种方法判断是否是BackupSeen:a)从邻居收到一个Hello报文,在报文中该邻居被宣告为BDR;b)从邻居收到一个Hello报文,在报文中该邻居被宣告为DR并指示无BDR存在。若符合其中某一条件,则进入DR、BDR选取状态。IE6(WaitTimer):等待DR、BDR时间到,进入DR、BDR选取状态。IE7:本路由器被选择为该接口网络的DR,进入DR状态。IE8:本路由器被选择为该接口网络的BDR,进入BDR状态。IE9:本路由器既没有被选择为该接口网络的DR,也没有成为BDR,进入DRother状态。IE10(NeighborChange):在该网络接口上,有效的双向邻居关系发生变化,将重新进行DR、BDR的选取:1)和一个新邻居建立了双向通信,也就是说产生了一个新邻居,其邻居状态迁移到2-Way状态以上;2)和一个邻居的双向通信已失效,也就是说邻居状态迁移到Init以下状态;3)从一个双向邻居收到一个Hello报文,并指示自己成为新的DR或BDR;4)从DR路由器收到一个Hello报文,并指示它不再是DR;5)从BDR路由器收到一个Hello报文,并指示它不再是BDR;6)从一个双向邻居处收到一个Hello报文,其优先级发生变化;7)RouterDeadInterval时间已到,但不能从DR或BDR或两者的路由器收到Hello报文。当接口状态发生变化时,有可能需要产生新的路由器LSA(见RFC2178Section12.4),也有可能需要对邻居状态作出行动(Section10.3),改变邻居状态。8.OSPF邻居在OSPF的接口上,需要确定其邻居。确定邻居的目的是要和邻居建立一种紧邻关系,最终在紧邻间传送路由信息。建立紧邻关系,需要经过以下几个步骤:1)发现邻居;2)双向通信。在Hello报文中,两邻居都能在邻居列表中发现对方的路由器ID。3)数据库同步。邻居间相互交换数据库描述、链路状态请求、链路状态更新报文,以确保两邻居具有相同的链路状态数据库。为达到该目的,一个邻居为Master,另一邻居为Slave,由Master控制数据库描述的交换。4)构成紧邻关系。邻居关系的建立和维持要通过相互交换Hello报文来实现。在点对点或广播型网络上,Hello报文是发向多播地址AllSPFRouters(224.0.0.5),在NBMA、一点对多点、虚拟链路等网络上,Hello报文是发向一个具体的目标地址,是单播方式。8.1邻居数据结构从本路由器接口上接收到Hello报文后,要将报文中所携带的有关邻居路由器的信息保存下来,形成邻居数据库。具体包括以下内容:NeighborID:邻居路由器ID。NeighborIPAddress:连接在该网络上的邻居接口的IP地址,在接收到Hello报文时获取得到。当OSPF报文单播给邻居时,该地址即是目的地址。AreaID:邻居接口所在的区域ID,若要构成邻居,区域ID必须相同。Interface:指示邻居被本路由器的哪个接口相连。NeighborPriority:邻居的优先级,由Hello报文携带。State:邻居在有限状态机中处于什么状态。InactivityTimer:未能从邻居接收Hello报文的时间定时器。PollInterval:专门用于NBMA类型的网络。因为在该网络中,邻居不能自动发现,邻居状态如果Down,则需要每隔PollInterval时间(比HelloInterval长)发送一个Hello报文。NeighborOptions:邻居对OSPF兼容能力的选项,在DD报文交换中获得,也列于hello报文中,在Hello报文中携带该信息。Neighbor’sDesignatedRouter:邻居所选取的DR,如邻居自己就是DR,则将影响对DR的计算。它用该网络上的接口IP地址表示。由Hello报文的DR域携带。Neighbor’sBackupDesignatedRouter:同DR;Master/Slave:Master/Slave关系,在ExStart状态时与邻居进行协商,确定哪个邻居控制数据库同步。DDSequenceNumber:当前正在发送给邻居的数据库描述DD报文的序列号。LastReceivedDatabaseDescriptionPacket:上次从邻居接收到的数据库描述DD报文选项中的Initilize(I)、More(M)、Master(MS)和DD序列号,这些信息用于决定下一个DD报文是否是该报文的一个复制报文。LinkStateRetransmissionList:已经洪泛给紧邻,但未从紧邻接收到确认报文的LSAs列表,这些LSA列表每隔RxmtInterval间隔(接口数据中已定义)要重发一次,直到从紧邻收到确认或紧邻关系被破坏。DatabaseSummaryList:在数据库同步过程中,要以数据库描述DD报文形式发送给邻居的LSAs列表(从链路状态数据库中产生的LSAs头部)。在路由器处于交换状态时,这些LSAs构成链路状态数据库。LinkStateRequestList:链路状态请求列表,它们反映了需要从邻居接收到的LSAs,以同步两邻居之间的链路状态数据库。这张列表是在从邻居接收到的数据库描述DD报文中产生,并以链路状态请求报文发送给邻居。当从邻居接收到Update报文时,这些请求列表将逐步消灭。8.2邻居状态机一个OSPF路由器在邻居成为紧邻之前,将在一些状态之间迁移其邻居状态。邻居状态有以下几种:Down:邻居会话的初始状态,指示在前一个RouterDeadInterval未能收到Hello报文,此时不能向邻居发送Hello报文,除非这些邻居在NBMA网络上(Hello报文以PollInterval间隔发送),如果邻居从其他较高的状态迁移到Down状态,则应将LinkStateRetransmissionList、DatabaseSummaryList、LinkStateRequestList等邻居数据清除。Attempt:该状态仅适用于NBMA网络上的邻居,这些邻居是由手工配置的。当与邻居所连的接口首次被激活且邻居被合法选为DR或者本路由器成为DR或BDR时,邻居状态将被迁移到该状态。此时,路由器将以HelloInterval间隔向邻居发送Hello报文。Init:该状态指示在前一个RouterDeadInterval已从邻居收到Hello报文,但在Hello报文中未能看到本路由器ID,和邻居的双向通信还未建立。在该状态及以上状态,本路由器可以在Hello报文的邻居列表域中将所看到的邻居以Hello包的形式发送出去。2-Way:该状态说明路由器接收到邻居发送来的Hello报文,并在Hello报文的邻居域中发现本路由器ID,双向通信已建立。对于多点访问网络,必须在该状态或以上状态,邻居才能被选为DR或BDR。在Init状态若能从邻居收到数据库描述DD报文,也能迁移到2-Way状态。ExStart:该状态是两邻居间建立紧邻关系的第一步。在该状态下,路由器和其邻居建立Master/Slave关系,协商DD报文的初始序列号以准备交换数据库描述报文。具有高的接口IP地址将成为Master。Exchange:在该状态下,将本路由器上的全部链路状态以DD报文方式发送给邻居。一次只能发送一个DD报文,因此可能要发送多个DD报文。每个DD报文都有一个序列号,并应得到明确的确认。在该状态下,也可向邻居发送链路状态请求报文,以向邻居请求最新的LSAs。在该状态或以上状态的所有紧邻将被用于洪泛过程,事实上,这些紧邻将完全可以发送和接收所有OSPF协议包。Loading:在该状态下,路由器将向邻居发送链路请求包,以获取更新的LSAs。这些LSAs在Exchange状态下发现,但还未接收到。Full:在该状态下,两邻居路由器完全是紧邻关系。这种紧邻关系将体现在路由器LSAs和网络LSAs中。下图描述邻居状态从Down到Full迁移过程的主要流程,在2-way、ExStart、Exchange、Loading、Full等状态下可以接收Hello报文。下图详细描述了邻居状态从Down到Init的过程,并表明各种状态在IE3事件触发下都将直接迁移到Down状态。在2-way、ExStart、Exchange、Loading、Full等状态下可以接收Hello报文。下图是邻居状态从Init迁移到Full的详细过程:邻居状态迁移需要有以下外部事件:IE1(Start):该事件仅发生在NBMA网络邻居上,由以下两种情形触发:1)与NBMA网络相连的接口首次成为活动口,邻居可以选取为DR;2)路由器可以成为DR或BDR,但邻居不能选为DR。IE2(HelloRecived):从邻居接收到一个有效的Hello报文。IE3(KillNbr,InactivityTimer,LLDown):邻居不再可达。这种不可达性可以由底层协议指示、OSPF进程本身明确指示、接口活动定时器到达指示。IE4(2-WayRecived):路由器首次从邻居发送来的Hello报文所携带的邻居列表中发现本路由器ID,或者从邻居接收到数据库描述报文DD。IE5:邻居不成为紧邻。IE6:该事件有以下两种情形:1)邻居状态首次迁移到2-Way状态2)接口状态发生变化IE7:和邻居应该形成紧邻关系。IE8(negotiationDone):Master/Slave关系建立,DD报文的序列号被交换。IE9(ExChangeDone):数据库描述包DD已交换完毕。IE10:存在链路状态请求条目。IE11(LoadingDone):不存在链路状态请求条目。IE12:紧邻关系应该被解除,然后重新开始。触发这个事件的情形如下:1)接收到一个非期待的DD序列号的数据库描述报文(SeqNumberMismatch);2)接收到的DD报文的选项不同于上次收到的DD报文中的选项(SeqNumberMismatch);3)接收到的DD报文不是第一个报文,但Init(I)位被置为1(SeqNumberMismatch);4)接收到一个链路请求报文,但在数据库中不存在该链路状态LSA(BadLSSeq);IE13(1-Way):从邻居收到Hello报文,但在Hello报文的邻居列表中未能发现本路由器ID。IE14(AdjOK?):本路由器接口状态发生变化。IE15:当前存在或正在形成的紧邻应该继续。IE16:当前存在或正在形成的紧邻不应该继续。在邻居状态迁移过程中,要作一些决策:DP1:和邻居间应该建立紧邻关系吗?若遇到以下某一情形或几个情形,应和邻居形成紧邻关系。1)网络类型是点对点2)网络类型是一点对多点3)网络类型是虚拟链路4)本路由器是邻居所在网络的DR5)本路由器是邻居所在网络的BDR6)邻居是DR7)邻居是BDRDP2:对邻居的链路请求列表为空吗?DP3:当前和邻居正在形成的紧邻关系继续吗?当邻居状态发生变化时,要重新选取DR、BDR。9.建立紧邻关系在点对点、一点对多点、虚拟链路等网络上的邻居总是能够成为紧邻的,除非彼此的Hello报文中的参数不同。在广播网络或NBMA网络上,只有DR、BDR和其它DRother邻居之间才能构成紧邻关系。在紧邻关系的建立过程中,要用到以下3种OSPF报文:1)数据库描述报文DD;2)链路状态请求报文;3)链路状态响应报文。当OSPF接口允许时,在该接口上将传输呼叫包。当从邻居接收到一个呼叫包时,但本路由器没有出现在邻居列表时,接口进入Init状态。处于这种状态时,连接到网络上的所有接口应包含在这张邻居列表中,当路由器看到自身的接口列在邻居列表中时,进入2-Way双向状态。处于双向或更高状态时,选取DR和BDR。当符合某种条件时(参见邻居状态迁移图),进入ExStart状态,开始交换链路状态信息。在这个状态,路由器要决定谁是主,谁是从,以及初始数据库描述序列号是什么,在协商过程,最终由主路由器决定DD报文的序列号,由此来同步LSA数据库。然后进入交换状态Exchange,路由器将发送数据库描述包DD给邻居路由器。发送完DD报文后,若没有链路状态请求报文,则进入Full状态。否则,进入Loading装载状态,发送链路状态请求报文。收到链路请求报文后,给邻居发送此请求的更新报文。若从邻居收到发送来的更新报文,对所有请求报文作出响应后,路由器也将进入Full状态。最终,双方都进入Full状态,形成紧邻关系。紧邻关系形成后,两路由器仍然相互周期性地发送Hello报文,以检测邻居是否仍然正常工作。数据库描述报文DD对紧邻形成过程具有重要意义。这些报文对源路由器链路状态数据库中的各条LSA,都携带着它的概要描述。这些描述不是LSA的全部特性,而仅是LSA的头部,该头部对接收路由器(邻居)来说,具有足够的信息决定它是否是自身链路状态数据库中LSA的拷贝。另外,DD报文选项中的3个特性比特决定着紧邻关系的形成过程:1)Init(I)比特,当置位时,说明是第一个DD报文;2)More(M)比特,当置位时,说明这不是最后一个DD报文;3)MS-bit主/从比特,主路由器发送DD报文时应置位。在ExStart状态开始主从路由器的协商,并确定交换数据库DD报文的序列号。刚开始时,发送一个空的DD报文(无任何LSA头部)给邻居,若还未从邻居接收到Hello报文,可以暂时将MS-bit位设置为1,将自己声称为主路由器,而将DD报文的序列号根据自身路由器的情况设置为一个合适的初始值。通过这样两个DD报文的协商,路由器ID较低的路由器将是从路由器,以后发送的DD报文中的MS-bit将设置为0,DD序列号也要设置为主路由器所给出的序列号。DD报文是邻居间以概括LSA方式扩散的第一个报文。当主从关系协商完毕,邻居状态进入Exchange状态。在Exchange状态,邻居间通过对各自链路状态数据库中所有LSA条目的描述来同步其链路状态数据库。DatabaseSummaryList是从链路状态数据库中产生出来的LSAs的头部,DD报文将以这些LSAs的头部发送给邻居。在数据库同步过程中,任一路由器若从邻居发送来的DD报文中发现邻居的一个LSA在本路由器的数据库中不存在或者邻居有一条更加新的LSA时,则应将该LSA放入链路请求队列LinkStateRequestList中。然后给邻居发送链路请求包以获取完整的LSA,邻居收到链路请求后,以Update更新报文方式来响应该LSA的请求。当收到LSA的响应报文后,将该请求条目从链路请求队列LinkStateRequestList中清除出去,并向邻居发送一个确认包,以对该LSA更新报文作出确认应答?。所有以Update更新方式所发送的报文必须逐一得到确认应答,发送出去的LSAs将加入到LinkStateRetransmissionList队列中,当被确认应答后,该LSA将从该队列中清除出去,否则,每隔一个RxmtInterval时间要重发该LSA。对LSA更新报文的确认应答有以下2种方式:1)显式确认:收到包含该LSA头的链路状态确认包2)隐式确认:收到一个完全相同的LSA更新报文主路由器将控制数据库的同步过程,并确保一次只能完成一个DD报文的同步(由主路由器控制DD报文的序列号,且必须在前一个DD报文得到确认应答后才能向从路由器发送下一个DD报文)。当从路由器从主路由器收到一个DD报文后,从路由器将以相同的序列号给主路由器发送一个DD报文(可以看作为对主路由器发来的DD报文的一个确认应答)。如果主路由器在RxmtInterval时间(在接口数据中定义的)内未能收到从路由器发送来的DD报文(序列号必须是主路由器上次发送出去的DD报文序列号),则应向从路由器再次重发该DD报文。从路由器发送DD报文给主路由器,可以认为只是对主路由器发来的DD报文的一种确认应答(当然在该DD报文中可携带本路由器上的链路状态数据LSAs的头部)。如果接收到的DD报文具有新的DD序列号(说明前一次应答的DD报文已被主路由器收到),则从路由器可以用这个新的序列号给主路由器发送一个新的DD报文。如果接收到的DD报文和前一次应答的DD报文序列号相同(说明前一次应答的DD报文未被主路由器收到),则从路由器应给主路由器重新发送上次的确认应答报文DD。当主路由器将自己的链路状态数据库的DD报文全部发送给从路由器后,并且从从路由器接收到的DD报文已标识M-bit为0,主路由器知道数据库同步已完成(当然要收到最后一个DD报文的确认应答报文)。当从路由器从主路由器接收到的DD报文已标识M-bit为0,并且自己的链路状态数据库的DD报文已全部应答给主路由器,将最后一个应答包DD报文中的M-bit设置为0后,从路由器也知道数据库同步已完成。由于从路由器必须要对接收到的每个DD报文给出确认应答(最后一个确认应答报文是否被主路由器收到,从路由器不用关心,主路由器自然会关心能否收到该报文,若收不到,主路由器会重新发送前一次的DD报文,从路由器还会再次作出确认应答),而主路由器必须要等待最后一个DD报文的确认应答报文,因此,从路由器总是最先知道数据库的同步过程是否已经结束。当数据库同步过程结束后(由More(M)比特标识),路由器将迁移到以下某一状态:1)若有链路状态请求报文,即在DD报文同步过程中,在LinkStateRequestList中产生了链路状态请求报文,则进入Loading状态;2)若没有链路状态请求报文,即在DD报文同步过程中,在LinkStateRequestList中没有产生链路状态请求报文,则进入Full状态;若进入Loading状态,则应按照LinkStateRequestList中的条目向邻居发送链路状态请求报文,由邻居对该请求作出响应,以Update报文格式将该LSA的全部信息发送给请求邻居。当请求邻居收到LSA的响应报文后,清除该请求条目。当所有请求条目都被响应后,路由器将进入Full状态。下图描述了在广播网络上,两邻居路由器形成紧邻关系的过程:值得注意的是,链路请求与链路响应报文的处理不一定非要在数据库同步结束后进行,也可以在数据库同步过程中处理,一旦出现链路状态请求,立即进行处理。这样,在数据库同步结束后,两路由器将全部进入Full状态。10.洪泛过程概论OSPF路由域的拓扑结构可以用链路状态数据库来描述,拓扑结构的变化将反映在LSAs的变化上。洪泛过程就是将这些变化的LSAs或新的LSAs在整个网络中进行传送,确保每个节点的数据库被更新,并在各个节点上保持一致。洪泛过程将用以下两种OSPF报文来实现:1)更新报文UpdatePackets2)确认报文AcknowledgementPackets以上两种报文只在紧邻间发送与接收。一条变化的或新的LSA首先通告给其紧邻,由紧邻继续向其它紧邻扩散,最终达到向整个网络的所有节点扩散。在点对点的网络,更新报文将以多播地址AllSPFRouters(224.0.0.5)发送给紧邻。在一点对多点的网络和虚拟链路上,将以紧邻接口的单播地址来发送更新报文。在广播网络上,只有在DRothers(包括BDR?)和DR、BDR之间形成紧邻关系。DRothers路由器发送更新报文时,以DRouters(224.0.0.6)发送给其紧邻DR和BDR,只有DR才能接收并可继续洪泛给另外的DRothers(BDR只能接收下来,不能在该接口上作进一步洪泛)。DR路由器以AllSPFRouters这个多播地址将更新报文发送给网络上的其它所有的DRothers。BDR可以从DRothers接收到更新报文,但不能将其在该网络接口上继续洪泛,除非DR失效,它将代替DR。在NBMA网络上,DR、BDR有类似功能,但是DRothers要以单播地址向DR和BDR发送更新报文,DR也要以单播地址向DROthers发送更新报文。要保证各个节点具有相同的链路状态数据库,洪泛过程必须可靠。发送LSAs的路由器必须确保LSAs被紧邻接收,接收路由器必须知道接收到的LSAs是正确的。洪泛的正确性可以由以下几种方法来保证:1)隐式应答紧邻可以将接收到的LSA以副本方式发给原路由器。这种情况可能刚好要向原路由器发送LSAs。2)显式应答当从紧邻接收到一个LSA时,应以链路状态确认应答报文进行应答。一个应答报文可以对多个LSAs同时进行应答。应答包中仅携带LSA的头部(信息已足够了),不需要完整的LSA。当路由器向某紧邻首次发送一个LSA时,要将该LSA放入该紧邻的LinkStateRetransmissionList中,这个LSA要每隔RxmtInterval时间重发一次,直到被紧邻应答或紧邻断裂。重发报文应以单播方式发送,不管网络类型如何。3)延时应答应答报文可以延时应答,也可以直接应答。延时应答可以将许多LSAs的应答包含在一个应答包中。在广播网络上,从各紧邻收到LSAs后,可以用一个应答报文在多播地址上发送应答包。延时的时间不能大于RxmtInterval时间,以免产生不必要的重发。在一般情况下,在各种网络上发送应答报文的目的地址和发送更新报文的目的地址处理方法相同。4)直接应答直接发送应答报文总是以单播方式发送。当遇到下列情况时,应立即应答:a)接收到了一个重复的LSA,上一次的应答可能丢失,应给紧邻立即应答;b)接收到的LSA中的Age已经达到MaxAge,且本路由器又没有该LSA的实例。5)Sequenceing,Checksums,Aging每个LSA都包含以上3项值,以确保链路状态数据库中的LSA是最新的LSA。LSA序列号取值范围为InitialSequenceNumber(0x80000001)~MaxSequenceNumber(0x7fffffff)。当路由器刚产生一条LSA时,其序列号为InitialSequenceNumber,路由器每次产生LSA的一个新实例时,路由器将该LSA的序列号增加1。如果LSA的序列号达到MaxSequenceNumber,必须要产生该LSA的一个新实例。路由器必须要从所有数据库中删除该LSA。这种方法可以这样实现:将该LSA的Age设置为MaxAge,并向所有紧邻洪泛。一旦所有紧邻对该过时的LSA作出了应答,序列号为InitialSequenceNumber新的LSA的实例将被洪泛。LSA校验和为区分新旧LSA增加了一种手段。和校验是对整个LSA(除Age字段,以免在中途路由器上由于Age的变化,要重新计算校验和)。对链路状态数据库中的每一个LSA要每隔5分钟做一次和校验,以确保数据库中的LSA是正确的。Age是LSA的一个寿命,其范围在0~3600秒之间。当路由器产生一条LSA时,路由器将其Age设置为0,在洪泛过程中,每经过一个路由器,将增加InfTransDelay秒。当LSA保存在链路状态数据库中时,Age也要增加。当一条LSA的Age到达MaxAge时,要重新洪泛并将其清除出数据库,当需要清除出数据库时,要将Age设置为MaxAge并重新洪泛。只有产生LSA的路由器才能将Age设置为MaxAge。当同一个LSA收到多个不同的实例时,路由器通过以下方法,选择最新的LSA:1)比较序列号。序列号越高,越是最新的LSA;2)若序列号相同,则比较校验和,和越大,越是最新的LSA;3)如果校验和相同,则比较Age,若只有一条LSA的Age为MaxAge,则它是最新的LSA;4)如果Age相差超过MaxAgeDiff(15分钟),则具有小的Age的LSA是最新的;5)任何一条不满足,则LSA是相同的。11.OSPF区域Area一个OSPF路由域可以分解为若干区域,这样可以带来以下几个好处:1)同个区域内的路由器才需要具有相同的链路状态数据库,不需要在整个OSPF路由域具有相同的链路状态数据库,这样,可以减小数据库规模,减少对内存的影响;2)链路状态数据库越小,LSA的处理也越少,对CPU的影响也越小;3)链路状态数据库在同一个区域内维护,大部分洪泛过程在本区域内进行。当区域内某链路变化时,只影响本区域路由器的LSAs,而本区域的汇总路由不一定变化,因此,可能不影响其它区域。一个OSPF区域是一组共同的路由器和它们的接口。一个区域最多不能超过60个路由器,一般为25个路由器较为合适。在各个区域上,将有以下3种协议报文:1)在同个区域内的路由器之间的Intra-area报文;2)在不同区域间的Inter-area报文;3)外部自治系统的External报文。在区域划分时,必须要有区域0,它是作为骨干区域的,要为其它各个区域负责汇总每个区域的拓扑结构。因此,不同区域间的报文都要通过骨干区来交换,不能直接交换。非骨干区与骨干区可以由某路由器直接连接,也可以通过虚拟链路来连接。作为虚拟链路端点的两个路由器,其中一个连接着骨干区,另一个连接着非骨干区,并且两路由器都至少有一个接口连接着某个公共的区域,该公共区域是虚拟链路两端点的路由器用来传输协议报文的传送区。虚拟链路属于骨干区,协议处理虚拟链路上的两端路由器就好象处理骨干区中两个点对点的骨干网络,在骨干区的拓扑图中,就好象两个路由器被传送区内部路由费用连接着,其报文的传送要经过传送区的内部路由。存根区是不能作为虚拟链路的传送区的,不需要类型4和类型5的LSA。划分区域后,路由器将分为以下4种类型:1)InternalRouters:所有接口属于同一区域的路由器。这些路由器只有一个单一的链路状态数据库,实行单一的路由算法。2)AreaBorderRouters(ABRs):将一个或多个区域连接到骨干区域的路由器。这些路由器的作用类似区域间交换路由信息的网关。ABR至少有一个接口连接到骨干区,另外的接口可以连接到其它非骨干区,并且要为每个区域维护一个独立的链路状态数据库,因此,ABR要有较大的内存和较强的CPU处理能力。一般一个ABR所能连接的区域不超过3个。ABR要对各个区域的链路状态数据库实行独立的路由算法,并将各个区域的拓扑结构信息变成汇总路由信息给骨干区域,然后由骨干区域将这些汇总信息扩散到其它区域。为实现合理的路由汇总,要求每个区域有一组连续的IP地址空间。在区域间使用不连续的IP编址,若ABR仍然进行汇总,则将导致一个OSPF路由器错误的转发报文。3)BackboneRouters:至少有一个接口连接到骨干区域的路由器。4)AutonomousSystemBoundaryRouters(ABRs):到外部自治系统的网关,由它将其它协议所产生的外部路由信息再分配到OSPF路由域,前3种路由器都可以作为ABRs,但ASBR不能设置在存根区中。划分区域后,路由可分为3种:1)区域内路由(Intra-areaRoutes):本区域内的网络或子网的路由;2)区域间路由(Inter-areaRoutes):另一个区域的网络或子网的路由,由ABR负责在两个区域间洪泛;3)外部路由(Externalroutes):外部自治系统的路由。由ASBR负责产生,并在整个自治系统内洪泛。12.协议包的发送与接收处理为确保各路由器的链路状态数据库的同步,协议包应该得到优先处理,包括在接收、发送过程中也需优先处理。12.1协议包的发送除Hello报文外,协议包都是在紧邻中传输,因此,除了虚拟链路外,路由协议包的目的地都只是一跳。发送协议包时,应该考虑源、目的IP地址。发送协议包时,目的IP地址规定如下:1)在点对点的网络上,IP的目的地址始终为多播地址AllSPFRouters;2)在其它网络包括虚拟链路上,大多数OSPF包是以单播方式发送,即直接发送给紧邻的另一个路由器,在这种情况下,目的IP地址应该为紧邻另一端的邻居IP地址;3)但广播网络是特殊情形,一般要用多播地址为目的地,Hello报文的目的地址为多播地址AllSPFRouters,DR、BDR发送链路更新报文和链路应答报文的目的地址为AllSPFRouters,而其它路由器发送链路更新报文和链路应答报文的目的地址应为AllDRouters;4)重新发送链路状态更新报文时,始终以单播地址为目的地;发送协议包时,源IP地址规定如下:1)在非点对点的网络上,源IP地址应该设置为发送接口的IP地址;2)点对点的网络接口可以没有IP接口地址,此时,IP源地址可以设置为路由器的任一接口IP地址;3)虚拟链路要用其确切的IP地址(用于虚拟链路所配置的地址?);各种OSPF包的具体发送过程要参见RFC2178:HelloSection9.5DatabasedescriptionSection10.8LinkstaterequestSection10.9LinkstateupdateSection13.3LinkstateackSection13.512.2协议包的接收对接收到的OSPF包首先要在报文合法性上作预处理,然后才能按报文类型作相应的处理。具体的预处理过程参见Section8.2。首先检查IP的合法性:1)IP包的和校验;2)IP包的目的地址必须是接收接口的IP地址,或者是多播地址AllSPFRouters、AllDRouters中的某一地址;3)IP的协议号为89;4)本路由器产生的OSPF包应丢弃。这时应该检查IP的源地址,以确保多播地址的报文不要被本路由器自己接收;再检查OSPF的合法性:1)协议版本号应为2;2)OSPF头中的区域ID应该校验。若以下两项都失败,则应丢弃该OSPF包:a)与接收接口的区域ID相匹配,则应保证报文的源IP地址和接收接口在同一个网络上(可以通过接口的子网掩码比较报文中的源IP地址和接收接口的IP地址是否在同一个网络上),但对点对点的网络,不能进行比较;b)指示为骨干区域。此时,报文是通过虚拟链路接收到的。接收路由器是ABR,报文中的宣告路由器ID是所配置的一条虚拟链路的另一端路由器,接收接口必须连接在本虚拟链路所设置的传送区。如果以上条件检查均能满足,报文可以被接收,并且从此报文将和该虚拟链路关联着;3)如果接口状态为DR或BDR,则报文的IP目的地址应该为AllDRouters;4)报文的安全认证类型应该和区域所定义的认证类型相匹配;5)报文的安全认证正确。各种OSPF包的具体接收过程要参见RFC2178:HelloSection10.5DatabasedescriptionSection10.6LinkstaterequestSection10.7LinkstateupdateSection13LinkstateackSection13.713.Hello报文的发送与接收13.1Hello报文的发送Hello报文在路由器的每个接口上被发送。他们用于发现并维护邻居关系,在广播网络上,Hello报文还用于选取DR和BDR。Hello报文,包含路由器优先级(选取DR)、接口上发送Hello报文的时间间隔HelloInterval、邻居路由器应该接收到Hello报文的最长时间间隔RouterDeadInterval、该接口所连网络的掩码(点对点的网络和虚拟链路,其掩码为0.0.0.0)。Hello报文中有一个选项,如果接口连接的区域能够处理外部LSA(非存根区域),其中的E比特应该设置为1。如果E比特设置不正确,邻居将拒绝该Hello报文。为确保紧邻间的双向通信,在Hello报文中包含了该接口上通过Hello报文发现的邻居路由器列表。还包含了本路由器当前所选的DR和BDR,0.0.0.0表示DR或BDR未选取。在广播网络或点对点网络上,Hello报文是以AllSPFRouters的多播地址发送的。在虚拟链路上,直接以链路另一端的IP地址来发送。在一点对多点的网络上,要向所连接的邻居(以邻居IP地址作目的地址)独立发送Hello报文。13.2Hello报文的接收当接收到一个Hello报文时,首先做IP头和OSPF头的合法性检查,然后进行Hello包的接收处理。对接收到的Hello报文,检查报文中的网络掩码、HelloInterval、RouterDeadInterval等参数是否和接收接口所设置的参数相匹配。任何不匹配都要丢弃该报文。在点对点和虚拟链路上,网络掩码可以忽略。任一个接口都对应一个区域,因此,从该接口接收来的Hello报文中选项的E比特要和该区域的ExternalRoutingcapability相匹配。如果区域不能洪泛即是存根区域,则E比特必须设置为0,否则必须设置为1。现在可以将Hello报文的源头和接收接口的某一邻居关联起来。如接收接口连接在广播网络、一点对多点或NBMA网络,则源头用Hello报文的IP头中的源IP地址来表示,如果接收接口连接在点对点的网络或虚拟链路上,则源头用Hello报文的OSPF头中的宣告路由器ID来表达。接口当前的邻居列表包含在接口的数据结构中,若在邻居列表中未能发现该邻居,说明首次检测到该邻居,其邻居状态为Down。当从广播网络、一点对多点、NBMA网络的某一邻居接收到一个Hello报文时,邻居结构中的邻居ID等于Hello报文的OSPF头中的路由器ID;当从点对点(非虚拟链路)的邻居上接收到一个Hello报文时,邻居结构的邻居IP用Hello报文的IP头的源IP地址来表示。现在可以检查Hello报文的其余部分,给邻居状态机和接口状态机产生触发事件,并作状态迁移:1)每个Hello报文给邻居状态机产生一个HelloReceived事件;2)然后,检查Hello报文中的邻居列表。如果本路由器出现在报文的邻居列表中,则邻居状态机要执行2-WayReceived事件。否则,邻居状态机要执行1-WayReceived事件,Hello报文的处理结束。3)接下来,检查Hello报文中的优先级字段,如果不同于先前从邻居接收来的值,则接收接口的状态机要执行NeighborChange事件,而邻居数据结构中的路由器优先值要作相应的改变;4)接下来,要检查报文中的DR字段。如果邻居将自己宣称为DR(DR字段等于邻居发送Hello报文的接口IP地址)、BDR字段为0.0.0.0且接收接口的状态机为Waiting状态,则接收接口状态机应执行BackupSeen事件。否则,如果邻居宣告自己是DR但先前不是DR或者邻居宣告自己不是DR但先前是DR,则接收接口状态机应执行NeighborChange事件。在任一情形下,邻居结构数据中的邻居DR应该更新;5)最后,要检查报文中的BDR字段,如果邻居将自己宣称为BDR(BDR字段等于邻居发送Hello报文的接口IP地址)且接收接口的状态机为Waiting状态,则接收接口状态机应执行BackupSeen事件。否则,如果邻居宣告自己是BDR但先前不是BDR或者邻居宣告自己不是BDR但先前是BDR,则接收接口状态机应执行NeighborChange事件。在任一情形下,邻居结构数据中的邻居BDR应该更新;14.DD报文的发送与接收14.1DD报文的发送DD报文中的接口MTU字段应该设置为本发送接口的最大IP包长度(不分片),在虚拟链路上发送DD报文时该字段为0。路由器对OSPF的选项兼容性通过DD报文的选项字段来发送给邻居。该选项在路由器的整个DD报文的交换和洪泛过程中要保持相同的值,如果发生变化,DD报文的交换应该重新启动,邻居状态迁移到ExStart。当且仅当接口所连接的网络属于非存根区时,选项中的E比特应该设置为1,其余比特为设置为0。DD报文的发送过程要取决于邻居状态。在ExStart状态,路由器将发送空的DD报文,其I、M、MS比特都要设置为1,这些报文要每隔RxmtInterval重发一次。在ExChange状态,DD报文才开始真正交换数据库中的链路状态信息。区域链路状态数据库中的每个LSA将列于邻居数据结构的Databasesummarylist列表中。每发送一个DD报文要从邻居数据结构中取DD序列号,并从Databasesummarylist列表的顶部取LSA条目。当该DD报文被邻居应答确认后,这些LSA条目要从Databasesummarylist列表中清除掉。在Exchange状态,决定何时发送DD报文取决于本路由器是主路由器还是从路由器。1)如果是主路由器a)从路由器通过回送DD序列号对先前的DD报文作出应答确认时,可以发送下一个新的DD报文,DD序列号加1;b)DD报文发送后,RxmtInterval时间已到,但仍然未收到应答确认,则要重发上次的DD报文,DD序列号不变。2)如果是从路由器DD报文的发送只是对主路由器发来的DD报文的一种响应,其序列号等于主路由器发来的序列号。a)当接收到一个新的DD报文,则也要向主路由器发送一个新的DD报文;b)若接收到一个先前的报文,则应向主路由器重新发送上次的DD报文。在Loading状态和Full状态,从路由器必须要重发最后一次所发送的DD报文,以应答主路由器发来的重复DD报文。为此,从路由器要等待RouterDeadInterval时间后,才能将上次所发送DD报文清除掉,在该时间间隔后,还从主路由器接收到DD报文,则应产生SeqNumberMismatch的邻居事件。14.2DD报文的接收接收到的DD报文首先要经过IP头和OSPF头的合法性预处理。当DD报文接收下来后,要按照当前邻居状态作相应的处理。当DD报文被接收时,要将报文中的I、M、MS比特、选项字段、DD序列号字段等数据保存在邻居数据结构的LastreceivedDatabaseDescriptionpacket中。这些数据用于决定所接收到的DD报文是否是上次DD报文的复制报文,若这些数据相同,则本DD报文是上个DD报文的复制报文。如果报文中的MTU字段值大于接收接口上的最大IP长度,则应丢弃该DD报文,否则,按当前的邻居状态作如下处理:1)Down状态丢弃本DD报文。2)Attempt状态丢弃本DD报文。3)Init状态邻居状态机将执行2-WayReceived事件。这将使邻居状态迁移到2-Way或Exstart状态,如果新状态为Exstart,则按Exstart状态继续处理所接收到的DD报文。4)2-Way状态该DD报文被忽略。5)ExStart状态如果接收到的DD报文符合下列情况之一,则邻居状态机将执行NegotiationDone事件(使邻居状态将迁移到Exchange),报文中的选项字段将保存邻居数据结构中的邻居选项字段,其DD序列号将被作为下个DD报文。否则,本DD报文被忽略。a)I、M、MS比特被设置为1,且DD报文为空报文,邻居的路由器ID比本路由器ID大。此时,本路由器将作为从路由器,将MS比特设置为从路由器标志,邻居数据结构中的DD序列号为主路由器所定义的序列号;b)I、MS比特被置0,且DD序列号等于邻居数据结构中的DD序列号(表示是对上次所发送的DD报文的应答),邻居路由器ID比本路由器ID小。此时,本路由器将作为主路由器。6)Exchange状态对于重复的DD报文,主路由器将丢弃该DD报文,而从路由器将重发上次所发送的DD报文。否则,这是一个新报文,作以下处理:a)如果DD报文中的MS比特与邻居数据结构中的主/从关系不匹配,则给邻居状态机产生SeqNumberMismatch事件,并停止本DD报文的处理过程;b)如果DD报文中的I比特被置位,则给邻居状态机产生SeqNumberMismatch事件,并停止本DD报文的处理过程;c)如果DD报文中的选项字段与邻居数据结构中的选项字段不匹配,则给邻居状态机产生SeqNumberMismatch事件,并停止本DD报文的处理过程;d)DD报文必须按报文中的DD序列号来处理。如果本路由器是主路由器,下次接收到的DD报文的序列号应该等于邻居数据结构中的DD序列号;如果本路由器是从路由器,下次接收到的DD报文的序列号应该比邻居数据结构中的DD序列号大1;在任一情形下,如果接收到的DD报文的序列号为期待的序列号,则应对其报文内容(报文所携带的LSA列表)作进一步 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ;e)否则,则给邻居状态机产生SeqNumberMismatch事件,并停止本DD报文的处理过程;7)Loading或Full状态在该状态下,路由器已经发送和接收了所有的DD报文,正常情况下,不应收到DD报文,唯一的可能是收到了一个重复报文。特别强调的是,报文中的选项字段应该和邻居数据结构中的选项相匹配(否则将按以上的错误来处理)。任何I比特设置为1的DD报文都将给邻居状态机产生一个SeqNumberMismatch事件。主路由器接收到重复报文,将丢弃该DD报文。从路由器接收到重复报文,将重新发送上次所发的DD报文。如果DD报文是一个期待的DD报文,则应逐一处理报文中的各条LSA:a)对每条LSA,检查LSA类型的有效性,如果类型未知(不是为1~5)或者类型为外部LSA但其邻居是在存根区域内,则要向邻居状态机产生一个SeqNumberMismatch事件,并停止本DD报文的处理过程;b)否则,路由器在链路状态数据库中检查是否存在该LSA的实例。如果数据库中不存在该LSA或者数据库中的LSA不是新近的LSA,则该LSA要放到链路状态请求队列中去,在以后或立即向邻居发送链路状态请求包,请求该新近的LSA;当路由器接收到一个期待的DD报文后,要按主路由器还是从路由器作以下不同处理:a)如果是主路由器邻居数据结构中的DD序列号加1。如果本路由器已经发送了所有的DD报文,并且所接收的DD报文中的M比特被设置为0,则要向邻居状态机产生一个ExchangeDone事件,否则,要向从路由器发送一个新的DD报文;b)如果是从路由器将邻居数据结构中的DD序列号设置为本DD报文所设置的DD序列号。从路由器必须要向主路由器发送DD报文,以作该报文的应答。如果接收的DD报文的M比特被设置为0,并且要发送给主路由器的DD报文的M比特也将设置为0(本路由器的DD报文已经发送完毕),则向邻居状态机产生一个ExchangeDone事件。该事件在从路由器上比主路由器要早产生。15.链路状态请求报文的发送与接收15.1链路状态请求报文的发送在邻居状态处于Exchange或Loading状态,且邻居数据结构中的链路状态请求队列存在LSA列表时,路由器要向邻居发送链路状态请求包,以请求这些LSA条目。当邻居用链路状态更新报文来响应这些请求报文时,链路状态请求队列将被逐步截短,新的链路状态请求报文被发送。这个过程一直进行到链路状态请求队列为空为止。不满足的链路状态请求报文将被重发。链路状态请求报文一次只能发送一个。当链路状态请求队列为空时,且邻居状态为Loading时,邻居状态机要产生一个LoadingDown事件。15.2链路状态请求报文的接收只有当邻居状态处于Exchange、Loading、Full等状态时,才能接收链路状态请求报文。在其它所有状态,链路状态请求报文将被忽略。链路状态请求报文中的每一条LSA条目都应该在数据库中能找到,并将该LSA放入链路状态更新报文中,发送给邻居。这些LSAs不要放入邻居数据结构的链路状态重发队列LinkStateretransmissionlist中。如果在数据库不能发现该LSA,则在DD报文的交互过程中发生了差错,要给邻居状态机产生一个BadLSReq事件。16.洪泛过程(含更新报文和应答报文的发送与接收)16.1更新报文的接收链路状态更新(Update)报文为LSAs的洪泛提供了一种机制。一个链路状态更新报文将包含多个LSA,洪泛各个LSA时只需往前扩散一跳。为使洪泛过程可靠,各个LSA必须得到独立的应答确认,这就需要发送应答确认报文,在同一个应答确认报文中,可以对多个LSA进行应答确认。当收到一个链路状态更新报文时,就要开始进行洪泛。在洪泛之前,对接收到的报文应该进行一致性检查(和其他接收报文一样,做最一般的合法性检查)。更新报文和特定的邻居及特定的区域联系在一起,因此,当邻居状态小于ExChange时,应丢弃该更新报文。除外部LSA外,所有类型的LSA都和特定的区域联系在一起的。但LSA中不包含区域这个字段,因此,一个LSA必须要从更新报文头中推理其区域Area。对更新报文中的每个LSA,按以下步骤处理:(1)LSA的校验和检查。若校验和无效,则应丢弃该LSA,直接对下个LSA处理;(2)检查LSA的类型。若是无效的类型,则应丢弃该LSA;(3)若LSA的类型为外部LSA,而本区域配置为存根区域,则应丢弃该LSA。因为外部LSA不能被洪泛进入或穿越存根区域的;(4)若LSA的age字段为MaxAge,而且在链路状态数据库中不存在该LSA的实例,没有一个邻居状态处于ExChange或Loading状态,则应采取以下处理:(a)应该给发送方发送一个应答,确认该LSA已被收到;(b)丢弃该LSA报文。(5)否则在链路状态数据库中查找LSA的实例,若没有该LSA的拷贝或接收到的LSA比数据库中的LSA更新近,则执行以下操作:(a)若已存在一份该LSA的拷贝但其装入的时间小于MinLSArrival,则丢弃该LSA并不作应答;(b)否则将该LSA洪泛给其它接口。在某些情况下(如接收口状态在DR,而LSA来自非BDR的其它路由器),还要在原接收接口上洪泛;(c)将邻居的链路状态重发队列中的该LSA清除;(d)将新的LSA安装在链路状态数据库中(代替原先的LSA),这将导致路由表的重新计算,并对这新的LSA标上当前时间。洪泛过程不能覆盖新近接收到的LSA(时间小于MinLSArrival);(e)沿接收接口对接收到的LSA发送一个应答确认;(f)如果新的LSA指示自己来源于路由器自己,路由器将要采取特殊策略:既要更新LSA,在某些情况下要将其从路由表中清除掉;(6)否则,如果在发送邻居链路请求队列中发现该LSA的请求实例,则在DD报文的交换过程中发生了错误,应该给邻居状态机产生一个BadLSReq邻居事件,重新开始DD报文的交换过程,并停止处理链路状态更新报文;(7)否则,如果接收到的LSA是链路状态数据库中的同一个实例,应执行下列步骤:(a)如果该LSA在邻居的重发LSA队列中,而本路由器正在等待该LSA的应答,则本路由器应该将该LSA视作为隐式应答,将重发队列中的LSA清除掉;(b)可能要通过在接收接口上发送一个应答包来对所接收到的LSA进行应答;(8)否则,数据库中的LSA更新,如果数据库中的LSA的Age等于MaxAge,序列号等于MaxSeqNumber,则直接丢弃该LSA,不需发送应答确认。16.2如何判断LSA是一条新的LSA一条LSA由LS类型、链路状态ID和宣告路由器ID来标识,如何决定一条LSA是最新的LSA?1)有新的LS序列号;2)若序列号相同,则和校验大的为新LSA;3)如果只有一个LSA的Age为MaxAge,则它就是新的LS;4)如果LS的Age相差值大于MaxAgeDiff,则有较小Age的LSA为最近的;5)否则,两个LSA可以被认为是相同的LSA实例。16.3将新的LSA装入数据库当有洪泛或自身产生一个新的LSA时,要将新的LSA安装到链路状态数据库中,这可能会引起路由计算,当产生一条新的LSA时,要和先前的LSA比较,若相同则不需路由计算。当和先前的实例比较时,要比较以下的不同点:a)LS的选项不同;b)一个LS的Age为MaxAge,而另一个LS的Age不是MaxAge;c)LSA头中的长度字段改变;d)LS的内容发生了改变;如果两个LSA不同,需要重新计算路由:(a)路由器LSA或网络LSA所有路由要重新计算(b)汇总LSA由汇总LSA所描述的路由要重新计算。如果目的地是ASBR,则外部路由也要重新计算。(c)外部LSA由外部LSA所描述的路由要重新计算。当然,在装入新LSA时,原先LSA要从数据库中清除掉,也要从邻居重发队列中清除掉。16.4新LSA(更新报文)的发送当接收到一个新的LSA时(包括本路由器产生的LSA),要沿着其他接口进行洪泛,也就是说要选择发送接口,将该LSA发送出去,并加入到邻居重发队列中,在这个过程中,还要维护邻居链路状态请求队列。要按照LSA的类型,在一定的接口上洪泛,这些接口被称作为合法接口。·外部LSA外部LSA除存根区域外可在整个区域内扩散,因此,合法接口为所有接口(除虚拟链路和连接到存根区域的接口)。·其它LSA其它所有的LSA都将限制在某个区域上,因此,合法接口为连接到该区域的所有接口。如果该区域为骨干区域,则合法接口还应包括虚拟链路。链路状态数据库在合法接口的邻居上要保持同步,这要通过以下过程实现,在该过程中决定了在那些能够确认其邻居已经收到了该LSA的接口上不需要洪泛该LSA,但为确保邻居绝对能收到该LSA,仍然需要将该LSA放入邻居的重发队列中,以被重发使用。在每个合法接口上,要作以下处理:(1)检查接口上的每个邻居,决定其邻居是否必须接收该LSA;(a)如果邻居状态小于ExChange,则不需给其洪泛;(b)否则,如果邻居状态为Full(Exchange或Loading),检查该紧邻的链路状态请求队列,如果在请求队列中存在该LSA的实例,说明该邻居已经存在该LSA的实例,此时应该比较这两个LSA:·如果请求队列中的LSA比接收到的LSA更新近,说明邻居的LSA比现在接收到的LSA要新近,因此不要向该邻居洪泛该LSA,本路由器由请求队列去从邻居获取新近的LSA;·如果这两个LSA是同一个实例,说明本路由器与邻居已经具有了相同的LSA,既不要向邻居洪泛,也不要从邻居获取,因此要将其从请求队列中清除掉;·否则,如果接收到的LSA是更加新近的,则将其从请求队列中清除掉,并向邻居扩散;(c)如果该LSA从该邻居接收来的,则不在该邻居上扩散,直接检查下个邻居;(d)为确保该LSA肯定能扩散到邻居,应将该LSA加到链路重发队列中去,以后每隔一段时间应重发一次,直到收到应答确认包;(2)路由器必须决定能否在该接口上扩散该新的LSA。在先前的步骤中,若LSA没有被添加到任一邻居的重发队列中,则不能在该接口上洪泛该LSA,应检查下一接口;(3)如果新的LSA从这个接口上接收到的,并且是从DR或BDR接收到的,说明其它邻居也能从DR或BDR上接收到该LSA,因此,在该接口上不需要扩散该LSA,检查下个接口;(4)如果接收到LSA的接口状态处于BDR状态,则该LSA不需要在该接口上洪泛,此时应由DR负责洪泛。只有在DR失效时,才负责扩散LSA;(5)若能到达这一步骤,可以在该接口上扩散该LSA,并将LSA的Age加上一个InfTransDelay(直到到达MaxAge);在非广播网络上,报文的目的地址是单播地址,是邻居的接口地址。在广播网络上,目的地址是多播地址,具体地址要由接口状态决定,若是DR、BDR则目的地址是AllSPFRouters,否则目的地址是AllDRouters。16.5接收到自己产生的LSA的处理在洪泛过程中,可能会接收到路由器自己所产生的LSA,这可以通过以下两种方法来检测:(1)LSA头中宣告路由器等于本路由器ID;(2)LSA是网络LSA,其链路状态ID等于本路由器的一个IP接口地址。当接收到自己的LSA且比路由器当前的LSA更加新近时,路由器要做特殊处理。接收到这样一个LSA,表示在路由域中存在着一些LSAs,这些LSAs是在路由器重新启动前由本路由器产生出来的。在一般情况下,路由器对该LSA要产生一个新的LSA实例,其序列号要加1。在另外一些情况下,路由器不再希望产生该LSA,这包括:(1)LSA是一个汇总LSA或是一个外部LSA但本路由器不能到达该目的地;(2)LSA是一个网络LSA,但本路由器在该接口上已不是DR;(3)LSA是一个网络LSA且其链路状态ID等于本路由器上的某个接口的地址,但宣告路由器不等于本路由器ID(这种情况是本路由器的ID已发生改变,该LSA是改变前的LSA)。在这些情况下,该LSA不应该被更新,而应该通过将其Age设置为MaxAge并进行洪泛,将该LSA从路由域中删除掉。16.6应答确认报文的发送每收到一个LSA更新报文,必须要通过应答报文进行应答。这通常要通过发送应答确认报文来显式完成,也可以通过发送更新报文来隐式完成。一个应答报文中可以包含多个应答,这个报文要沿着原先接收更新报文的接口发送。发送方式有两种:1)延时应答,延时并隔一段时间发送(延时时间要短,必须小于RxmtInterval);2)直接应答,直接以单播方式发送给特定邻居。具体的应答方式要取决于接收到的LSA的情况。延时发送应答可以实现:1)在一个应答报文中可以封装多个应答;2)在多播网络上,一个应答报文一次可以给多个邻居同时指示其应答;3)使连接在一个公共网络上的多个路由器可以随机发送应答报文。直接应答是向特定的邻居响应所接收到的重复更新LSA,这个应答是以单播地址发送的,当接收到一个重复报文时,要立即发送应答。当收到一个LSA时,需要决定如何发送应答报文。发送应答报文时要看其接口状态,BDR接口状态不同于其它接口状态,它需要用延时应答发送给接口上的紧邻。其具体描述见下表:环境和情形BDR状态其它状态LSA已沿着原先的接收口洪泛出去了不需发送应答不需发送应答LSA比数据库中的LSA更新近,但没有沿着原先的接收口洪泛出去若LSA来自DR,则应延时应答,否则不需发送应答不需发送应答LSA是一个复制的LSA(和重发LSA相同),被作为隐含应答处理若LSA来自DR,则应延时应答,否则不需发送应答不需发送应答LSA是一个复制的LSA(和重发LSA相同),但不是被作为隐含应答处理直接应答直接应答LSA的Age为MaxAge,但数据库中无此LSA实例直接应答直接应答在广播网络上,要用组播地址来发送应答报文。目的IP地址要取决于接口状态。若接口状态在DR或BDR,则目的地址为AllSPFRouters,在其他状态,则用AllDRouters。在非广播网络上,都以单播地址发送给紧邻,但邻居状态应大于Exchange。16.7定时重发LSALSAs在洪泛给紧邻时,要将其放入邻居链路状态重发队列中。为确保洪泛的正确可靠,LSAs需要重发直至被应答确认。重发时间间隔由配置的接口参数RxmInterval决定。重发报文总是以单播方式来发送的(直接指向目的地址),不会以组播地址发送,每个LSA的Age要增加InfTransDelay,直到Age达到MaxAge为止。当紧邻崩溃时,就需要重发LSA,重发过程一直坚持到Hello报文检测到紧邻关系失效为止。当紧邻关系失效时,需要清除该紧邻上的重发队列。16.8应答确认报文的接收应答确认报文在被洪泛过程接收处理之前要做一系列合法性检查。应答确认报文总是和特定邻居联系在一起的,如果邻居状态小于Exchange,则丢弃该报文。否则,对应答报文做如下处理:1)应答报文中的LSA在邻居链路状态重发队列中存在其实例吗?如果不存在,则应检查应答报文中的下一个LSA;2)如果该应答LSA和邻居重发队列中的LSA的实例相同,则将该重发LSA从队列中清除;否则,登记该有问题的应答LSA,检查下一个应答LSA。17链路状态通告LSA的产生一个路由器要为接口所属的每个区域保存一份链路状态数据库。同区域内的路由器关于该区域的数据库是相同的。对一条LSA,最重要的是其链路状态类型、链路状态ID和宣告路由器ID等字段值:链路状态类型:描述LSA包的类型,取值为1~5。链路状态ID:取决于LSA包类型,具体取值如下:LS类型链路状态ID值1生成LSA的路由器ID2这个网络的DR的IP接口地址3ABR要通告的某区域内某一目标网络的IP地址4ABR要通告的某一ASBR的路由器ID5ASBR要通告的某一外部自治系统某一目标网络的IP地址宣告路由器ID:产生LSA的路由器ID。一条LSA被加入数据库中的条件:1)在洪泛过程中接收到一条LSA;2)路由器自己产生一条LSA。一条LSA从数据库中被删除的条件:1)在洪泛过程中被新的实例覆盖;2)路由器自己产生了一条新的LSA实例;3)LSA的Age太大而被删除;当一条LSA从数据库中删除时,要将该LSA从邻居的链路状态重发队列中清除掉。每个路由器要产生路由器LSA,如果是广播网络上的DR,则要产生网络LSA,区域边界路由器ABR要为区域内的目的第产生汇总LSA,ASBR要为自治系统的外部目的地产生外部LSA。对汇总LSA和外部LSA,一条LSA描述一个目的地。当产生一个新的LSA实例时,其序列号要加1,Age字段为0,其校验和计算后,该LSA要加到数据库中并在相应的接口上洪泛(具体方法见LSA的洪泛)。以下10个事件将产生一个新的LSA实例:1)路由器自身产生的某一LSA的Age字段达到LSRefreshTime时,要产生一个新的LSA实例,即使LSA的内容完全一样。这一周期性地更新LSA可以增强链路状态算法的稳定性。不管LSA发生什么变化,都要产生新的LSA。但是,对于同一个LSA的两个不同实例,两实例之间的时间间隔不得小于MinLSInterval。下列事件将使LSA的内容发生变化,这些事件将要产生新的LSA:2)当一个接口状态发生变化时,要产生一个新的路由器LSA;3)当连接在网络上的DR发生变化时,要产生一个新的路由器LSA。如果本路由器是DR,则要产生一个新的网络LSA。如果本路由器不再DR,则有关该网络的网络LSA应该从路由域中删除。4)邻居路由器在其它状态与Full之间发生变化时,要产生路由器LSA,如果路由器是连接该网络的DR,则还要产生网络LSA下列4个事件与ABR有关系:5)一个区域内的路由被加入/删除/修改时,将会对所连的每个区域(包括骨干区域)产生一个新的汇总实例;6)一个区域间的路由被加入/删除/修改时,将会对所连的每个区域(但不包括骨干区域)产生一个新的汇总实例;7)路由器连上一个新的区域时,路由器用路由表中的有关区域内路由和区域间路由对新区域产生新的路由汇总;8)当路由器的虚拟链路的状态发生变化时,将产生一条新的路由器LSA到虚拟链路的传送区,也要产生一条路由器LSA到骨干区域;以下2个事件与ASBR有关:9)外部路由发生变化时,ASBR要产生一条新的外部LSA;10)路由器不再作为ASBR时,路由器通过Age为过熟方法删除先前所产生的外部LSA;17.1路由器LSA一个路由器要为它所属的每个区域产生路由器LSA。这个LSA描述了路由器连接到该区域的状态。该LSA只能在本区域内洪泛。通过路由器中的B、E比特可以指示路由器是ABR或ASBR,以在以后处理汇总路由和外部路由时,在路由表中区别到这些路由器的路径。当本路由器连接着两个以上的区域时(即使当前没有连接上骨干区域),比特B要置位。对存根区域路,路由器LSA的E比特不能被置位。当区域A是一条或多条虚拟链路的传送区,则对区域A的路由器LSA还要置位V比特。该比特位可以使区域A中的其它路由器发现本区域是一个传送区域。路由器LSA描述了路由器连接到该区域的接口或链路的连接情况,每条链路按照所连网络的种类被赋予特定的链路类别和链路ID,链路ID给出了链路另一端的实体名称。另外,还被赋予了相应的链路数据,作为链路的额外信息。其链路类型与链路ID的对应关系如下:链路类型链路ID链路数据1:点对点网络邻居路由器ID链路的接口IP地址2:传送网络该网络的DR路由器的接口地址链路的接口IP地址3:存根网络该网络的IP网络地址该网络的子网掩码4:虚拟链路邻居路由器ID链路的接口IP地址最后,对每条链路要赋予一定的费用,表示从该接口发送一个报文所需的代价。对存根网络,其费用为0,其它网络一定要赋予非0值。路由器要为某区域A建立路由器LSA,则路由器要从接口数据结构中检查每个接口:1)如果接口所连的网络不属于区域A,则该链路不能加入到路由器LSA中,并检查下一个接口;2)如果接口状态处于Down,则不能加入;3)如果接口状态为Loopback,只要该接口不是点对点网络,则可以将其作为类型3即存根网络类型加入到路由器LSA中,链路ID设置为本接口的IP地址,链路数据为掩码0xffffffff,费用为0;4)否则按该接口的类型,将其加入到路由器LSA中(具体方法见下文)。5)所有接口检查完毕后,要检查连接在本路由器上且属于区域A的所有主机。这些主机被看作为一个类型3的存根网络,链路ID为主机的IP地址,链路数据为掩码0xffffffff,并设置相应的费用。17.1.1点对点的网络接口对于点对点的接口,可以加入一条或多条链路描述到路由器LSA:1)如果邻居状态在Full状态,加入一条类型1的链路,链路ID为邻居路由器ID。对有名点对点网络,链路数据为接口IP地址。对匿名点对点网络,链路数据为接口MIB-II中的ifIndex值。费用值要正确地设置;2)另外,只要接口状态为point-to-point状态,不管邻居状态为什么,还要加入一条类型3的链路到路由器LSA中:a)假设邻居路由器的IP地址可知,则链路ID为邻居IP地址,链路数据为掩码0xffffffff,接口费用要设置;b)如果链路被赋予为一个子网,则类型3的链路ID为子网的IP地址,链路数据为子网掩码,接口费用要设置;17.1.2广播网络或NBMA网络接口(传送网络)要加入一条链路描述到路由器LSA中:1)如果接口状态为Waiting,类型为3,链路ID为所连网络的网络地址,链路数据为网络掩码,费用为所配置的接口费用;2)否则,接口已经选取了DR。如果本路由器和DR已经建立了紧邻关系,或者本路由器就是DR且至少与一个路由器建立了紧邻关系,则一条类型为2、链路ID为DR连接到该网络的接口地址、链路数据为本路由器的接口IP地址、费用为所设置的接口费用。否则将接口作Waiting状态的类似处理;17.1.3虚拟链路对于虚拟链路,仅当与虚拟邻居建立紧邻关系时,才能将一条链路描述加入到路由器LSA中,该链路类型为4、链路ID为虚拟邻居的路由器ID、链路数据为连接该虚拟邻居的接口IP地址、费用为所设置的虚拟链路的费用。17.1.4一点对多点网络接口有一条或多条链路描述将加入到路由器LSA中:1)一条类型为3、链路ID为路由器本身的接口IP地址、链路数据为掩码0xffffffff,费用为0;2)对于形成紧邻关系的每个紧邻,另外还要加一条类型1、链路ID为邻居路由器ID、链路数据为接口IP地址、费用为接口费用的链路描述到路由器LSA中;17.2网络LSA网络LSA在广播网络或NBMA网络上产生,该网络是连接两个以上路由器的传送网络。网络LSA可以描述连接在该网络上的所有路由器。该网络上的DR负责产生网络lSA,当且仅当DR和网络上的一个或多个路由器形成紧邻关系时,才产生网络LSA。网络LSA只在包含该传送网络的区域内洪泛。网络LSA将列出与DR构成紧邻关系的所有路由器,每个紧邻路由器用OSPF的路由器ID表示,DR路由器本身也要列在紧邻路由器中。网络LSA中的链路状态ID是DR的接口地址,该地址和网络LSA中的网络地址掩码操作后,可以得到该网络的网络地址。一个路由器先前是DR,但现在不是DR时,要删除先前由它产生的网络LSA。这个LSA不能再被用于路由表的计算,它应该通过增加LSA的Age到MaxAge并洪泛的方法来删除其LSA。另外,在极少数情况下,路由器ID被改变了,该路由器先前产生的任何网络LSA将被删除。因为,路由器无法知道先前的路由器ID,因此,网络LSA中的链路状态ID将等于路由器某一接口的IP地址,宣告路由器等于某值而不等于当前路由器ID。17.3汇总LSA汇总LSA中的目的地可以是一个IP网络、ASBR路由器地址、IP地址范围。汇总LSA只在一个区域内洪泛,所洪泛的目的地是区域外的路由信息。汇总LSA由ABR产生,汇总的路由要通过检查路由表结构后通告给某个区域(具体方法见下文)。必须要强调的是只有区域内路由才能通告到骨干区域,而区域内和区域间的路由可以通告到其它区域。要决定哪些路由可以通告给区域A,要按以下方法检查路由表的路由条目。注意每个路由表条目描述了某目的地的等价费用的最佳路径:1)在汇总LSA中目的地类型只有网络地址和ASBR路由器地址。如果路由表条目的目的地类型是区域路由器,则检查下一条目;2)外部路由不能在汇总LSA中通告,如果路由表的路由类型为类型1或类型2的外部路由,则检查下一条路由;3)否则,本区域A所关联的路由不能产生汇总路由;4)否则,下一跳在本区域A内,也不能产生汇总路由;5)否则,路由费用大于等于LSInfinity,不能产生汇总路由;6)否则,如果路由的目的地是ASBR路由器,当且仅当该路由是到ASBR的优选路由时才能产生类型4的汇总LSA,其链路状态ID等于ASBR的路由器ID,费用等于路由表条目中的费用。注意,如果区域A是存根区域,这些LSAs不能产生;7)否则,目的地是一个网络地址,如果这是一个区域间路由,则产生一个类型为3的汇总LSA,链路状态ID等于网络地址,费用等于路由表中的费用。8)最后是区域内路由。一般情况下,要将区域内路由聚合后才能汇总为;类型为3的汇总LSA。一个区域要设置一个网络地址范围,每个范围用一个地址/掩码对和通告/不通告指示来描述。在大多数情况下,一个地址范围(被指示为通告)要产生一条类型为3的汇总LSA,链路状态ID等于该地址范围,费用等于该地址范围内费用最大的路由的费用。若该地址范围被设置为不通告,则不产生3型汇总LSA,以向其它区域隐藏该地址范围的路由。若某网络不是显式包含在地址范围内,则要为该网络地址产生一条类型3的汇总LSA,链路状态ID等于该网络地址,费用等于路由表中该路由的费用。如果区域A是一个传送区域(TransitCapbility被设置为1),关于骨干区域的路由信息不能被聚合后再汇总到传送区域A中,骨干区域内的网络地址要能够通告到传送区域,不允许被抑制通告。总之,当骨干区域的路由汇总到传送区域时,骨干区域所配置的地址范围无效。如果一个路由器为某目的地址通告了一个汇总LSA,该目的地址现在不可达,路由器必须要通过设置Age为MaxAge将该LSA从路由域中删除并洪泛之。同样,如果某目的地可达,但不需要通告该网络地址(如原先是区域内路由,现在是区域间路由,现在不需要通告到骨干区域),也要将其从路由域中删除。9)对于存根区域,其区域内的路由要聚合后才能汇总到骨干区域,这样,可以大大减少路由条目数。外部路由不能汇总到存根区域,通常将产生一条缺省路由,其链路状态ID被设置为DefaultDestination,费用设置为SubDefaultCost。17.4外部路由LSA外部LSA由ASBR产生,描述外部自治系统某路由的信息,该外部路由信息由其它路由协议产生,也可以是配置的外部路由。链路状态ID是外部网络地址,。外部路由的LSA可以在整个自治系统内洪泛,但不能在存根区域洪泛。外部LSA的费用有类型1和类型2的费用,类型1的费用自治系统内的费用可以和自治系统间的费用等同对待,总费用为两者之和。类型2的费用表示自治系统间的费用远远大于自治系统内的费用,总费用只需取自治系统间的费用。当外部路由不可达时,路由器必须通过设置Age为MaxAge,来删除该LSA,并洪泛之。外部LSA中涉及到转发地址,一般情况下,转发地址为0.0.0.0,表示到该外部网络地址,其转发地址为ASBR,否则,不需要通过ASBR,按指定的转发地址就能发送到该外部网络地址上。18路由表18.1路由表结构路由表中的路由条目包含着到某一目的地的最佳路径的所有信息。每条路由条目包括:1)目的地类型目的地类型有“网络”和“路由器”两种。只有“网络”类型的条目是用来转发IP包的,“路由器”类型的条目是用来建立路由的中间步骤。“网络”地址包括基本类地址、子网、超网和主机地址。“路由器”地址条目将保存ABR和ASBR路由器的地址,ABR路由器地址用来计算区域间路由和维护虚拟链路,ASBR用来计算外部路由。2)目的地址ID具体值取决于路由类型,“网络”类型是目的网络的IP地址,“路由器”类型则是路由器ID。3)地址掩码只为“网络”类地址设置。当网络地址和地址掩码组对时,可以完整地描述一个网络地址。4)选项兼容能力目的地址为“路由器”时,该字段将描述目的路由器处理外部路由的能力;5)区域这个字段表示了区域的链路状态信息产生了路由条目。它是路由条目所关联的区域。对于自治系统的外部路由,区域字段没有意义。对于“路由器”类型的目的地,存在一系列路径将关联着一系列区域;6)路径类型有4种路径类型:区域内(内部洪泛产生)、区域间(ABR汇总产生)、外部类型1、外部类型2(ASBR产生)。7)费用到达目的地的路径费用。除外部类型2的外部路由外,其它路径类型的费用描述了整个路径的费用总和,对于外部类型2的外部路由,该费用字段只是描述了本路径在自治系统内部的费用,它是整个路径在自治系统内部的费用总和。8)类型2的费用只有对类型2的外部路由有效。该字段描述了本路径在自治系统之间的费用。由ASBR通告,它是整个路径费用中的主要部分。9)链路状态源(区域内LSA的类型)只是对区域内的路径有效,该字段指示所关联的目的地的LSA(路由器LSA和网络LSA)。例如:当目的地是一个传送网络时,它是传送网络的网络LSA,当目的地是一个存根网络时,它是一个路由器LSA。当某目的地有多个LSA时,由链路状态源来打破僵局。该字段在OSPF中不用,但在MOSPF中使用。当一个目的地有多个路径,但其路径类型和费用都相等,他们将保存在一条路径条目中,其区别可以用下列字段区分:10)下一跳转发数据包到目的地时的下一跳IP地址。11)通告路由器只是对区域间和外部类型的路径有效。该字段指示了通告汇总LSA的ABR和通告外部LSA的ASBR的路由器ID。18.2路由表的查找路由表的查找应该采用最长匹配原则进行。对指定地址范围的汇总路由,当地址范围内的某个子网可达时,该指定地址范围的路由条目将被置为“discard”,当某报文的目的地址未能找到或落在该指定地址范围内,则该报文不能转发。19.链路状态数据库的年龄Age每一条LSA都有一个Age字段,用秒表示。保存在路由器链路状态数据库中的每一条LSA的Age要不断增加,同样,LSA在洪泛过程中在接口上发送时,也要增加InfTransDelay。LSA中的Age从来不能超过MaxAge,到达MaxAge的LSA不能用于路由表的计算。当路由器对数据库中的LSA中的Age计时时,若Age达到MaxAge,路由器要将其从路由域中删除,这可以通过将其Age设置为MaxAge,象一个新的LSA进行洪泛即可实现。在形成紧邻过程中,要产生DD汇总数据队列,链路状态数据库中的任一Age为MaxAge的LSA要加入到邻居链路状态重发队列中,而不是加到DD汇总数据队列中。当符合以下两个条件时,MaxAge的LSA将要从路由器的链路状态数据库中删除:a)在邻居链路状态重发队列中已经不存在;b)没有一个邻居路由器处于Exchange或Loading状态。19.1Age的过熟处理将Age设置为MaxAge的过程是Age的过熟。应用场合如下:1)本路由器产生的LSA序列号要环绕,此时,当前LSA实例的序列号达到MaxSequenceNumber,必须要对其过熟处理,将其从路由域中删除,然后才能产生序列号为InitialSequenceNumber的LSA实例;2)路由器先前所通告的一条外部路由不可达时,也要通过过熟处理,将该LSA从路由域中删除;3)当从其它路由器收到一个本路由器产生的LSA时,要对其作过熟处理。当符合以下某一条件时,该LSA可以看作为自己产生的:a)LSA的通告路由器ID等于本路由器ID;b)LSA是网络LSA,但其链路状态ID等于本路由器的一个接口IP地址;20虚拟链路虚拟链路用于与骨干区域无物理连接的某个区域连接到骨干区域上,虚拟链路的两端是ABR。虚拟链路在两路由器上必须配置,在每个路由器上的配置信息包括虚拟链路另一端的路由器和两路由器共有的非骨干区域(传送区域,存根区域不能配置为传送区域)。虚拟链路可以看成属于骨干区域的匿名点对点网络,该网络连接着两个区域的ABR。在虚拟链路上要建立紧邻关系。紧邻关系一旦建立,虚拟链路将作为路由器LSA包含在骨干区域中。这种紧邻关系称作为虚拟紧邻。在虚拟链路的每一端路由器上,通过检查路由表路由条目中另一端的路由器,可以发现链路的费用和有效性(注意:路由条目的区域必须是所配置的传送区域)。当路由条目中相应的虚拟链路可到达时,要对虚拟链路接口产生一个InterfaceUp事件;当路由条目中相应的虚拟链路不可到达时,要对虚拟链路接口产生一个InterfaceDown事件。也就是说,虚拟链路的有效性,要由传送区域内的路由情况决定。虚拟链路的其它特性如下:1)外部路由的LSA决不能在虚拟链路上洪泛,因为,该LSA已经通过传送区域洪泛了,若在虚拟链路上洪泛,则将造成重复;由于同样原因,在虚拟紧邻DD报文交换过程中,外部路由的LSA不需要汇总到虚拟链路的DD汇总队列中;2)虚拟链路的费用不需配置,通过传送区域的域内路由计算可以计算出虚拟链路两端路由器的费用。当虚拟链路的费用发生变化时,骨干区域将会产生一条新的路由器LSA;3)类似与虚拟链路的费用和有效性由路由表决定一样,虚拟链路的虚拟接口IP地址和虚拟邻居的IP地址也要由路由表决定。这两个地址在虚拟链路上发送OSPF报文时需要。要注意的是当虚拟链路的一端或两端通过匿名点对点网络连接到传送区域时,无法计算虚拟接口和/或虚拟邻居的IP地址,它们将导致虚拟链路的失效;4)在虚拟链路的每一端,该虚拟链路在路由器LSA中作为链路类型4、链路ID为虚拟邻居的OSPF路由器ID、链路数据为虚拟接口的IP地址;5)对非骨干区域,当且仅当它作为虚拟链路传送区域时才能传送数据。当骨干区域的汇总LSA导入到该传送区域和计算路由时,需要作特殊处理;6)在虚拟链路上的链路状态重发时间需要设置一个合适的值。21.路由计算按以下步骤从链路状态数据库计算路由表:1)当前路由表设置为无效,整个路由表要重新计算。保存先前的路由表是为了识别路由表是否发生变化了;2)通过为所连的每个区域建立最短路径树计算区域内路由。在特殊情况下,本步骤完成后,所有路由条目的目的地类型为ABR路由器类型。本步骤分为2部分,首先用路由器和传送网络之间的链路构造路径树,然后将存根网络添加到该树上。在计算最短路径时,要计算区域的TransitCapbility;3)通过检查汇总LSA,计算区域间路由。如果路由器连接着多个区域,只需检查骨干区域的汇总LSA;4)在连接一个或多个传送区域的ABR上(即非骨干区域的TransitCapbility为TRUE),传送区域的汇总LSA要加以检查,验证该传送区域是否有更好的路径;5)通过检查外部LSA,计算外部路由。在步骤2)到步骤5)中,要注意以下问题:计算后路由条目发生变化,OSPF协议要采取进一步动作,如区域内路由发生变化,ABR要产生性的汇总LSA。21.1计算区域的最短路径树本计算将产生区域内路由。本路由器作为最短路径树的根,最短路径树的信息由两部分构成:第一部分是路由器和传送网络之间的链路,采用Dijikstra算法计算。另一部分将存根网络的链路作为叶加到该树上。该树由路由器、传送网络、存根网络构成的有向图。第一步仅仅涉及传送网络(路由器和传送网络)的链路所构成的有向图。在最短路径计算中,要用到以下数据:1)节点ID对路由器节点是路由器ID,对网络节点是DR所连的网络IP地址;2)一条LSA每个传送网络,都有一个LSA。对路由器节点,这是一个路由器LSA。对传送网络,这是一条网络LSA(实际由网络上的DR产生)。两种情况,LSA中的链路状态ID就是节点ID。3)下一跳列表该列表描述当前从树的根到节点间的最短路径,每个下一跳和本路由器的发送接口关联着。4)距离从树跟到节点的路径总费用。Dijkstra算法的第一部分步骤如下:1)对算法中的数据结构初始化,清除侯选节点列表。初始花最短路径树只有根(本路由器),设置区域的TransitCapbility为FALSE;2)在树节点V上添加节点。这要用节点V的ID从区域的链路状态数据库中查找符合条件的LSA,如果是路由器LSA且V比特被设置为1,则将本区域的TransitCapbility设置为TRUE。在任一情况下,由LSA所描述的链路状态给出其紧邻节点的费用。对每条链路(将节点V连接到节点W上):a)这是一个存根网络,本步骤不予考虑(在第2步骤中考虑),检查V的LSA的下一链路;b)否则,W是一个传送节点(路由器或传送网络)。检查节点W的LSA(本区域的路由器LSA和网络LSA)。如果LSA不存在或者LSA的Age达到MaxAge,则它不能连接到V上;c)如果W在最短树中已经存在,则检查下一条LSA;d)计算从树根到节点W的费用D,它是已经计算好的从树根到节点V的费用和所通告的节点V到节点D间的链路费用的和:如果费用大于已经存在的节点W的费用,则检查下一链路;IPHeader(Protocol=89)OSPFPacketHeaderPacketType-SpecificDataOSPFPacketLSALSALSALSALSALSAHeaderLSADataOSPFPacketDataPointtoPointWaitingDownBackupDRDRotherLoopbackDR/BDRElectionIE2IE1IE1IE2IE5IE6IE8IE10IE3IE3IE3IE4IE2IE2IE2IE7IE10IE10IE9IE3IE3IE3DownAttemptExchangeLoadingFull2-WayExStartInitDP1DP2IE1IE2IE2IE8IE7IE6IE5IE4IE11IE11IE10IE9IE4ExchangeIE3AttemptDownLoading2-WayFullInitExstartIE3IE3IE3IE3IE3IE3IE4IE1IE2IE2IE13IE6IE10IE9IE8DP3IE4IE5IE7IE13DP3IE13DP3DP2DP1InitExStart2-WayFullLoadingExchangeIE11IE11DP3IE16IE16IE16IE16IE15IE15IE15IE15IE14IE14IE14IE14IE12IE12IE12IE13IE13RT1RT2DownDownHello(DR=RT2,NeighborsSeen=RT1)Hello(DR=0.0.0.0,NeighborsSeen=0)InitExstartDD(Seq=x,I=1,M=1,MS=1)ExstartDD(Seq=y,I=1,M=1,MS=1)DD(Seq=y,I=0,M=1,MS=0)Exchange(Slave)Exchange(Master)DD(Seq=y+1,I=0,M=1,MS=1)DD(Seq=y+1,I=0,M=1,MS=0)…….…….……DD(Seq=y+n,I=0,M=0,MS=1)DD(Seq=y+n,I=0,M=0,MS=0)LoadingLSRequestLSUpdateLSRequestLSUpdateFullFull
本文档为【OSPF协议概述】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
金水文库
鑫淼网络科技有限公司主要经营:PPT设计 、课件制作,软文策划、合同简历设计、计划书策划案、各类模板等。公司秉着用户至上的原则服务好每一位客户
格式:doc
大小:239KB
软件:Word
页数:0
分类:
上传时间:2020-04-14
浏览量:1