1、OSPF内容概要 1.概述 OSPF是一个内部网关协议,用于在单一自治系统内决策路由。它是基于链路状态的路由协议,链路状态是指路由器接口或链路的参数。这些参数是接口的物理条件:涉及接口是Up还是Down、接口的IP地址、分派给接口的子网掩码、接口所连的网络,以及使用路由器的网络连接的相关费用。OSPF与其他路由器互换互换信息,但所互换的不是路由,而是链路状态。OSPF路由器不是告知其他路由器可以到达哪些网络及距离是多少,而是告知它的网络链路状态,这些接口所连的网络及使用这些接口的费用。各个路由器都有其自身的链路状态,称为本地链路状态,这些本地链路状态在OSPF路由域内传播,直到所有的OSP
2、F路由器都有完整而等同的链路状态数据库为止。一旦每个路由器都接受到所有的链路状态,每个路由器可以构造一棵树,以它自己为根,而分支表达成AS 中所有网络的最短的或费用最低的路由。 OSPF对于规模巨大的网络,通常将网络划提成多个OSPF区域,并只规定路由器与同一区域的路由器互换链路状态,而在区域边界路由器上互换区域内的汇总链路状态,这样可以减少传播的信息量,且使最短途径计算强度减少。在区域划分时,必须要有一个骨干区域(即区域0),其它非0或非骨干区域与骨干区域必须要有物理或者逻辑连接。当有物理连接时,必须有一个路由器,它的一个接口在骨干区,而另一个接口在非骨干区。当非骨干区不也许与物理连接到骨
3、干区时,必须定义一个逻辑的或虚拟链路,虚拟链路由两个端点和一个传输区来定义,其中一个端点是路由器接口,是骨干区域的一部分,另一端点也是一个路由器接口,但在与骨干区没有物理连接的非骨干区域中。传输区是一个区域,介于骨干区域与非骨干区域之间。 2.术语 在OSPF中,经常要使用以下术语: Router ID(路由器ID):用于标记每个路由器的32位数。通常,将最高的IP地址分派给路由器ID。假如在路由器上使用了回送接口,则路由器ID是回送接口的最高IP地址,不管物理接口的IP地址。 Interface (接口):路由器和具有唯一IP地址和子网掩码的网络之间的连接。 Neighbor
4、Router(相邻路由器):带有到公共网络的接口的路由器。 Broadcast NetWork(广播网络):支持广播的网络。Ethernet是一个广播网络。 NonBroadcast NetWork(广播网络):支持多于两个连接路由器,但没有广播能力的网络,如帧中继和X.25等网络。在非广播网络中,有非广播多点访问网络NBMA(在同一个网络上,但不能通过广播访问到)和点到多点网络。 Designated Routeer (指定路由器DR):在广播和NBMA网络中,指定路由器用于向公共网络传播链路状态信息。 Backup Designated Routeer (后援指定路由器DR):在D
5、R故障时,接替DR的路由器。 Area Border Router(区域边界路由器ABR):连接多个OSPF区域的路由器。 Autonomous System Border Router(自治系统边界路由器ASBR):一个OSPF路由器,但它连接到另一个AS,或者在同一个AS的网络区域中,但运营不同于OSPF的IGP。 Adjacency(紧邻):紧邻可以在点对点连接的两个路由器之间形成,也可在广播或NBMA网络的DR和非指定路由器之间形成,还可以在BDR和非指定路由器之间形成。OSPF路由状态信息只能通过紧邻被传送和接受。 Flooding(洪泛):在OSPF区域内,扩散某一链路状态
6、以分布和同步路由器之间的链路状态数据库。 Link-State Advertisement(链路状态宣告LSA):描述路由器的本地链路状态,通过该通告向整个OSPF区域扩散。 External Routing(外部路由):从另一个AS 或另一个路由协议得知的路由可以作为外部路由放到OSPF中。有两种类型的外部路由,类型1的外部路由具有的费用包含OSPF的费用,加上从ASBR到网络的费用。类型2的外部路由具有的费用仅是ASBR到网络的费用,而内部的OSPF费用可以忽略不计。 Intraarea Routing(区域内路由):在相同OSPF区域的网络之间的路由,这些路由仅依据从区域内所接受
7、的信息。 Interarea Routing(区域间路由):在两个不同的OSPF区域之间的路由。区域间的途径由三部分组成:从区域到源区域的ABR的区域内途径,从源ABR到目的ABR的骨干途径,最后是从目的ABR到目的区域的途径。 Route Summarization(路由汇总):要通告的路由也许有一个区域内的路由、来自另一个AS的路由,以及从另一个路由协议得知的路由,所有这些路由可以由OSPF汇总成一个路由宣告。汇总仅可以在ABR或ASBR上发生。 Stub Area(存根区):只有一个出口途径的区域。 3.协议包格式 IP Header ( Protocol = 89)
8、 OSPF Packet Header Packet Type- Specific Data OSPF Packet LSA LSA LSA LSA LSA LSA Header LSA Data OSPF Packet Data OSPF包共有5种包类型,任意一种包都需要加上OSPF的报文头,最后封装在IP中传送,一个OSPF包的最大长度为1500字节。其结构如下: OSPF协议一共使用5种类型的路由协议包: 包类型 作用 1:呼喊 发现和维护邻居 2:数据库描述
9、 紧邻间同步数据库内容 3:链路状态请求 规定从邻居获取LSA 4:链路状态更新 向邻居通告LSA 5:链路状态确认 对所通告的LSA给出确认消息 无论何种类型的OSPF包都有以下一个公共的报文头: 版本号 包类型 包长度 路由器ID 区域ID 校验和 认证类型 身份验证 身份验证 版本号:目前版本号为2。不同版本号不能会话。 包类型:包类型的标志,为5种包类型中的某种。 包长度:以字节计算,涉及OSPF包加上首部头的长度。 路由器ID:产生OSPF传输包的路由器的标记,一般就是路由器的最高IP地址。 区域ID:分派给路由器传输接口
10、的区域的32位指示器。假如包通过虚拟链路来发送,那么区域ID为骨干区域ID(ID = 0),由于虚拟链路是骨干区域的一部分。 校验和:整个OSPF报文涉及OSPF头的校验和,使用补运算进行计算。 认证类型(AuType):身份验证的方法,其后64位域包含使用的证明类型所规定的数据。AuType = 0表达无认证,AuType = 1表达简朴的口令认证,AuType = 2表达MD5安全认证。 3.1 Hello包格式 Hello呼喊报文用于发现路由器所连网络上的邻居。通过周期性地发出呼喊包,呼喊协议可用于拟定邻居路由器接口是否仍然处在活动状态。在广播网络和NBMA网络,呼喊协议可以
11、用于选取指定路由器。呼喊包被发送到Multicast多播地址AllSPFRouters(224.0.0.5)。在播发期间,有些协议包也将发送到该地址。指定或后援指定路由器发送并接受到Multicast多播地址是AllDRRouters(224.0.0.6)。 Hello报文是包类型为1的OSPF包,封装在OSPF报文头后面,其格式如下: 版本号 = 2 包类型 = 1 包长度 路由器ID 区域ID 校验和 认证类型 身份验证 身份验证 网络掩码 HelloInterval 选项 路由器优先级 RouterDeadInterval 指定路由器 后援指定路由器
12、邻居路由器 …… 邻居路由器 网络掩码:发送呼喊报文的接口的子网掩码。假如这一掩码和呼喊报文接受接口的子网掩码不匹配,则该呼喊报文不能被接受。这样可以保证共享同一网络的路由器才干成为邻居关系。 HelloInterval:在接口上发送呼喊报文的时间间隔,以秒为单位。假如两路由器不具有相同的呼喊周期,则不能成为邻居关系。 选项:包含5个分派位,在RFC2178中对E位已经做了说明,它拟定如何传播外部链路状态宣告。在存根区,Hello报文要将该位设立为0,不能接受设立为1的Hello报文。使邻居具有兼容性。因兼容性问题,路由器可以放弃邻居关系。 路由器优先级:该选项影响指定路由器D
13、R的选取。值0表达该路由器不能被选为DR。假如是其它值,则具有最高优先级的路由器将成为DR。缺省值为1,假如所有路由器都使用该缺省值年,则具有最高IP地址的路由器将被选为DR。 RouterDeadInterval:该参数(以秒为单位)用于拟定邻居是否还处在活动状态。假如在由RouterDeadInterval指定的秒数内没有从已建立的邻居处收到呼喊报文,那么,邻居被宣布为故障状态。假如Hello报文中的RouterDeadInterval与接受端口所设立的RouterDeadInterval值不相同,则丢弃该报文,保证两邻居路由器具有相同的参数。 指定路由器(后援指定路由器):广播网络或
14、NBMA网络上DR(BDR)接口的IP地址。在DR(BDR)的选举过程中,这个值也许是关于DR(BDR)的起源路由器的设想,而不是最终的DR(BDR)。假如由于DR(BDR)没有选举出来或者由于是对等网络,不存在DR(BDR)该值应当取值为0.0.0.0。 邻居路由器:路由器在这个网络上所拥有的邻居路由器的列表,用路由器ID表达。假如在由RouterDeadInterval指定的时间内未能从某个邻居接受到Hello呼喊包,那么,这个邻居应当从此列表中除去。 3.2 数据库描述包 数据库描述包(Database Description packet,DD)是2型OSPF包。在形
15、成紧邻过程中的路由器之间互换数据库描述包,且由它来描述链路状态数据库,达成邻居路由器间链路状态数据库的完全同步。根据接口数和网络数,也许需要不止一个数据库描述包,来传输整个链路状态数据库。在互换过程中,所涉及到的路由器要建立主从关系。主路由器发送本路由器的数据库描述包,而从路由器通过使用主路由器发送来的数据库描述序列号认可所接受到的数据库描述包,并将本路由器的LSA头部列表发送给主路由器,从而在主从路由器间判断链路状态数据库是否完全匹配,若有不匹配的LSA头部,则应发送链路状态请求报文,并以更新报文格式给予响应,获得最新LSA的所有信息。 数据库描述包要封装在类型为2的OSPF报文头后面,其
16、具体格式如下: 版本号 = 2 包类型 = 2 包长度 路由器ID 区域ID 校验和 认证类型 身份验证 身份验证 接口MTU 选项 00000 I M MS 数据库描述序列号 LSA首部 …… LSA首部 接口MTU:指示通过该接口可发送的最大IP包长度。当通过虚拟链路发送时,这个域设立为0。 选项:显示路由器的能力,使路由器不向没有能力的邻居发送LSAs。 I位:是Init位,要发送数据库序列中的第一个包,应设立为1。随后的包要设立为0。 M位:若设立为1,则表达序列中尚有更多的数据库描述包将要发送出去。若置为0,则表达数据库描述包已发送
17、完毕。 MS位:主从位,在数据库描述包互换期间,1表达路由器是主路由器,而0表达路由器是从路由器。 数据库描述序列号:用于数据库的同步解决,保证所有的数据库描述包所有被接受到。主路由器在发送第一个数据描述包时,应将数据库描述序列号设立为一个独特的初始值,随后序列号逐渐递增。 LSA首部:这是一个LSA首部列表,由本路由器的链路状态数据库的LSAs的头部组成这个LSA首部列表。这些头部有足够的信息来描述LSA和LSA 的实例。 3.3 链路状态请求包 链路状态请求包是3型OSPF包。当两个路由器互换数据描述包的过程完毕后,路由器可检测链路状态数据库部分是否有不一致或过时的L
18、SA。此时,路由器可向邻居请求新一些的数据库描述包,以达成LSAs的完全同步。其格式为: 版本号 = 2 包类型 = 3 包长度 路由器ID 区域ID 校验和 认证类型 身份验证 身份验证 LS类型 链路状态ID 宣告路由器 …… LS类型 链路状态ID 宣告路由器 LS类型:链路状态类型,有路由器LSA、网络LSA、汇总LSA、汇总LSA(ASBR)、AS-external LSA等5种类型的LSA,分别取值1~5。 链路状态ID:取值取决于LS类型,具体的取值见LSA首部定义。 宣告路由器:产生LSA的路由器ID。 3.4 链路状态更新包
19、 链路状态更新包是4型的OSPF包,用于实现LSA的洪泛,也用于对链路状态请求包的响应。每个链路状态更新包包含一个或多个LSA ,而所发送的每个更新包要通过链路状态认可包来确认认可,未收到确认包,应对所发送的LSA定期重发,以保证洪泛过程的可靠性。具体格式如下: 版本号 = 2 包类型 = 4 包长度 路由器ID 区域ID 校验和 认证类型 身份验证 身份验证 LSA的个数 LSAs LSA的个数:定义整个更新包中包含多少个LSA,直到OSPF包总长度达成1500字节。 LSAs:由一系列LSA 组成一个列表。 3.5 链路状态确认包
20、链路状态确认包是5型OSPF包,该包可以保证LSA洪泛的可靠性。路由器从紧邻接受到LSA后,必须要用链路状态确认包给予明确的确认应答。LSA的确认是通过链路状态确认包中的LSA首部实现的。一个确认包可以同时对多个LSA进行确认。这些包发送到以下三个地址之一:多点传送地址AllDRouters、多点传送地址AllDSPFRouters、单点传送地址。具体格式如下: 版本号 = 2 包类型 = 5 包长度 路由器ID 区域ID 校验和 认证类型 身份验证 身份验证 LSAs的首部 LSAs的首部:由一系列LSA的首部组成一个列表。 4.链路状态LSA格式 路由器可
21、生成的链路状态信息有以下5种类型: 类型1:路由器LSA,拟定路由器的互连方式。由每个路由器产生,用来描述路由器的链路或接口的状态及费用。该LSA只能在本区域内洪泛; 类型2:网络LSA,拟定网络的互连方式。由DR产生,用于描述DR所连的多点访问网络和所连的路由器(涉及DR自己),也在本区域内洪泛; 类型3:ABR汇总LSA,用于传输已经被集成为单一网络信息的网络。由ABR路由器产生,将某区域上的汇总目的地址通告给另一个区域。事实上,ABR通过这些LSAs将自己所能到达的目的地(要汇总)通告给所连区域的各个区域内路由器Internal Routers;ABR也要将所连区域的目的地通告给骨
22、干区域。当ABR产生汇总LSA时,同时要通告从ABR自己到目的地的费用,当ABR到目的地有多条路由时,应取费用最低的路由。同样,当ABR收到从另一ABR发来的同一条汇总LSA 时,也要取费用低的LSA,将其通告给非骨干区;当路由器从ABR收到一条汇总LSA时,用简朴的距离——矢量法而不用SPF来计算本路由器到目的地的费用和路由:总费用涉及本路由器到ABR的费用和LSA中所指明的费用。在ABR上,将某区域的有关目的网络通告给骨干区时,要对目的网络进行路由聚合,将一系列子网聚合成一个超网后,通告给骨干网络。聚合时,其超网的费用为子网中的最大费用。 类型4:ASBR汇总LSA,用于传输已经被集成为
23、单一网络信息的网络。也由ABR产生,与类型为3的汇总LSA 相似,但本LSA是ABR将ASBR路由器主机为目的地的一个链路信息,描述本ABR到达ASBR的费用; 类型5:外部路由信息 AS-external-LSA,由其它协议传入的外部路由信息。由ASBR产生,将外部系统的路由信息在本系统的所有OSPF域内洪泛; 每个LSA包都有一个由20个字节组成的首部,该首部用于封装LSA包。一般许多LSA在一个OSPF报文中被路由器互换,而LSA首部的功能唯一地标记每个LSA包。同时LSA首部还用于数据描述OSPF报文和链路状态确认OSPF报文中。其格式如下: 链路状态时间 选项
24、链路状态类型 链路状态ID 宣告路由器ID 链路状态序列号 和校验 长度 在该首部中,选项、链路状态类型、链路状态ID、宣告路由器ID等字段描述LSA包的特性,而链路状态时间、链路状态序列号拟定该LSA是否是最新的。 链路状态时间:生成LSA 的路由器将LS时域初始化为0,在洪泛过程中,每通过一个路由器,要按InfTransDelay的量增长,这个量表达传输LSA到下一个跳跃所需要的时间。当该时间达成所设定的MaxAge参数时,要撤消该LSA。 选项:指示路由器的能力。目前使用的唯一一位是E位(外部指示),对存根区域,它是0,对所有其它所有区域,它是1。 链路状态
25、类型:描述LSA包的类型,取值为1~5。 链路状态ID:取决于LSA包类型,具体取值如下: LS类型 链路状态ID值 1 生成LSA 的路由器ID 2 这个网络的DR的IP接口地址 3 ABR要通告的某区域内某一目的网络的IP地址 4 ABR要通告的某一ASBR的路由器ID 5 ASBR要通告的某一外部自治系统某一目的网络的IP地址 宣告路由器ID:产生LSA的路由器ID。 链路状态序列号:用于辨认LSA 包是否是一个最新包。路由器每生成一个新的LSA 时,将该序列号加1。 和校验:检测LSA 包的对的性。 长度:LSA 涉及其首部的长度。
26、 LSA头中的链路类型、链路状态ID和宣告路由器ID是一个LSA的唯一标志。一个LSA将有多个实例,不同的实例通过LS的序列号、LS的校验和及LS的Age 字段来描述。因此,必须要决定其实例是否是最近的,这要通过检查LS的序列号、LS的校验和及LS的Age 字段内容。 4.1 路由器链路状态宣告 链路状态类型为1 的LSA包是一种路由器链路状态宣告包,其链路状态ID就是路由器的OSPF ID。路由器为每个有活动OSPF接口的区域生成一个路由器LSA。包含在路由器LSA中的信息是路由器接口在该区域的状态和费用,该LSA仅在本区域内传播。进入一个区域的所有路由器接口必须在一个路由器LSA中
27、说明。在路由器LSA中,将通告路由器的各条链路或接口的状态和费用。链路状态ID就是产生该LSA的路由器ID。路由器LSA的具体格式如下: 链路状态时间 选项 链路状态类型 = 1 链路状态ID 宣告路由器ID 链路状态序列号 和校验 长度 0 0 0 0 0 V E B 0 链路个数 链路ID 链路数据 链路类型 #TOS 费用度量 TOS 0 TOS度量值 ……. 链路ID 链路数据 链路类型 #TOS 费用度量 TOS 0 TOS度量值 VEB:用于拟定路由器也许有的链路的类型。V位显示路由器是虚拟链路的端点。假如路由器是A
28、SBR,那么将设立E位;假如路由器是ABR,那么将设立B位。 链路个数:可以同时携带若干个链路信息。每个链路涉及链路ID、链路数据、链路类型、#TOS、费用度量、TOS、TOS度量值等信息,用于描述路由器某接口的链路信息。 链路类型:有4种链路类型。链路类型将决定其它字段的取值。 类型1:对等连接到另一个路由器 类型2:到多点访问网络的传输网的连接 类型3:到存根网的连接,某主机地址也可认为是一个特殊的存根网络,网络号即为主机地址,掩码为225.225.225.225。 类型4:虚拟连接 链路ID:链路ID描述路由器接口或链路所连接的对象。链路ID一般等于邻居路由
29、器LSA头中的链路状态ID。取值及含义要取决于具体的链路类型。 对链路类型1,为邻居路由器的ID。 对链路类型2,为DR接口的IP地址。 对链路类型3,为IP网络/子网号。 对链路类型4,为邻居路由器的ID。 链路数据:链路数据也将取决于具体的链路类型。假如路由器与存根网络相连,那么取值为这个网络的IP地址掩码。对其他类型的链路,则是路由器分派给该链路接口的IP地址。链路数据在生成IP路由表产生下一跳时要用。 #TOS:链路服务类型号。在2328中,该TOS已不再使用。 费用度量:链路的费用度量。 TOS和TOS度量:IP的服务类型与服务度量值。 4.2 网络链路状态宣告
30、 链路状态类型为2的LSA 包是网络链路状态宣告,该LSA由DR产生和创建。一个网络LSA将通告该路由器上某一多点访问网络和所连接的路由器信息,该LSA也只能在本区域内扩散。链路状态ID标记DR到这个区域或网络的接口IP地址,费用度量不再需要,由于路由器直接连接到网络上,费用必为0。具体格式如下: 链路状态时间 选项 链路状态类型 = 2 链路状态ID 宣告路由器ID 链路状态序列号 和校验 长度 网络掩码 连接的路由器ID 连接的路由器ID …… 连接的路由器ID 网络掩码:标记该多点访问网络的网络掩码。
31、 连接的路由器:标记连接到该网络并且与DR成紧邻关系的路由器ID,涉及DR自身路由器ID。所连紧邻路由器的数目可由LSA头中的长度决定。 4.3 网络和ASBR汇总链路状态通告 链路状态类型为3或4的LSA是网络和ASBR汇总链路状态宣告,两者都由区域边界路由器ABR生成,实现区域间目的链路的描述,它只能在同一个区域内洪泛。3型汇总LSA有IP地址目的,链路状态ID就是目的IP网络号,以描述ABR到该目的网络的费用,供其它区域的路由器计算到该汇总网络的费用(总费用应为:本路由器 ---- ABR ---- 汇总的网络地址)。4型汇总LSA以一个自治系统边界路由器ASBR为其目的,
32、而链路状态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的服务类型和度量值
33、LSA 的具体格式如下: 链路状态时间 选项 链路状态类型 = 3或4 链路状态ID 宣告路由器ID 链路状态序列号 和校验 长度 网络掩码 0 费用度量值 TOS TOS度量值 4.4 外部链路状态AS-external LSA通告 5型LSA是AS-external LSA,由ASBR产生,它被用于说明自治系统以外的网络或路由,在整个自治系统(非存根区除外)内不加改变地洪泛,与路由器的链路状态数据库相独立地保存。链路状态ID域为目的网络的IP网络号,网络掩码
34、为目的网络的掩码。在As-external LSA中可以通告一条缺省路由,这时,链路状态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这
35、个中间一跳。在该LSA中,由产生该LSA的ASBR路由器负责对该外部路由做上标志tag,以便在ASBR间传送此外的附加信息。具体格式如下: 链路状态时间 选项 链路状态类型 = 5 链路状态ID 宣告路由器ID 链路状态序列号 和校验 长度 网络掩码 E 0000000 费用度量值 转发地址 外部路由标志 E TOS TOS度量值 转发地址 外部
36、路由标志 …… 5.链路状态数据库 对路由器有活动接口的所有区域,路由器将维护每个区域各自的链路状态数据。在一个区域有接口的每个路由器,都有一个该区域同等的链路状态数据库。对每个区域的最短途径树的计算,分别由每个路由器以自己为树根进行。一个区域的链路状态数据库中的路由器LSA 和网络LSA仅通过该区域传播。这个区域的链路状态数据库由路由器LSA、网络LSA及3型、4型汇总LSA(汇总LSA包含在区域数据结构中)组成。假如这个区域不是存根区,数据库还将涉及外部路由信息 AS-external LSA。在数据库的查找过程中,
37、是通过链路类型、链路状态ID和宣告路由器ID这3个特性值来查找的。当在传播过程中,路由器接受到一个LSA时,或路由器初始化LSA时,路由器将LSA增长到数据库中。当路由器接受到一个较新的LSA时,路由器生成一个新LSA时,或者LSA过于陈旧时,路由器将把LSA从数据库中删除。从路由器的数据库中删除任何LSA,也将从每个邻居的再传输列表中删除。 每个区域都有一份相同的LSA,由LSA可以计算 每个路由器将首创一个路由器LSA。假如路由器是DR,则路由器将为它是DR 的网络生成一个网络LSA。ABR路由器将为区域间路由生成汇总LSA,而ASBR路由器将为外部路由生成AS-ex
38、ternal LSA。以下10个事件将触发产生新的LSA: 1) 当路由器首创的LSA的时限域到达值LSRefreshTime; 2) 路由器接口的状态发生改变。路由器ID是分派给路由器的最高IP地址,或分派给路由器的最高回送IP地址。假如具有最高IP地址的接口失败,那么路由器ID必须改变。 3) 网络的DR变化。 4) 邻居路由器变化为完全状态或不完全状态。 5) 区域内路由被增长、删除或修改。 6) 区域间路由被增长、删除或修改。 7) 路由器使一个接口在某区域内成为活动的。 8) 路由器的虚拟链路变化。 9) 外部路由变化。 10) ASBR的路由器不再是ASBR。
39、 路由器将接受到的LSA保存在链路状态数据库中成为LSAs,由LSAs计算本路由器到各目的地的最短途径。每条LSA都有寿命Age,当达成MaxAge时,将从数据库中清除。因此,产生LSA的路由器每隔LSRefreshTime要对该LSA重新产生一个实例,并重新进行洪泛。为提高效率,某条LSA在刷新时并不立即洪泛,而是等待一个同步时间,将需要重新洪泛的LSA一并洪泛。 6.指定路由器的选取 在广播型网络上,需要选取DR和BDR。DR具有如下两个职责: 1) 代表该广播网络和网络上的其余路由器,由其发布该网络LSA; 2) 管理该网络上的扩散过程,网络上的所有路由器只有和DR之间有紧邻
40、关系,在这种紧邻关系上实现LSA的洪泛,各路由器之间不能直接交互LSA; DR的选取是被接口的状态机所驱动(在接口状态迁移图中描述)。一般来说,一个路由器接口被激活后,要检查该接口网络是否已经存在DR,假如已经存在DR,则不管本路由器的优先权有多大,也要接受原先所拟定的DR,这样可以避免太多的变化,若还不存在DR,则假如本路由器在该网络具有最高优先权的话,它将成为DR。 DR被选取后,该网络可抽象为以DR为中心的一点对多点的网络拓扑,只有在DR和其他路由器之间建立紧邻关系,发送LSA报文。必须要注意,一个路由器在某一网络接口上是DR,但在另一网络接口上也许不是DR,因此,DR是一个接口特性
41、并不是一个完整路由器。为保证系统的稳定可靠,除DR外,还要选取一个BDR,并在BDR与其他路由器之间也要建立紧邻关系,一旦DR失效,BDR立即替代DR,描述本网络及所有路由器的链路状态。 起始时,DR和BDR均设立为0.0.0.0,表达DR和BDR没有被选取。路由器将在与自己具有双向邻居关系的邻居列表(要将本路由器当作是邻居列表中的一个邻居路由器,作为DR、BDR的侯选者)中,检查由Hello报文所宣告的各邻居路由器的优先级、DR、BDR来选取新的DR和BDR。在选取过程中,要排除任何优先级为0的邻居路由器,说明这样的路由器不符合成为DR或BDR的条件。然后,从符合条件的邻居路由器(具有非
42、0优先级、和本路由器具有双向邻居关系)中运营如下算法: 1) 记录当前的DR和BDR,以在算法中进行比较; 2) 计算选取新的BDR; 只有那些没有被Hello报文宣告为DR的路由器才有也许成为BDR。 假如有一个或多个路由器被Hello报文宣告为BDR但又不是DR,则从这些被宣告为BDR的路由器中选择具有最高优先级的路由器作为BDR,在选取过程中,假如有相等优先级的路由器,那么,从中选择一个具有最大路由器ID的路由器作为BDR。 假如没有一个路由器被宣告为BDR,则从所有的邻居路由器中(被宣告为DR的路由器仍然除外)选择具有最高优先级的路由器作为BDR,在选
43、取过程中,假如有相等优先级的路由器,那么,也要从中选择一个具有最大路由器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) 按照计算结果,本
44、路由器有也许成为DR或BDR,若这样,它将承担相应的职责,并设立相应的接口状态。假如本路由器成为DR,则接口状态为DR;如本路由器成为BDR,则接口状态为BDR;对其它情况,则接口状态为DROther。 6) 假如是NBMA网络,并且本路由器成为DR或BDR,则必须开始发送Hello报文给不符合成为DR条件的邻居路由器。 7) 假如以上计算导致DR或BDR发生改变,则这个接口上的紧邻关系也需要加以更改。一些紧邻关系需要形成,另一些紧邻关系需要解除。为此,为所有邻居状态在2-Way以上的邻居产生一个AdjOk? 事件,这样,可以触发对紧邻关系合法性的检查。 DR、BDR的选取之所以
45、这么复杂,重要是为在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
46、将建立紧邻关系。但各路由器的Hello报文仍然采用多播地址AllSPFRouters(224.0.0.5)发送,以跟踪邻居关系。其他路由器DROthers发送更新报文时应以多播地址AllDRRouters(224.0.0.6)发送,只有DR和BDR监听并接受该地址的报文,而DR发送更新报文时应以多播地址AllSPFRouters(224.0.0.5)发送,使所有其他路由器DROthers都能接受到,而不是向每个紧邻单独发送更新报文,这样可以提高效率。 7.OSPF接口 7.1 OSPF接口数据 OSPF协议重要关心链路和链路状态。在发送Hello报文、形成紧邻关系、发送LSA通告之
47、前,必须要了解自身的接口状态及参数。OSPF路由器用自身的接口数据来构造Hello报文,通过发送Hello报文,将本接口的信息发送给邻居。的接口状态重要涉及以下参数: IP Address and Mask:接口的IP地址及掩码,从该接口上发送OSPF报文时应将它作为IP的源地址。 Area ID:接口及所连网络所属的OSPF区域ID。从该接口发送OSPF报文的区域ID。 Router ID:作为宣告OSPF报文的路由器ID。 Network Type:接口所连网络的网络类型,有点对点、广播、NBMA、一点对多点、虚拟链路等网络。 Cost:从本接口发送报文的费用,影响LSA中的m
48、etric。 InfTransDelay:LSA通告离开该接口的延时时间,每个LSA离开该接口时,要在其寿命域加上该时间。 State:接口所处的状态,是有限状态机中的某一状态。 Router Priority:路由器在该接口上的优先级。在多点访问网络上将影响到DR、BDR的选取。 Designated Router:在多点访问网络上,需要选取一个DR来描述该网络的状态。一个DR需要用其路由器ID和该路由器在该接口的IP地址表达。DR和该网络上的其它路由器构成紧邻关系,DR用网络LSA来通告该网络的状态,在网络LSA 中将标记该DR的接口IP地址作为链路状态ID。 Backup De
49、signated Router:在多点访问网络上,需要选取一个BDR,作为备用DR来描述该网络的状态。一个BDR需要用其路由器ID和该路由器在该接口的IP地址表达。BDR与该网络上的其他路由器构成紧邻关系。 HelloInterval:在该接口上发送Hello报文的时间间隔。 RouterDeadInterval:在该时间间隔内应当从该接口接受到由邻居发来的Hello报文,若在此时间内,未从邻居收到Hello报文,则可认为邻居已处在非活动状态。 Wait Timer:在选取DR、BDR之前,等待邻居在Hello报文中宣告DR、BDR的时间间隔。 RxmtInterval:在发送数据描述
50、包和链路状态请求包时未能收到OSPF确认包,需要重新发送这些OSPF报文的时间间隔。 Hello Timer:设立HelloInterval的一个定期器,当时间到达时,应在该接口上发送一个Hello报文。 neighboring Routers:有效邻居路由器列表,由Hello报文产生该邻居列表。紧邻关系要从该邻居列表中产生。 AuType:安全鉴权类型。 Authentication Key:安全鉴权值。 7.2 OSPF接口状态机 OSPF接口在完全有效之前,将经历一系列状态,涉及Down、Point-to-Point、Waiting、 DR、 Backup、 Drot






