分享

OSPF协议介绍及配置(1)

 wq2g2ds152m668 2019-06-18

一、OSPF概述

回顾一下距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中,而对于这个网络中的所有路由器而言,他们并不清楚网络的拓扑,他们只是简单的知道要去往某个目的应该从哪里走,距离有多远。

相比之下链路状态路由协议就要复杂的多:

1. LSAs的泛洪

运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系。之后彼此之间开始交互LSA,也就是链路状态通告,注意这里交互的不是路由信息,而是链路状态通告,那么什么是链路状态通告呢,你可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告,更通俗点的讲法是,每台路由器都产生一个通告,这个通告描述它自家门口的情况。

2. LSDB的组建

每台路由器都会产生LSAs,路由器将搜集到的网络中的LSAs放入自己的LSDB(链路状态数据库),有了LSDB,路由器也就清楚了全网的拓扑。因为LSDB中所存储的每条LSA都是由网络中各路由器产生并且描述其直连接口各项信息的条目。

3. SPF计算

接下去,每台路由器基于LSDB,使用SPF(最短路径算法)进行计算。SPF是OSPF路由协议的一个核心算法,用来在一个复杂的网络中做出路由优选的决策。经过SPF算法的计算后,每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,事实上路由器就已经知道了到达网络各个角落的最优路径。

4. 维护路由表

最后,路由器将计算出来的最优路径,加载进自己的路由表。

OSPF:Open Shortest Path First,开放最短路径优先协议,是一种链路状态路由协议,在RFC 2328中描述。OSPF中的字母O意为open,也就是开放、公有,任何标准化的设备厂商都能够支持OSPF。

OSPF是一种使用相当广泛的IGP协议,深入掌握OSPF非常有必要。

与距离矢量路由协议直接交互路由器的路由表不同,OSPF作为链路状态路由协议,路由器之间交互的是LSA(链路状态通告),路由器将网络中泛洪的LSA搜集到自己的LSDB(链路状态数据库)中,这有助于OSPF理解整张网络拓扑,并在此基础上通过SPF最短路径算法计算出以自己为根的、到达网络各个角落的、无环的树,最终,路由器将计算出来的路由装载进路由表中。

二、OSPF基本概念

1、Router-ID

OSPF Router-ID用于在OSPF domain中唯一地表示一台OSPF路由器,从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台路由器拥有相同的OSPFRouterID。

OSPF Router-ID的设定可以通过手工配置的方式,或者通过协议自动选取的方式。当然,在实际网络部署中,强烈建议手工配置OSPF的Router-ID,因为这关系到协议的稳定。

在路由器运行了OSPF并由系统自动选定Router-ID之后,如果该Router-ID对应的接口DOWN掉,或出现一个更大的IP,OSPF仍然保持原Router-ID(也就是说,Router-ID值是非抢占的,稳定第一),即使此时reset ospf process重启OSPF进程,Router-ID也不会发生改变;除非重新手工配置Router-ID(OSPF进程下手工敲router-id xxx),并且重启OSPF进程方可。另外,如果该Router-ID对应的接口IP 地址消失,例如undo ip address,则reset ospf process后,RouterID也会发生改变。

2、COST

OSPF使用cost“开销”作为路由度量值。

每一个激活OSPF的接口都有一个cost值。OSPF接口cost=100M /接口带宽,其中100M为OSPF的参考带宽(reference-bandwidth)。

一条OSPF路由的cost由该路由从路由的起源一路到达本地的所有入接口cost值的总和。

注意:上图只是为了帮助大家理解路由cost的计算过程,我们都知道OSPF实际的路由计算是由LSA经过计算得来的,所以这里只是形象化的帮助大家理解而已:R1将路由更新出来,Cost=1,R2从Serial4/0/0口收到这条路由,最终这条路由在R2的路由表中的cost等于1加上serial4/0/0接口的cost 50也就是51,再将这条路由更新给R3,那么这条路由在R3上的cost=51+1也就是52。另外,由于默认的参考带宽是100M,这意味着更高带宽的传输介质(高于100M)在OSPF协议中将会计算出一个小于1的分数,这在OSPF协议中是不允许的(会被四舍五入为1)。而现今网络设备满地都是大于100M带宽的接口,这时候路由COST的计算其实就不精确了。所以可以使用bandwidth-reference 1000命令修改,但是这条命令要谨慎使用,一旦要配置,则建议全网OSPF路由器都配置。

3、报文类型

  1. OSPF一共有五种报文,各有各的用途:
  2. Hello建立和维护OSPF邻居关系
  3. DBD链路状态数据库描述信息(描述LSDB中LSA头部信息)
  4. LSR链路状态请求,用于向OSPF邻居请求链路状态信息
  5. LSU链路状态更新(包含一条或多条LSA)
  6. LSAck对LSU中的LSA进行确认

4、OSPF的三张表

邻居表(Peer table):

OSPF是一种可靠的路由协议,要求在路由器之间传递链路状态通告之前,需先建立OSPF邻居关系,hello报文用于发现直连链路上的其他OSPF路由器,再经过一系列的OSPF消息交互最终建立起全毗邻的邻居关系,其中两者之间需要经历几个邻居关系状态,这也是一个重要的知识点。路由器在各个激活的OSPF的接口上维护的邻居都列在邻居表中,通过观察邻居表,能够进一步了解OSPF路由器之间的邻居状态。

链路状态数据库LSDB(Link-state database):

OSPF用LSA(link state Advertisement 链路状态通告)来描述网络拓扑信息,然后OSPF路由器用链路状态数据库来存储网络的这些LSA。OSPF将自己产生的以及邻居通告的LSA搜集并存储在链路状态数据库LSDB中。掌握LSDB的查看以及对LSA的深入分析才能够深入理解OSPF。

OSPF路由表(Routing table):

对链路状态数据库进行SPF(Dijkstra)计算,而得出的OSPF路由表。

5、OSPF邻居关系建立过程

OSPF邻居关系的建立过程是我们在学习OSPF过程中的一个重点,而且非常具有研究价值,就OSPF的实际部署而言,掌握这里头的机制也是很有必要的,因为邻居关系的建立是OSPF工作的基本,如果连邻居关系都建立不起来,就别谈其他的了。在实际业务部署中,可能会碰到各种问题导致OSPF邻居关系无法正常建立,因此这个模块非常值得推敲。

6、OSPF网络类型

OSPF是一个“接口敏感型”协议,这句话非常值得细细品味。在上面我们介绍ospf cost的时候,就曾经讲过,路由的cost实际上得累加上入接口的cost。而OSPF中后续要介绍的DR、BDR的概念,实际上也是基于接口的,另外邻居关系的建立,也是与接口有关,因此其实很多机制着眼点都与接口有关。一旦我们在某个接口上激活了OSPF,那么这个接口将会根据该接口的二层(数据链路层)封装,捆绑对应的OSPF网络类型,注意,不同的OSPF接口网络类型,OSPF在该接口上的操作将有所不同。

OSPF支持的网络类型:

  • 点到点网络
  • 广播型多路访问网络
  • 非广播型多路访问(NBMA)网路
  • P2MP网络

常见链路层协议对应的默认网络类型

如果一个接口是以太网接口,那么该接口激活OSPF后,该接口的缺省OSPF网络类型为Broadcast也就是广播型多路访问网络。而如果一个接口是serial接口,二层封装为HDLC或者PPP,那么激活OSPF后,其缺省的OSPF网络类型就是Point-to-Point也就是点对点。

接口的OSPF网络类型是可以通过命令修改的。

7、DR、BDR

在广播多路访问网络(Multi Access)中,例如以太接口,所有的路由器的接口都是相同网段、处于同一个广播网络中,这些接口如果两两建立OSPF邻居关系:

n(n-1)/2

这么多个OSPF邻居关系,维护如此多的邻居关系不仅仅额外消耗设备资源,更是增加了网络中LSA的泛洪数量。

  • 为减小多路访问网络中的 OSPF 流量,OSPF 会在每一个MA网络(多路访问网络)选举一个指定路由器 (DR) 和一个备用指定路由器 (BDR)。
  • DR选举规则:最高OSPF接口优先级拥有者被选作DR,如果优先级相等(默认为1),具有最高的OSPF Router-ID的路由器被选举成DR,并且DR具有非抢占性,也就是说如果该MA网络中,已经选举完成、并且选举出了一个DR,那么后续即使有新的、更高优先级的设备加入,也不会影响DR的选举,除非DR挂掉。
  • 指定路由器 (DR):DR 负责侦听多路访问网络中的拓扑变更信息并将变更信息通知给其他路由器,同时负责代表该MA网络发送LSA类型2。MA网络中,所有的OSPF路由器都与DR建立全毗邻的OSPF邻接关系。
  • 备用指定路由器 (BDR):BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色
  • 注意OSPF为“接口敏感型协议”,DR及BDR的身份状态是基于OSPF接口的,所以如果我们说:“这台路由器是DR”实际上这种说法是不严谨的,严格的说,应该是:“这台路由器的这个接口,在这个MA网络上是DR”。
  • MA网络中,所有的DRother路由器均只与DR和BDR建立全毗邻的邻接关系,DRother间不建立全毗邻邻接关系,如此一来,该多路访问网络中设备需要维护的OSPF邻居关系大幅减小:M= (n-2)×2+1,LSA的泛洪问题也可以得到一定的缓解
  • 路由器的接口如果网络类型为广播多路访问或者非广播多路访问型,那么都会进行DR/BDR的选举。所以我们看,OSPF接口网络类型的不同,OSPF的操作是有所不同的。在P2P或者P2MP类型的接口上,就不选举DR\BDR。

接下去看看在MA网络中,有了DR、BDR的存在后,LSA的泛洪:

假设网络已经完成了OSPF收敛,现在突然R3下挂的一个网络发生了故障

路由器R3用224.0.0.6通知DR及BDR

DR、BDR监听224.0.0.6这一组播地址

DR向组播地址224.0.0.5发送更新以通知其它路由器

所有的OSPF路由器监听224.0.0.5这一组播地址

路由器收到包含变化后的LSA的LSU后,更新自己的LSDB,过一段时间(SPF延迟),对更新的链路状态数据库执行SPF算法,必要时更新路由表。

这里有个知识点要记住,OSPF使用两个well-know的组播地址:224.0.0.5及224.0.0.6,这是一个常识,需熟记。所有的OSPF路由器(的接口)都会侦听发向224.0.0.5这个组播地址的报文,所有DR/BDR都会侦听224.0.0.6。

8、OSPF 区域(area)的概念

单区域存在的问题:

设想一下,如果OSPF没有区域的概念,或者整个OSPF网络就是一个区域,那么会有什么问题?在一个区域内,LSA会被泛洪,并且同一个区域的OSPF路由器,关于该区域的LSA会同步,这样一来,如果整个网络就一个单独的区域的话,如果规模非常庞大,那么LSA的泛洪会很严重,OSPF路由器的负担很大,因为OSPF要求区域内的所有路由器,LSDB必须统一,这样以便计算出一个统一的、无环的拓扑;

区域内部动荡会引起全网路由器的SPF计算;

LSDB庞大,资源消耗过多,设备性能下降,影响数据转发;

每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总。

OSPF多区域:

基于上述原因,OSPF设计了区域area的概念

多区域的设计减少了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的

在区域边界可以做路由汇总,减小了路由表

充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由

多区域提高了网络的扩展性,有利于组建大规模的网络

OSPF区域中的骨干区域area0:

在部署OSPF时,要求全OSPF域,必须有且只能有一个area0,Area 0为骨干区域,骨干区域负责在非骨干区域之间发布由区域边界路由器汇总的路由信息(并非详细的链路状态信息),为避免区域间路由环路,非骨干区域之间不允许直接相互发布区域间路由。因此,所有区域边界路由器都至少有一个接口属于Area 0,即每个区域都必须连接到骨干区域。

OSPF路由器的角色

OSPF路由器的角色:

区域内路由器Internal Router

区域边界路由器Area Border Router

骨干路由器Backbone Router

AS边界路由器AS Boundary Router

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多