网络工程师网络工程师学习笔记

第七章 OSPF协议基本原理

2019-07-25  本文已影响1人  Minimal__

~~~~OSPF(Open Shortest Path First,开放最短路径优先)是IETF开发的一个基于链路状态的内部网关协议,目前在互联网上大量地使用。本章主要介绍OSPF协议的工作原理,包括其分层结构、网络类型、报文封装、邻居建立和维护等内容。

7.2 OSPF协议概述

7.2.1 OSPF协议特点

image.png

~~~~RIP协议是一个典型的距离矢量路由协议。在使用过程中,具有以下的限制:

image.png

~~~~OSPF协议是典型的链路状态路由协议,和RIP协议有很大的不同。它具有以下特点:

7.2.2 OSPF基本原理

image.png

~~~~作为典型的链路状态型路由协议,OSPF协议的工作过程包含了邻居发现、路由交换、路由计算、路由维护阶段。主要涉及一下三张表:

image.png

~~~~OSPF 基于Dijkstra算法,也称为SPF(Shortest Path First,最短路径优先)算法。这种算法的特点是,路由器收集网络中链路或接口的状态,然后将自己已知的链路状态向该区域的其他路由器通告。这样,区域内的每台路由器都建立了一个本区域的完整的链路状态数据库。然后路由器根据链路状态数据库来创建它自己的网络拓扑图,并计算生成路由。

~~~~OSPF路由的生成过程具体如下:

每台运行OSPF的路由器都根据自己周围的网络拓扑结构生成LSA(链路状态通告)。LSA中包含了接口状态(up或down)、链路开销、IP地址/掩码等信息。

OSPF链路开销值与接口带宽密切相关。缺省情况下,开销值与接口带宽成反比。此外,为了对协议选路的结果进行人工干预,路由器也支持通过命令来指定接口的开销值。

OSPF路由器通过交换LSA实现LSDB同步。

由于一条LSA是对一台路由器或一个网段拓扑结构的描述,整个LSDB就形成了对整个网络拓扑结构的描述。LSDB实质上是一张加权的有向图,这张图表示对整个网络拓扑结构的真实反映。显然,OSPF区域内所有路由器得到的是完全相同的图。

IOSPF路由器使用SPF算法以自身为节点计算出一颗最短路径树。在这颗树上,由根到各节点的累计开销最小,即由根到各节点的路径在整个网络中是最优的,这样也就获得了由根去往各个节点的路由。计算完成后,路由器将加入OSPF路由表。当SPF算法发现有两条到达目标网络的路径cost都相同时,就会将这两条路径都加入osfp路由表,形成等价路由。

7.3 分层结构

7.3.1 骨干区域与非骨干区域

image.png

~~~~随着网络规模日益扩大,当一个大型网络中的路由器都运行OSPF路由协议时,路由器数量的增多会导致LSDB非常庞大,占用大量的存储空间,并使得运行SPF算法的复杂度增加,导致CPU负担很重。

~~~~在网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于不稳定状态之中,造成网络中有大量的OSPF协议报文在传递,降低了网络带宽的利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。

~~~~OSPF 协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(AreaID)来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须属于某个特定区域。

~~~~并非所有的OSPF区域都是平等的关系。其中有一个区域是与众不同的,它的区域号(Area ID)是0,通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF有两个规定:

image.png

~~~~OSPF协议的区域划分可以带来以下好处:

7.3.2 OSPF 路由器类型

image.png

~~~~根据其在AS中的不同位置,OSPF路由器可以分为以下四类:

image.png

~~~~根据OSPF协议当中对路由器类型的定义,在上图所示网络中:

7.4 Router ID与网络类型

7.4.1 Router ID

image.png

~~~~Router ID(RID)是一个32位比特无符号整数,在大部分使用环境下,都可以用来在一个自制系统中唯一的标识一台路由器,以区分其他路由器。路由器在启动OSPF协议之前,会首先检查Router ID的配置。

~~~~如果没有通过相关命令配置RouterID,路由器会按照以下顺序自动选择一个Router ID:

~~~~一般情况下,建议配置Loopback接口,并且将loopback接口的ip地址配置为路由器的router id,以便统一管理和区分其他路由器。

image.png

~~~~RTA配置了Loopback接口,使能了OSPF协议后,优先选择Loopback接口的IP地址作为RouterID,也就是172.16.1.1,而不考虑其他任何物理接口的IP地址配置。

~~~~RTB没有配置Loopback接口,使能了OSPF协议后,三个物理接口的IP地址配置分别为:GE0/0192.168.1.1/24、GE0/1 192.168.2.1/24、GE1/0 192.168.3.1/24。尽管接口GE1/0处于down状态,但OSPF仍然选择了数值最大的IP地址,即192.168.3.1作为Router ID。

7.4.2 OSPF网络类型

image.png

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

image.png

~~~~NBMA网络是指非广播、多点可达的网络,较为典型的有ATP和帧中继网络。

~~~~对于接口的网络类型为NBMA的网络需要进行一些特殊的配置。由于无法通过报文的形式发现相邻路由器,必须手工为该接口指定相邻路由器的IP地址。

~~~~根据OSPF协议要求,NBMA网络必须是全连通的,即网络中任意两台路由器之间都必须有一条虚电路直接可达。如果部分路由器之间没有直接可达的链路时,应将接口配置成P2MP类型。如果路由器在NBMA网络中只有一个对端,也可将接口类型配置为P2P类型。

~~~~OSPF协议中,NBMA和P2MP网络之间的区别在于:

7.5 报文和封装

image.png

~~~~OSPF有五种类型的报文:

~~~~OSPF报文是直接封装在IP报文之中的,其IP报文头的协议号为89。

~~~~一个正常的OSPF报文的封装顺序是:

7.6 邻居建立和状态迁移

7.6.1 邻居发现和维护

image.png

~~~~OSPF协议中同一链路两台路由器是通过hello报文互相发现,并建立邻居关系的。

image.png

~~~~邻居发现后,hello报文还起到维持邻居关系的作用:

~~~~OSPF还定义了两个计时器:

7.6.2 DR/BDR的选举

image.png

~~~~在广播网和NBMA网络中,任意两台路由器之间都要传递路由信息。如果网络中有n台路由器,则需要建立n(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF协议定义了DR(Designated Router,指定路由器),所有路由器都只将信息发送给DR,由DR将网络链路状态发送出去。

~~~~如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,再与新的DR同步。

这需要较长的时间,在这段时间内,路由的计算是不正确的。为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router,备份指定路由器)的概念

~~~~BDR实际上是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系事先已建立,所以这个过程是非常短暂的。当然这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。

~~~~DR和BDR之外的路由器(称为DROther)之间将不再建立邻接关系,也不再交换任何路由信息。这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。

~~~~在OSPF中,邻居(Neighbor)和邻接(Adjacency)是两个不同概念。

~~~~OSPF路由器启动后,便会通过OSPF 接口向外发送Hello报文。收到Hello报文的OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。

~~~~形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,交换LSA并达到LSDB的同步之后,才形成真正意义上的邻接关系。

image.png

~~~~DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过Hello报文选举出来的,只有优先级大于0的路由器才具有选举资格。

~~~~进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。

~~~~此外,DR/BDR的选举机制还具有以下特点:

image.png

~~~~在上图的示例中,某一网段192.168.0.0/16中现有四台路由器RTA、RTB、RTC和RTD,它们的Router ID分别为192.168.1.1、192.168.2.1、192.168.3.1和192.168.4.1。

image.png

~~~~在上图所示网络中,RTD作为DR,RTC作为BDR,RTA、RTB和RTE都作为DRother。

在优先级一致的情况下,只需要比较Router ID的大小,从而将RTE选举成为BDR,以便和DRother 路由器建立邻接关系。

7.6.3 邻接关系建立过程

image.png

~~~~RTA和RTB的RouterID分别为1.1.1.1和2.2.2.2,运行OSPF协议。它们建立邻接关系的过程如下:

image.png

~~~~前文讲述了运行OSPF协议的路由器建立2-way状态的进程。如果这两台路由器还承担了DR或者BDR的角色,那么他们还需要进一步建立邻接关系。

image.png

~~~~RTA和RTB对于DD报文中包含的LSA摘要信息,与自己的LSDB做比较。RTB发现所有的LSA信息在LSDB中都存在,因此直接进入Full状态。RTA比较之后,发现LSDB中缺少部分的LSA,需要向RTB请求这些LSA:

~~~~到这个时候,完整的邻接关系才算是建立完成。

7.6.4 OSPF邻居状态机

image.png

~~~~OSPF协议使用邻居状态机来表示邻居路由器的状态,主要有以下几种:

~~~~在这些状态机中,只有Down2-wayFull才是稳定状态,其他状态都是瞬时的中间状态。正常情况下,DR/BDR和DRother路由器的邻居状态应该稳定在Full状态,而DRother路由器之间的邻居状态应该稳定在2-way状态。

7.7 LSDB更新

image.png

~~~~当网络拓扑发生变化时,感知到变化的OSPF路由器会生成相应的LSA更新报文,发送到区域中。运行OSPF协议的路由器收到一条LSA更新报文的时候,其工作流程如下:

~~~~另外,为了保证LSDB及时刷新,LSDB里面的LSA都设定有老化时间,缺省为1小时。

~~~~如果1个小时LSA没有被更新,LSA将会老化同时被移除。

~~~~缺省情况下,LSDB每隔半个小时刷新一次所有的LSA。此时,LSA的序列号会加一,同时老化计时器会重置。

~~~~当路由器想把一条LSA从LSDB中删除,可以将老化时间设置为最大老化时间,然后向所有路由器发送更新。

image.png

~~~~为了节省网络带宽与降低路由器资源消耗,在广播和NBMA网络中,链路状态发生变化时,主要是通过DR路由器发送更新报文,以便其他路由器更新自己的LSDB。

~~~~在上图所示网络中,RTC和RTD分为作为DR和BDR,负责LSA更新报文的传播。

~~~~

~~~~

~~~~

~~~~

~~~~

~~~~

~~~~

~~~~

~~~~

~~~~

上一篇 下一篇

猜你喜欢

热点阅读