【知识专题】OSPFv2基础-基本原理、状态机、邻接关系机制

01、OSPF简介

定义

开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。

  • OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域;

  • OSPF通过链路状态通告LSA(Link State Advertisement)的形式发布路由;

  • OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;

  • OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。

目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。

优点

在OSPF出现前,RIP是网络上使用最广泛的IGP协议。但随着网络的快速成长和扩展,RIP的某些限制可能会导致其在大型网络中不再适用,OSPF则能够解决RIP所面临的诸多问题。

RIP

  • 基于距离矢量算法,以跳数作为度量方式,忽略带宽的影响。

  • RIP的跳数限制为15个,限制了RIP的网络规模。

  • 按照路由通告进行路由更新和选择,路由器不了解整个网络拓扑,容易产生路由环路。

  • 收敛速度慢,路由更新会经历一段抑制和垃圾收集期,容易导致路由器之间的路由不一致。

  • 不能处理可变长子网掩码(VLSM)。

OSPF

  • 基于链路状态,以链路开销作为度量方式,并把带宽作为参考值,度量方式更科学。

  • 没有跳数限制,适用的网络规模更大。

  • 每台路由器都能够掌握全网拓扑,通过最短路径优先算法SPF(Shortest Path First)计算路由,不会产生路由环路。

  • 收敛速度快,因为路由更新是及时的,并且能够快速传递到整个网络。

  • 能够处理VLSM,灵活进行IP地址分配。

此外,OSPF还有以下优点:

  • OSPF可以采用组播形式收发报文,这样可以减少对未运行OSPF的路由器的影响。

  • OSPF支持无类型域间选路(CIDR)。

  • OSPF支持对等价路由进行负载分担。

  • OSPF支持报文验证。

02、OSPF的特点

在OSPF网络中,每台路由器根据自己周围的网络拓扑结构生成链路状态通告LSA(Link State Advertisement),并通过更新报文将LSA发送给网络中的其它路由器。

RIP交互的是路由。与RIP不同,OSPF交互的是链路状态信息。也就是说,RIP中,路由器的选路依赖于邻居路由器的路由信息,但不管邻居路由器传达的信息是否正确;而OSPF中,路由器的选路是一种“自主行为”,LSA只是一种选路的参考信息。

每台路由器都通过链路状态数据库LSDB(Link State DataBase)掌握全网的拓扑结构。如图1所示,每台路由器都会收集其它路由器发来的LSA,所有的LSA放在一起便组成了链路状态数据库LSDB。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的。

图片

图1 通过LSDB掌握全网的拓扑结构

路由器根据最短路径优先(Shortest Path First)算法计算到达目的网络的路径,而不是根据路由通告来获取路由信息。如图2所示,每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。相对于RIP,这种机制极大地提升了路由器的自主选路能力,使得路由器不再依靠路由通告进行选路。

图片

图2 根据SPF算法计算到达目的网络的路径

总之,LSDB保证路由器能够时刻掌握全网的拓扑机构,SPF算法保证路由器能够迅速计算出到达目的网络的最短路径。

03、OSPF运行机制

OSPF的运行机制包括以下5个步骤:

  1. 交互Hello报文

  2. 泛洪LSA

  3. 组建LSDB

  4. SPF算法计算

  5. 维护和更新路由表

第一步:交互Hello报文

通过交互Hello报文形成邻居关系

如图3所示,路由器运行OSPF协议后,会从所有启动OSPF协议的接口上发送Hello报文。如果两台路由器共享一条公共数据链路,并且能够成功协商各自Hello报文中所指定的某些参数,就能形成邻居关系。

图片

图3 通过交互Hello报文形成邻居关系

第二步:泛洪LSA

通过泛洪LSA通告链路状态信息

形成邻居关系的路由器之间进一步交互LSA形成邻接关系,如图4所示。每台路由器根据自己周围的网络拓扑结构生成LSA,LSA描述了路由器所有的链路、接口、邻居及链路状态等信息,路由器通过交互这些链路信息来了解整个网络的拓扑信息。由于链路的多样性,OSPF协议定义了多种LSA类型。详见OSPF LSA类型。

图片

图4 通过泛洪LSA通告链路状态信息

第三步:组建LSDB

通过组建LSDB形成带权有向图

通过LSA的泛洪,路由器会把收到的LSA汇总记录在LSDB中。最终,所有路由器都会形成同样的LSDB,如图5所示。LSA是对路由器周围网络拓扑结构的描述,而LSDB则是对整个自治系统的网络拓扑结构的描述,LSDB是LSA的汇总。(欢迎关注公众号@网络工程师阿龙)

图片

图5 通过组建LSDB形成带权有向图

第四步:SPF算法计算

通过SPF算法计算并形成路由

如图6所示,当LSDB同步完成之后,每一台路由器都将以其自身为根,使用SPF算法来计算一个无环路的拓扑图来描述它所知道的到达每一个目的地的最短路径(最小的路径代价)。这个拓扑图就是最短路径树,有了这棵树,路由器就能知道到达自治系统中各个节点的最优路径。

图片

图6 通过SPF算法计算并形成路由

第五步:维护和更新路由表

维护和更新路由表

根据SPF算法得出最短路径树后,每台路由器将计算得出的最短路径加载到OSPF路由表形成指导数据转发的路由表项,并且实时更新,如图7所示。同时,邻居之间交互Hello报文进行保活,维持邻居关系或邻接关系,并且周期性地重传LSA。

图片

图7 维护和更新路由表

04OSPF报文类型

OSPF的报文类型可以分为以下五种:

  • Hello报文

  • DD报文

  • LSR报文

  • LSU报文

  • LSAck报文

Hello报文

  • 邻居发现:使能了OSPF功能的接口会周期性地发送Hello报文,与网络中其他收到Hello报文的路由器协商报文中的指定参数,决定是否建立邻居关系。

  • 建立双向通信:如果路由器发现收到的Hello报文的邻居列表中有自己Router ID,则认为已经和对端建立了双向通信,邻居关系建立。

  • 指定DR和BDR:Hello报文包含DR优先级和Router ID等信息,每台路由器将自己选出的DR和BDR写入Hello报文的DR和BDR字段中,然后进行DR和BDR的选举,详细的选举原则和过程请参见DR和BDR选举。

  • 保活:在建立邻居关系后,使能OSPF功能的接口仍周期性地发送Hello报文维护邻居关系,如果在一定的时间间隔内没有收到邻居发来的Hello报文,则中断邻居关系。(欢迎关注公众号@网络工程师阿龙)

DD报文

两台路由器在邻接关系初始化时,DD报文(Database Description packet)用来协商主从关系,此时报文中不包含LSA的Header。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。

邻接关系建立之后,路由器使用DD报文描述本端路由器的LSDB,进行数据库同步。DD报文里包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA),即所有LSA的摘要信息。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量。对端路由器根据LSA Header就可以判断出是否已有这条LSA。

LSR报文

两台路由器互相交换过DD报文之后,需要发送LSR报文(Link State Request packet)向对方请求更新LSA。LSR报文里包括所需要的LSA的摘要信息。

LSU报文

LSU报文(Link State Update packet)用来向对端路由器发送其所需要的LSA或者泛洪本端更新的LSA,其报文内容是多条完整的LSA的集合。为了实现泛洪的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。

LSAck报文

LSAck报文(Link State Acknowledgment packet)用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header。一个LSAck报文可对多个LSA进行确认。

05OSPF支持的网络类型

OSPF根据链路层协议类型,将网络分为如下四种类型:

  • MA类型

  • NBMA类型

  • P2MP类型

  • P2P类型

MA类型

广播类型(Broadcast)

当链路层协议是Ethernet或FDDI(Fiber Distributed Digital Interface)时,缺省情况下,OSPF认为网络类型是Broadcast。

在该类型的网络中:

  • 通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址。

  • 以单播形式发送DD报文和LSR报文。

NBMA类型

NBMA类型(Non-Broadcast Multi-Access)

当链路层协议是帧中继或X.25时,缺省情况下,OSPF认为网络类型是NBMA。

在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。

P2MP类型

点到多点P2MP类型(Point-to-Multipoint)

没有一种链路层协议会被缺省的认为是P2MP类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。

在该类型的网络中:

  • 以组播形式(224.0.0.5)发送Hello报文。

  • 以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。(欢迎关注公众号@网络工程师阿龙)

P2P类型

点到点P2P类型(Point-to-Point)

当链路层协议是PPP、HDLC或LAPB时,缺省情况下,OSPF认为网络类型是P2P。

在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。

06DR和BDR选举

Router ID

在DR和BDR选举的过程中,如果两台路由器的DR优先级相等,需要进一步比较两台路由器的Router ID,Router ID大的路由器将被选为DR或BDR。

Router ID是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数,如:1.1.1.1。每个运行OSPF的路由器都有一个Router ID。Router ID的格式和IP地址的格式是一样的。

OSPF的Router ID的选取有两种方式:手动配置和设备自动选取。在实际网络部署中,考虑到协议的稳定,推荐手工配置Loopback接口的IP地址做为Router ID。

如果没有手动配置OSPF的Router ID,设备会选取全局Router ID作为OSPF的RouterID,如果二者都没有配置,设备会按照一定的规则自动选取。具体的选取规则,请参见路由的Router ID。

以下3种情况会进行Router ID的重新选取:

  • 通过本命令重新配置OSPF的Router ID

  • 重新配置全局Router ID,并且重新启动OSPF进程

  • 原来被选举为全局Router ID的IP地址被删除并且重新启动OSPF进程

选举的原因

在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息。如图8所示,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。

为解决这一问题,OSPF定义了DR。通过选举产生DR后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去。

为了防止DR发生故障,重新选举DR时会造成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。

图片

图8 DR和BDR选举

选举的原则

在广播网络和NBMA网络中,为了稳定地进行DR和BDR选举,OSPF规定了一系列的选举规则:选举制、终身制、继承制。

选举制

选举制是指DR和BDR不是人为指定的,而是由本网段中所有的路由器共同选举出来的。如图9所示,路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格,本网段内DR优先级大于0的路由器都可作为“候选人”。选举中使用的“选票”就是Hello报文,每台路由器将自己选出的DR写入Hello报文中,发给网段上的其他路由器。当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。

                     

图片

图9 DR和BDR选举的原则—选举制

终身制

终身制也叫非抢占制。每一台新加入的路由器并不急于参加选举,而是先考察一下本网段中是否已存在DR。如图10所示,如果目前网段中已经存在DR,即使本路由器的DR优先级比现有的DR还高,也不会再声称自己是DR,而是承认现有的DR。因为网段中的每台路由器都只和DR、BDR建立邻接关系,如果DR频繁更换,则会引起本网段内的所有路由器重新与新的DR、BDR建立邻接关系。这样会导致短时间内网段中有大量的OSPF协议报文在传输,降低网络的可用带宽。终身制有利于增加网络的稳定性、提高网络的可用带宽。实际上,在一个广播网络或NBMA网络上,最先启动的两台具有DR选举资格的路由器将成为DR和BDR。

                   

图片

图10 DR和BDR选举的原则—终身制

继承制

如图11所示,继承制是指如果DR发生故障了,那么下一个当选为DR的一定是BDR,其他的路由器只能去竞选BDR的位置。这个原则可以保证DR的稳定,避免频繁地进行选举,并且DR是有备份的(BDR),一旦DR失效,可以立刻由BDR来承担DR的角色。由于DR和BDR的数据库是完全同步的,这样当DR故障后,BDR立即成为DR,履行DR的职责,而且邻接关系已经建立,所以从角色切换到承载业务的时间会很短。同时,在BDR成为新的DR之后,还会选举出一个新的BDR,虽然这个过程所需的时间比较长,但已经不会影响路由的计算了。

                         

图片

图11 DR和BDR选举的原则—继承制

选举过程

广播链路或者NBMA链路上DR和BDR的选举过程如下:

  1. 接口UP后,发送Hello报文,同时进入到Waiting状态。在Waiting状态下会有一个WaitingTimer,该计时器的长度与DeadTimer是一样的。默认值为40秒,用户不可自行调整。OSPF接口状态的详细描述,请参见OSPF接口状态机。

  2. 在WaitingTimer触发前,发送的Hello报文是没有DR和BDR字段的。在Waiting阶段,如果收到Hello报文中有DR和BDR,那么直接承认网络中的DR和BDR,而不会触发选举。直接离开Waiting状态,开始邻居同步。

  3. 假设网络中已经存在一个DR和一个BDR,这时新加入网络中的路由器,不论它的Router ID或者DR优先级有多大,都会承认现网中已有的DR和BDR。(欢迎关注公众号@网络工程师阿龙)

  4. 当DR因为故障Down掉之后,BDR会继承DR的位置,剩下的优先级大于0的路由器会竞争成为新的BDR。

  5. 只有当不同Router ID,或者配置不同DR优先级的路由器同时起来,在同一时刻进行DR选举才会应用DR选举规则产生DR。该规则是:优先选择DR优先级最高的作为DR,次高的作为BDR。DR优先级为0的路由器只能成为DR Other;如果优先级相同,则优先选择Router ID较大的路由器成为DR,次大的成为BDR,其余路由器成为DR Other。

07、OSPF状态机

接口状态机

OSPF设备从接口获取链路信息后,与相邻设备建立邻接关系,交互这些信息。在建立邻接关系之前,邻居设备间需要明确角色分工才能正常建立连接。OSPF接口信息的State字段(可通过display ospf interface命令查看)表明了OSPF设备在对应链路中的作用。

OSPF接口共有以下七种状态:
  • Down:接口的初始状态。表明此时接口不可用,不能用于收发流量。

  • Loopback:设备到网络的接口处于环回状态。环回接口不能用于正常的数据传输,但可以通过Router-LSA进行通告。因此,进行连通性测试时能够发现到达这个接口的路径。

  • Waiting:设备正在判定网络上的DR和BDR。在设备参与DR和BDR选举前,接口上会启动Waiting定时器。在这个定时器超时前,设备发送的Hello报文不包含DR和BDR信息,设备不能被选举为DR或BDR。这样可以避免不必要地改变链路中已存在的DR和BDR。仅NMBA网络、广播网络有此状态。

  • P-2-P:接口连接到物理点对点网络或者是虚拟链路,这个时候设备会与链路连接的另一端设备建立邻接关系。仅P2P、P2MP网络有此状态。

  • DR Other:设备没有被选为DR或BDR,但连接到广播网络或NBMA网络上的其他设备被选举为DR。它会与DR和BDR建立邻接关系。

  • BDR:设备是相连的网络中的BDR,并将在当前的DR失效时成为DR。该设备与接入该网络的所有其他设备建立邻接关系。

  • DR:设备是相连的网络中的DR。该设备与接入该网络的所有其他设备建立邻接关系。

OSPF接口根据不同的情况(即输入事件)在各状态中进行灵活转换,这样就形成了一个高效运作的接口状态机,如图13所示。

图片

图13 OSPF接口状态机

下表列出了不同状态切换时的输入事件InputEvent(图中简称IE)。

      输入事件       描述

IE1

InterfaceUP:底层协议表明接口是可操作的。

IE2

WaitTimer:等待定时器超时,表明DR和BDR选举等待时间结束。

IE3

BackupSeen:设备已检测过网络中是否存在BDR。
发生这个事件主要有下面两种方式:
· 接口收到邻居设备的Hello报文,宣称自己是BDR。
· 接口收到邻居设备的Hello的报文,宣称自己是DR,而没有指明有BDR。
· 这都说明邻居间已进行了相互通信,可以结束Waiting状态了。

IE4

接口所在的设备在网络中被选举为DR。

IE5

接口所在的设备在网络中被选举为BDR。

IE6

接口所在的设备在网络中没有被选举为DR或BDR。

IE7

NeighborChange:与该接口相关的邻居关系变化的事件发生,这表明DR和BDR需要重新选举。
下面的这些邻居关系变化可能会导致DR和BDR重新选举:
· 接口所在的设备和一个邻居设备建立了双向通信关系。
· 接口所在的设备和一个邻居设备之间丢失了双向通信关系。
· 通过邻居设备发送的Hello报文检测到邻居设备重新宣称自己是DR或BDR。
· 通过邻居设备发送的Hello报文再一次检测到邻居设备宣称自己不再是DR或BDR。
· 通过邻居设备发送的Hello报文再一次检测到相邻设备的DR优先级都已经改变。

IE8

UnLoopInd:网管系统或者底层协议表明接口不再处于环回状态。

IE9

InterfaceDown:底层协议表明接口不可操作。任何一种状态都可能触发此事件切换到Down状态。

IE10

LoopInd:网管系统或者底层协议表明接口处于环回状态。任何一种状态都可能触发此事件切换到Loopback状态。

邻居状态机

在OSPF网络中,相邻设备间通过不同的邻居状态切换,最终可以形成完全的邻接关系,完成LSA信息的交互。

OSPF邻居信息的State字段(可通过display ospf peer命令查看)表明了OSPF设备的邻居状态。

OSPF邻居共有以下八种状态:
  • Down:邻居会话的初始阶段。

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

除了NBMA网络OSPF路由器会每隔PollInterval时间对外轮询发送Hello报文,包括向处于Down状态的邻居路由器(即失效的邻居路由器)发送之外,其他网络是不会向失效的邻居路由器发送Hello报文的。

  • Attempt:这种状态适用于NBMA网络,邻居路由器是手工配置的。

邻居关系处于本状态时,路由器会每隔HelloInterval时间向自己手工配置的邻居发送Hello报文,尝试建立邻居关系。

  • Init:本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文,收到的Hello报文的邻居列表并没有包含本端的Router ID,双向通信仍然没有建立。

  • 2-Way:互为邻居。本状态表示双方互相收到了对端发送的Hello报文,报文中的邻居列表也包含本端的Router ID,邻居关系建立。如果不形成邻接关系则邻居状态机就停留在此状态,否则进入ExStart状态。DR和BDR只有在邻居状态处于2-Way及之后的状态才会被选举出来。

  • ExStart:协商主从关系。建立主从关系主要是为了保证在后续的DD报文交换中能够有序的发送。邻居间从此时才开始正式建立邻接关系。

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

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

  • Full:建立邻接。两端设备的LSDB已同步,本端设备和邻居设备建立了完全的邻接关系。

OSPF邻居状态的切换如图14所示。

图片

图14 OSPF邻居状态机

下表列出了不同状态切换时的输入事件InputEvent(图中简称IE)。

下表 OSPF邻居状态切换的输入事件

      输入事件      描述

IE1

Start:以HelloInterval间隔向邻居设备发送Hello报文,尝试建立邻居关系。仅NMBA网络适用。

IE2

HelloReceived:从邻居设备收到一个Hello报文。

IE3

2-WayReceived:从邻居设备收到的Hello报文中包含了自己的RouterID,邻居间建立了双向通信关系。接下来会进行判断:
· IE3(Y):如果相邻设备间应当建立邻接关系,会将邻居状态切换为ExStart。
· IE3(N):如果相邻设备间不应当建立邻接关系,只建立邻居关系,会将邻居状态切换为2-Way。

IE4

NegotiationDone:邻居间主从关系已经协商完成,DD序列号已经交换。

IE5

ExchangeDone:邻居间成功交换了数据库描述报文。接下来会进行判断:
· IE5(Y):如果链路状态请求列表为空,会将邻居状态切换为Full状态,表示链路状态数据已全部交换完成,邻居间建立了完全的邻接关系。
· IE5(N):如果链路状态请求列表不为空,会将邻居状态切换为Loading状态,开始或继续向邻居发送LSR报文,请求还没有接收到的链路状态数据。

IE6

LoadingDone:链路请求状态列表为空。

08OSPF邻接关系的建立

邻居关系

使能OSPF功能的接口会周期性地发送Hello报文,与网络中其他收到Hello报文的路由器协商报文中的指定参数,包括区域号、验证模式、发送Hello报文的时间间隔、路由器失效时间等参数。

如果协商一致,则在返回的Hello报文的邻居列表中添加发送该Hello报文的设备的Router ID,双方建立双向通信,邻居关系建立。

邻居关系建立后,如果在路由器失效时间内没有收到邻居发来的Hello报文,则中断邻居关系。

邻接关系

  • OSPF邻接关系位于邻居关系之上,两端需要进一步交换DD报文、交互LSA信息时才建立邻接关系。

  • 并非所有邻居都会建立邻接关系,是否建立邻接关系主要取决网络类型和DR/BDR。

  • 在P2P链路和P2MP链路上,每一台设备都需要交换LSA信息,因此只存在邻接关系。

  • 在广播链路和NBMA链路上,因为DR Other之间不需要交换LSA信息,所以建立的是邻居关系。

  • 而DR与BDR之间,DR、BDR与DR Other之间需要交互LSA信息,所以建立的是邻接关系。

邻接关系建立过程

不同类型的网络,OSPF邻接关系建立过程不同。

广播网络

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

邻接关系建立的过程如下图所示。

         

图片

 图 广播网络中邻接关系的建立过程

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

(一)建立邻居关系 

    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的路由器之间将停留在此步骤。

(二)主/从关系协商、DD报文交换 

  1. RouterA首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号Seq=X。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。
  2. 为了提高发送的效率,RouterA和RouterB首先了解对端数据库中哪些LSA是需要更新的,如果某一条LSA在LSDB中已经存在,就不再需要请求更新了。为了达到这个目的,RouterA和RouterB先发送DD报文,DD报文中包含了对LSDB中LSA的摘要描述(每一条摘要可以惟一标识一条LSA)。为了保证在传输的过程中报文传输的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加一,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq。
  3. RouterB在收到RouterA的DD报文后,将RouterA的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RouterB的Router ID较大,所以在报文中RouterB认为自己是Master,并且重新规定了序列号Seq=Y。

  4. RouterA收到报文后,同意了RouterB为Master,并将RouterB的邻居状态机改为Exchange。RouterA使用RouterB的序列号Seq=Y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RouterA将MS=0,说明自己是Slave。

  5. RouterB收到报文后,将RouterA的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=Y+1。

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

(三)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网络中,所有路由器只与DR和BDR之间形成邻接关系。邻接关系建立的过程如图16所示。

       

图片

   图16 NBMA网络中邻接关系的建立过程

(一)建立邻居关系 

  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网络中,两个接口状态是DR Other的设备之间将停留在此步骤。

(二)主从关系协商、DD报文交换过程与广播网络中邻接关系建立过程相同。

(三)LSDB同步(LSA请求、LSA传输、LSA应答)过程与广播网络中邻接关系建立过程相同。

点到点网络和点到多点网络

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

扫描下方二维码关注微信公众号:小云君网络

图片

    原创不易,感谢大家支持!! 

  • 40
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小云君网络

原创不易,感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值