OSPF详解

文章目录

引用文章:

OSPF协议介绍及配置 - airoot - 博客园 (cnblogs.com)

一、OSPF基本概述
相关名词:
  • **LSA(链路状态通告):**可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告,更通俗点的讲法是,每台路由器都产生一个通告,这个通告描述它自家门口的情况。

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

  • 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域内,禁止出现两台路由器拥有相同的OSPF Router-ID。
​ 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值的总和。

img

注意:

​ 上图只是为了帮助大家理解路由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、报文类型
OSPF的五种报文:
  1. Hello : 建立和维护OSPF邻居与邻接关系,周期收发,周期保活,默认hello 包的hello time 为10s或30s , dead time 为hello time的4倍 ; 邻居间hello包中hello time和dead time必须是完全一致的参数.
  2. DBD : 链路状态数据库描述信息(描述LSDB中LSA头部信息)
  3. LSR : 链路状态请求,用于向OSPF邻居请求链路状态信息
  4. LSU : 链路状态更新(携带一条或多条LSA
  5. 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邻接关系建立过程

img

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

1、启动配置完成后,运行ospf协议的路由器,将组播收发hello包;若hello包中存在本地的RID,视为对端已经认识本地,故标志邻居关系建立,生成邻居表;
2、进行条件匹配:匹配失败将停留于邻居关系,仅hello周期保活即可;
3、匹配成功者后:将建立邻接(毗邻)关系;首先使用不携带数据库目录的DBD进行主从关系选举;之后主优先与从进行DBD目录交换;交换后再使用LSR/LSU/LSack来获取未知的LSA信息;直到邻接间数据库完全一致;生成LSDB表;-链路状态数据库(该网络所有LSA的集合)
4、当数据库的同步完成后:本地将所有的LSA进行组合;生成有向图—>最短路径树将最佳路径加载到本地的路由表中;网络收敛完成,hello包周期保活;之后的每30min邻接关系间周期比对下一数据库目录;(查漏补缺)

6、OSPF网络类型

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

OSPF支持的网络类型:

· 点到点网络(PPP/HDLC GRE , 串线)

· 广播型多路访问网络(BMA , 以太网)

· 非广播型多路访问网路(NBMA,MGRE)

· P2MP网络

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

img

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

7、DR、BDR

img

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

n(n-1)/2

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

img

· 为减小多路访问网络中的 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的泛洪:

img

假设网络已经完成了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)的概念
单区域存在的问题:

img

设想一下,如果OSPF没有区域的概念,或者整个OSPF网络就是一个区域,那么会有什么问题?在一个区域内,LSA会被泛洪,并且同一个区域的OSPF路由器,关于该区域的LSA会同步,这样一来,如果整个网络就一个单独的区域的话,如果规模非常庞大,那么LSA的泛洪会很严重,OSPF路由器的负担很大,因为OSPF要求区域内的所有路由器,LSDB必须统一,这样以便计算出一个统一的、无环的拓扑;
区域内部动荡会影响全网路由器的SPF计算;
LSDB庞大,资源消耗过多,设备性能下降,影响数据转发;
每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总。

OSPF多区域:

img

基于上述原因,OSPF设计了区域area的概念
多区域的设计减少了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的
在区域边界可以做路由汇总减小了路由表
充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由
多区域提高了网络的扩展性,有利于组建大规模的网络

OSPF区域中的骨干区域area0:

img

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

OSPF路由器的角色

img

OSPF路由器的角色:
区域内路由器Internal Router
区域边界路由器Area Border Router
骨干路由器Backbone Router
AS边界路由器AS Boundary Router


三、OSPF LSAs及特殊区域
1、前言

前面我们已经介绍过了,对于OSPF这类的链路状态路由协议而言,LSA链路状态通告是工作在底层、最为关键、最为核心的构件,正因为有了LSA,OSPF能够准确的描述网络拓扑并且最终计算出最优的路由。OSPF设计了多种LSA,以便描述网络拓扑及各种类型的路由。

2、实验环境

img

上图是本次我们用于讲解OSPF LSA的网络拓扑,比较简单:

· R1、R2、R3、R4四台路由器运行OSPF。

· 设备接口互联IP如图所示,都是192.168.0.0/16开头的地址段。

· 所有设备配置Loopback0接口,IP地址为x.x.x.x/32,x为设备编号。
但仅在R1及R2上network loopback0接口。

· 所有设备的OSPF RouterID均使用Loopback0接口的IP地址,也就是x.x.x.x

· 在R1、R2、R3所处的LAN中,将R3的GE0/0/0口优先级调高,使之成为DR
我们开始来逐一认识每种LSA:

3、LSA详解
1)LSA类型1-路由器LSA(Router SLA)

每一台运行OSPF的路由器均会产生1类LSA,1类LSA怎么理解?其实很简单,就是每台路由器描述一下自己“家门口的状况”,并且只会告诉给“全村的人”(本区域内泛洪)。

1类LSA主要的功能有以下两点:

描述路由器的特殊角色,如Virtual-link、ABR、ASBR:
这是通过1类LSA中相关的V、B、E位的置1来体现的,例如如果本台设备是ABR,那么它产生的1类LSA中B位会置1。
描述本路由器在某个区域内部的直连链路(接口)及接口COST值。

img

例如上图中,所有OSPF路由器都会产生1类LSA,并且在本区域内泛洪。我们以R1举例,它会产生一个类型1的LSA,那么在这个LSA1中,包含两个链路的描述,一个用于描述Loopback接口以及接口的COST值,另一个是描述GE0/0/0接口以及COST值。这个1类LSA会在area1内泛洪。

我们首先来看一下R1的LSDB:

[R1] display ospf lsdb
OSPF Process 1 with Router ID 1.1.1.1
Link State Database
Area: 0.0.0.1
Type   LinkState ID  AdvRouter Age Len  Sequence  Metric
Router  2.2.2.2     2.2.2.2   527 48  80000005  1
Router  1.1.1.1     1.1.1.1   562 48  80000006  1
Router  3.3.3.3     3.3.3.3 775 36  80000007  1
Network  192.168.123.3 3.3.3.3  816 36  80000003  0
Sum-Net  192.168.34.0  3.3.3.3  771 28  8000000
  • 76
    点赞
  • 541
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值