02、OSPF协议基本原理

OSPF协议基本原理

OSPF协议路由的计算过程可简单描述如下:

  1. 建立邻接关系,过程如下:
    1. 本端设备通过接口向外发送Hello报文与对端设备建立邻居关系。

    2. 两端设备进行主/从关系协商和DD报文交换。

    3. 两端设备通过更新LSA完成链路数据库LSDB的同步。

  2. 路由计算

    OSPF采用SPF(Shortest Path First)算法计算路由,可以达到路由快速收敛的目的。

OSPF邻居状态机

在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念:

  • 邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。

  • 邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

邻居和邻接状态是通过OSPF状态机表现的,OSPF共有8种邻居状态机,分别是Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full,如图1所示。Down、2-way、Full是稳定状态,Attempt、Init、Exstart、Exchange、Loading是不稳定状态。不稳定状态是在转换过程中瞬间存在的状态,一般不会超过几分钟。

图1 OSPF邻居状态机
表1 OSPF邻居状态机及含义

状态机

含义

Down

邻居会话的初始阶段。表明没有在邻居失效时间间隔内收到来自邻居设备的Hello报文。

Attempt

处于本状态时,定期向手工配置的邻居发送Hello报文。

说明: 

Attempt状态只适用于NBMA类型的接口。

Init

本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文。

2-way

互为邻居。本状态表示双方互相收到了对端发送的Hello报文,建立了邻居关系。

如果不形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。

Exstart

协商主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。

Exchange

交换DD报文。本端设备将本地的LSDB用DD报文来描述,并发给邻居设备。

Loading

正在同步LSDB。两端设备发送LSR报文向邻居请求对方的LSA,同步LSDB。

Full

建立邻接。两端设备的LSDB已同步,本端设备和邻居设备建立了邻接状态。

本端设备和状态可能与对端设备的状态不相同。例如本端设备的邻居状态是Full,对端设备的邻居状态可能是Loading。

建立邻接关系

在上述邻居状态机的变化中,有两处决定是否建立邻接关系:

  • 当与邻居的双向通讯初次建立时。
  • 当网段中的DR和BDR发生变化时。

OSPF在不同网络类型中,OSPF邻接关系建立的过程不同,分为广播网络,NBMA网络,点到点/点到多点网络。

在广播网络中建立OSPF邻接关系

广播链路临界关系建立过程如图2所示。

在广播网络中,DR、BDR和网段内的每一台路由器都形成邻接关系,但DR other之间只形成邻居关系。

图2 在广播网络中建立OSPF邻接关系

如所示,在广播网络中建立OSPF邻接关系的过程如下:

  1. 建立邻居关系
    1. RouterA的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR路由器(DR=1.1.1.1),但不确定邻居是哪台路由器(Neighbors Seen=0)。

    2. RouterB收到RouterA发送的Hello报文后,发送一个Hello报文回应给RouterA,并且在报文中的Neighbors Seen字段中填入RouterA的Router ID(Neighbors Seen=1.1.1.1),表示已收到RouterA的Hello报文,并且宣告DR路由器是RouterB(DR=2.2.2.2),然后RouterB的邻居状态机置为Init。

    3. RouterA收到RouterB回应的Hello报文后,将邻居状态机置为2-way状态,下一步双方开始发送各自的链路状态数据库。

    在广播网络中,两个接口状态是DR Other的路由器之间将停留在此步骤。

  2. 主/从关系协商、DD报文交换
    1. RouterA首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号Seq=x。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。

      为了提高发送的效率,RouterA和RouterB首先了解对端数据库中哪些LSA是需要更新的,如果某一条LSA在LSDB中已经存在,就不再需要请求更新了。为了达到这个目的,RouterA和RouterB先发送DD报文,DD报文中包含了对LSDB中LSA的摘要描述(每一条摘要可以惟一标识一条LSA)。为了保证在传输的过程中报文传输的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加一,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq。

    2. RouterB在收到RouterA的DD报文后,将RouterA的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RouterB的Router ID较大,所以在报文中RouterB认为自己是Master,并且重新规定了序列号Seq=y。
    3. RouterA收到报文后,同意了RouterB为Master,并将RouterB的邻居状态机改为Exchange。RouterA使用RouterB的序列号Seq=y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RouterA将MS=0,说明自己是Slave。
    4. RouterB收到报文后,将RouterA的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=y+1。

    上述过程持续进行,RouterA通过重复RouterB的序列号来确认已收到RouterB的报文。RouterB通过将序列号Seq加1来确认已收到RouterA的报文。当RouterB发送最后一个DD报文时,在报文中写上M=0。

  3. LSDB同步(LSA请求、LSA传输、LSA应答)
    1. RouterA收到最后一个DD报文后,发现RouterB的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RouterB也收到了RouterA的最后一个DD报文,但RouterA的LSA,RouterB都已经有了,不需要再请求,所以直接将RouterA的邻居状态机改为Full状态。

    2. RouterA发送LSR报文向RouterB请求更新LSA。RouterB用LSU报文来回应RouterA的请求。RouterA收到后,发送LSAck报文确认。

    上述过程持续到RouterA中的LSA与RouterB的LSA完全同步为止,此时RouterA将RouterB的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后,此时邻接关系建立完成。

在NBMA网络中建立OSPF邻接关系

NBMA网络和广播网络的邻接关系建立过程只在交换DD报文前不一致,如图3中的蓝色标记。

在NBMA网络中,所有路由器只与DR和BDR之间形成邻接关系。

图3 在NBMA网络中建立OSPF邻接关系

图3所示,在NBMA网络中建立OSPF邻接关系的过程如下:

  1. 建立邻居关系
    1. RouterB向RouterA的一个状态为Down的接口发送Hello报文后,RouterB的邻居状态机置为Attempt。此时,RouterB认为自己是DR路由器(DR=2.2.2.2),但不确定邻居是哪台路由器(Neighbors Seen=0)。

    2. RouterA收到Hello报文后将邻居状态机置为Init,然后再回复一个Hello报文。此时,RouterA同意RouterB是DR路由器(DR=2.2.2.2),并且在Neighbors Seen字段中填入邻居路由器的Router ID(Neighbors Seen=2.2.2.2)。

    在NBMA网络中,两个接口状态是DROther的路由器之间将停留在此步骤。

  2. 主/从关系协商、DD报文交换过程同广播网络的邻接关系建立过程。

  3. LSDB同步(LSA请求、LSA传输、LSA应答)过程同广播网络的邻接关系建立过程。

在点到点/点到多点网络中建立OSPF邻接关系

在点到点/点到多点网络中,邻接关系的建立过程和广播网络一样,唯一不同的是不需要选举DR和BDR,DD报文是组播发送的。

路由计算

OSPF采用SPF(Shortest Path First)算法计算路由,可以达到路由快速收敛的目的。

OSPF协议使用链路状态通告LSA描述网路拓扑,即有向图。Router LSA描述路由器之间的链接和链路的属性。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。各个路由器得到的有向图是完全相同的,如图4所示。

图4 由LSDB生成带权有向图

每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由,如图5所示。

图5 最小生成树

当OSPF的链路状态数据库LSDB发生改变时,需要重新计算最短路径,如果每次改变都立即计算最短路径,将占用大量资源,并会影响路由器的效率,通过调节SPF的计算间隔时间,可以抑制由于网络频繁变化带来的占用过多资源。缺省情况下,SPF时间间隔为5秒钟。

具体的计算过程如下:

  1. 计算区域内路由。

    Router LSA和Network LSA可以精确的描述出整个区域内部的网络拓扑,根据SPF算法,可以计算出到各个路由器的最短路径。根据Router LSA描述的与路由器的网段情况,得到了到达各个网段的具体路径。

    在计算过程中,如果有多条等价路由,SPF算法会将所有等价路径都保留在LSDB中。

  2. 计算区域外路由。

    从一个区域内部看,相邻区域的路由对应的网段好像是直接连接在ABR上,而到ABR的最短路径已经在上一过程中计算完毕,所以直接检查Network Summary LSA,就可以很容易得到这些网段的最短路径。另外,ASBR也可以看成是连接在ABR上,所以ASBR的最短路径也可以在这个阶段计算出来。

    如果进行SPF计算的路由器是ABR,那么只需要检查骨干区域的Network Summary LSA。

  3. 计算自治系统外路由。

    由于自治系统外部的路由可以看成是直接连接在ASBR上,而到ASBR的最短路径在上一过程中已经计算完毕,所以逐条检查AS External LSA就可以得到到达各个外部网络的最短路径。

posted @ 2024-04-15 15:38  博雅塔之客  阅读(64)  评论(0编辑  收藏  举报