OSPF知识点总结

OSPF路由协议

   OSPF路由协议是用于网际协议(IP)网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议(IGP),在单一自治系统(AS)内部工作。适用于IPv4的OSPFv2协议定义于RFC 2328,RFC 5340定义了适用于IPv6的OSPFv3。

1.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支持报文验证。

2.OSPF的特点

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

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

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

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

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

3.OSPF运行机制

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

交互Hello报文

泛洪LSA

组建LSDB

SPF算法计算

维护和更新路由表

交互Hello报文

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

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

泛洪LSA

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

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

组建LSDB

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

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

SPF算法计算

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

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

维护和更新路由表

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

4.OSPF报文类型

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进行确认。

5.OSPF支持的网络类型

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报文)。

6.DR和BDR选举

Router ID

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

Router ID是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数。每个运行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网络上各路由器之间邻接关系的数量。

选举的原则

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

选举制

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

终身制

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

继承制

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

选举过程

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/m0_66185683/article/details/128674430