一、OSPFv2原理详解

一、动态路由协议基本原理

1.1概述

——————————————————————————————————————————————————————————

在了解OSPF之前呢,我们先回顾下动态路由协议的基础。文章的3.5内容是重点。

虽然静态路由在某些时刻非常有用,但是必须手工配置每一条路由条目,对于大中型的网络或拓扑经常改变的情况,配置和维护静态路由就显得比较繁杂了,因此使用动态路由是必要的。

动态路由是网络中路由器之间相互通信,传递路由信息,利用收到的路由信息更新路由表的过程,它能实时适应网络结构的变化。如果路由更新信息表明网络发生了变化,路由选择软件会重新计算路由,并发出新的路由更新信息。这些信息通过各个网络,引起各路由器重新启动其路由算法,并更新各自的路由表以动态的反映网络拓扑的变化。

一个路由协议呢至少要具备以下几个必要的步骤:
1、向其他路由器传递路由信息。
2、接收其他路由器的路由信息。
3、根据收到的路由信息计算出每个目的网络的最优路径,并生成路由表。
4、根据网络拓扑的变化及时做出反应,调整路由生成新的路由表,同时把拓扑变化以路由信息的形式向其他路由器宣告。

——————————————————————————————————————————————————————————

1.2.度量值

当达到同一个网段有两个或两个以上不同路径的时候,动态路由协议会选择一条最优路径传输数据,路有协议是如何度量路径的优劣呢?。
在这里插入图片描述

** 不同的路由协议使用不同的度量,有时还使用多个度量。RIP由于有很多缺陷,不过多的去介绍,现实中应用的很少。**

1、跳数(Hop Count):度量可以简单的记录路由器的跳数,如图:AR2要到达192.168.1.0网段,如果选择跳数作为度量值来衡量链路的优劣,那么就会选择跳数比较少的路径转发数据,即AR2-AR3-192.168.1.0网段。

但这并不是最优的选择,AR2到AR3链路只有10M,而AR2-AR1-AR3链路有100M。跳数是典型的RIP路由器计算路由的方式。

2、带宽(BandWidth):度量将会选择高宽带路径,而不是低宽带路径,如图,如果将带宽作为度量值,选择的路径应该是AR2-AR1-AR3。

然而带宽本身可能不是一个好的度量,例如,AR1-AR3的链路流量满载,那么与一个10M的空闲链路比谁更好呢?或者与一条高带宽但时延也很大的链路相比又如何呢?

3、负载(Load):度量反映了占用沿途链路的流量大小,最优路径应该是负载最低的路径,不像跳数和带宽,路径上的负载会发生变化,因而度量也会跟着变化,需要注意,如果度量变化过于频繁,路由摆动(最优路径频繁变化)可能会经常发生。路由摆动会对路由器的CPU、数据链路的带宽和全网稳定性产生负面影响。

4、时延(Delay):度量数据包经过一条路径所花费的时间,使用时延作为度量值的路由选择协议将会选择使用最低时延的路径作为最优路径。

5、成本(Cost):用来描述路由优劣的一个通用术语,最小成本(最高成本)或最短(最长),仅仅指的是路由协议基于自己特定的度量对路径的一种看法,可以手工对Cost进行定义。不管Cisco、华为、H3C等都有一张链路成本关系表。各家厂商根据自己的算法会产生不同的值,但意义相同。
——————————————————————————————————————————————————————

1.3.收敛

动态路由选择协议必须包含一系列过程,这些过程对于路由器向其他路由器通告本地直连网络,接收并处理来自其他路由器的同类信息,中继从其他路由器接收到的信息。路由选择协议还需要定义决定最优路径的度量。

对路由选择协议来说,网络上所有路由器的路由表中可达信息必须一致,使所有路由表都达到一致状态的过程叫收敛(Convergence)。

全网实现信息共享以及所有路由器计算出最优路径所花费的时间的总和就是收敛时间。

———————————————————————————————————————————————————————————

1.4.静态和动态路由

通过动态路由的学习,感觉动态路由协议要比静态路由协议好,动态路由协议就是自动监测并随着网络拓扑的变化而更新路由表。静态路由协议对于大中型网络来说管理是困难的,但在小型网络中配置静态路由是十分方便的。

静态路由和动态路由都有各自的特点和适用范围,在网络中静态路由和动态路由互相补充。在所有路由中,直连路由最优,静态其次,当一个包在路由路径选择时,路由器首先查找静态路由,如果查到根据相应的静态路由进行转发分组,否则再查找动态路由,当静态和动态发生冲突时,以静态为准。

第二句话描述的其实是Cisco路由选择的顺序。而非华为路由选择的顺序。

Cisco路由器规定的路由协议优先级为: 直连DIRECT 0,静态STATIC 1,OSPF 110,IS-IS 115,RIP 120,OSPF ASE 150,OSPF NSSA 150。
HUAWEI路由器规定的路由协议优先级为:直连DIRECT 0,OSPF 10,静态STATIC 60,RIP 100,OSPF ASE 150,BGP 170。

更多优先级请查阅各厂商手册。

——————————————————————————————————————————————————————

二、动态路由协议分类

在共同管理域下的一组运行相同路由协议的路由器的集合为一个自治系统(Autonomous System ,AS)。在互联网中,一个自治系统是一个有权决定本系统使用哪种路由协议的单位,它可以是一个企业、一座城市、一个电信运营商。随着网络的发展,上述对AS的定义已经不是十分的准确了,网络的发展使网络之间经常会出现网络合并情况,导致同一个自治系统中使用的路由协议越来越多,所以自治系统的定义应该是在共同管理下的互联网络。
——————————————————————————————————————————————————————

2.1内部和外部网关协议

——————————————————————————————————————————————————————

2.1.1.内部网关协议

内部网关路由协议(IGP):用于在单一自治系统AS内决策路由。内部网关路由协议包括RIP、OSPF、IS-IS等等。目前使用最多的内部网关协议是OSPF。

2.1.2.外部网关协议

与内部网关路由协议相对应的叫做外部网关路由协议(EGP):外部网关路由协议用于在多个自治系统AS之间执行路由。例如:GBP协议就是外部网关路由协议。

在这里插入图片描述

IGP用来解决AS内部通信的,而EGP用来解决AS间通信的。

————————————————————————————————————————————————————————

2.2.距离矢量和链路状态路由协议

常见的路由协议可分为距离矢量路由协议和链路状态路由协议。其中距离矢量路由协议依据从源网络到目标网络所经过的路由器的个数来选择路由,典型的协议如:RIP和IGRP。链路状态路由协议会综合考虑从源网络到目标网络各条路径的情况来选择路由,典型的协议如:OSPF和IS-IS。

2.2.1.距离矢量路由协议

距离矢量名称的由来是因为路由是以矢量(距离、方向)的方式被通告出去的。其中距离是根据度量定义的,方向是根据一下跳路由器定义的。例如:朝下一跳路由器X的方向可以达到目标A,据此5跳之远。这个表述隐含着每个路由器向邻接路由器学习它们所观察到的路由信息,然后再向外通告自己观察到的路由信息。因为每个路由器在信息上都依赖于邻接路由器,而邻接路由器又从它们的邻接路由器哪里学习路由,依次类推,所以距离矢量路由选择有时被认为是:依照传闻进行路由选择、

2.2.2.链路状态路由协议

距离矢量路由协议所使用的信息可以比喻为路标提供的信息,而链路状态路由协议像是一张公路线路图。链路状态路由器是不容易被欺骗而作出错误的路由决策,因为它有一张完整的网络图。每台路由器都会产生一些关于自己、本地直连网络以及这些链路状态的信息。这些信息从一台路由器传送到另一台路由器,每台路由器都做一份信息备份,但是绝不改动信息。最终目的是每台路由器都有一个相同的有关网络的信息,并且每台路由器可以独立的计算各自的最优路径。
—————————————————————————————————————————————————————

三、OSPF协议基本概念

OSPF动态路由协议(Open Shortest Path First,开放式最短路径优先协议)。OSPF具有更适用于规模较大的网络环境,收敛速度快,依据带宽来计算路径成本的优点,因此在实际环境中OSPF被广泛应用。

链路状态路由协议通过与直连路由器建立邻接关系,互相传递链路状态信息,来了解整个网络拓扑结构。在链路状态信息中,包含哪些链路,这些链路与那个路由器相连,连接的路径成本是多少等信息,因此在链路状态路由协议收敛后,一个路由器可以了解本区域完整的链路信息。运行链路状态路由协议的路由器就好像各自绘制自己所了解的网段信息,然后通过与邻近的路由器建立邻接关系,相互交流链路信息,学习整个区域内的链路信息,来绘制出整个区域内的链路图,在一个区域内所有路由器都保存着完全相同的链路状态信息。

在OSPF协议的了解中,将会涉及怎么配置和检查OSPF,OSPF不同种类区域,如末梢区域、完全末梢区域、骨干区域等,这些区域使用不同的链路状态通告LSA(OSPF使用LAS更新路由条目)来同其他OSPF网络交换信息。还有一些重要术语应该清楚:邻居、邻接关系、自治系统、泛洪等。除此还需要了解OSPF的一些其他配置,如:路由重分发、虚链路、地址汇总等。

OSPF协议具有以下特点:
1、适应范围:OSPF支持各种网络规模,最多可支持几百台路由器。
2、快速收敛:如果网络拓扑结构发生变化,OSPF立即发送更新报文,使这一变化在自治系统中同步。
3、无自环:由于OSPF通过收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成路由环路。
4、子网掩码:OSPF在描述路有时携带了掩码,所以不会受自然掩码的限制,对VLSM提供很好的支持。
5、区域划分:OSPF协议允许自治系统的网络被划分成区域来管理,减少网络带宽的占用。
6、等值路由:OSPF支持到达同一目的地址的多条等价路由。
7、路由分级:OSPF使用四类不同的路由,按照优先顺序来说:区域内路由、区域间路由、第一类外部路由及第二类外部路由。
8、支持验证:支持基于接口的报文验证以保证路由的安全性。
9、组播发送:OSPF在有组播发送能力的链路层上以组播形式发送协议报文,即达到了广播的作用,又最大限度的减少了对其他网络设备的干扰。

—————————————————————————————————————————————————————

3.1.OSPF协议工作过程

作为典型的链路状态协议,OSPF协议的工作过程包含:邻居发现、路由交换、路由计算、路由维护等阶段。在这个过程中,主要涉及三张表分别是:邻居表、LSDB表、路由表。

3.1.1.邻居表

运行OSPF协议的路由器以组播的方式发送Hello报文来发现邻居,收到Hello报文的邻居路由器检查报文所定义的参数,如果双方一致则形成邻居关系。邻居表会记录所有建立邻接关系的路由器。路由器会定时向自己的邻居发送Hello报文,如果一定周期内没有收到邻居的回应报文,就认为邻居失效,便将它从邻居表中删除。

3.1.2.链路状态数据库LSDB

LSDB有时也称为拓扑表,根据协议规定,运行OSPF协议的路由器之间并不是交换路由表,而是交换彼此对链路状态的描述信息。交换完成后,所有同一区域的路由器拓扑表中都具有当前区域的所有链路状态信息,并且都是一致的。

3.1.3.路由表

运行OSPF协议的路由器在获得完整链路状态描述后,运行SPF算法进行计算,并且将最优路由加入到OSPF路由表中。

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

—————————————————————————————————————————————————————

3.2.OSPF计算路由步骤

OSPF协议计算路由的步骤主要为三个主要步骤。

步骤1:生成LSA描述自己的接口状态。

每台运行OSPF的路由器都根据自己周围的拓扑结构生成LSA(链路状态通告),LSA中包含了接口状态(UP或DOWN)、链路开销、IP地址/掩码等信息。OSPF路径的开销与接口带宽关系密切,此外,为了对协议选路的结果进行人工干预,路由器也支持通过命令来指定接口的开销值。

步骤2:同步OSPF区域内每台路由器的LSDB。

OSPF路由器通过交换LSA实现LSDB的同步。由于一条LSA对一台路由器或一个网段结构的描述,整个LSDB就形成了整个网络拓扑结构的描述。这张图是对网络结构的真实反映,OSPF区域内所有路由器得到的都是一张完全相同的图。

步骤3:使用SPF计算出路由。

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

—————————————————————————————————————————————————————

3.3.OSPF分层结构

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

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

OSPF协议是通过将自治系统划分为不同的区域(Area)来解决上述问题。如图:
在这里插入图片描述
区域是从逻辑上将路由器划分为不同的组,每个组用区域号AREA ID来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须指明属于哪一个区域。

——————————————————————————————————————————————————————————

3.3.1.区域(Area)

对OSPF划分区域后,并非所有的区域都是平等关系。其中有一个区域其区域号是0,通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。

对此OSPF有两个规定:

1、所有非骨干区域必须与骨干区域保持连通。
2、骨干区域自身也必须保持连通。

OSPF协议的区域划分可以带来3个好处。

1、减少域内LSA的数量:在进行区域划分之后,OSPF路由器的LSDB不再需要维护所有区域的链路状态信息,只需维护本区域内的链路状态信息。维护的LSA数量减少了,对路由器的性能要求也降低了。
2、便于管理:功能性和地理位置相同的路由器,往往有着相同的路由选择需求。根据实际情况,比如:各个省份的路由器划分在不同的区域内,又比如,根据园区内的每栋楼划分。也可以根据功能的不同划分,如服务器区,核心区,网管区等等。这个根据实际情况进行规划。
3、减少路由震荡的影响:可以对部分区域进行特殊配置,或在区域边缘设置路由器和路由过滤等策略,将路由震荡控制在区域内,减少其对自制系统内其他区域路由器的影响,降低其他区域路由器SPF算法反复计算的次数。

————————————————————————————————————————————————————————————

3.3.2.自治系统

OSPF路由器根据在AS中的不同位置,可以分为三大类。

在这里插入图片描述

区域内路由器(Internal Router):
该类路由器的所有接口都属于同一个OSPF区域。

区域边界路由器ABR(Area Border Router):
该类路由器可以同时属于两个以上区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑连接。

自治系统边界路由器ASBR(AS Boundary Router):
与其他AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR,只要一台OSPF路由器引入了外部路由的信息,它就称为ASBR。

————————————————————————————————————————————————————————————

3.4.Router ID与网络类型

Router ID是一个32位无符号整数,运行OSPF协议的路由器都要了解每条链路是连接在哪个路由器上的,因此就需要一个唯一的标识来标记OSPF网络中的路由器,这个标识成为Router ID。在启动了OSPF协议之前,首先检查Router ID的配置。

如果当前设备配置了Loopback接口,将选取所有Loopback接口上数值最大的IP地址作为Router ID。
如果当前设备没有配置Loopback地址,将选取它所有已配置IP地址且链路有效的接口上数值最大的IP地址作为Router ID。

**实际应用,都会配置Loopback接口作为Router ID。

OSPF根据链路协议分类将网络分为以下4种类型:

广播(Broadcast)类型

当链路层协议是Ethernet、FDDI时,OSPF缺省认为网络类型是广播类型。在该类型网络中,通常以组播地址形式(224.0.0.5|预留的IP组播地址,224.0.0.6|DR预留IP组播地址)发送Hello报文、LSU报文和LS Ack报文,或者以单播形式发送DD报文和LSR报文。

NBMA(Non-Broadcast Multi-Access)类型

当链路层协议是帧中继、ATM或X.25时,OSPF默认的网络类型为NBMA。在该类型网络中,以单播形式发送协议报文。Hello报文、DD报文、LSR报文、LSU报文以及LSA ck报文。

**这些网络类型基本都淘汰了。

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

没有一种链路层协议会被默认为是P2MP类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。以组播形式224.0.0.5发送协议报文。Hello报文、DD报文、LSR报文、LSU报文以及LSA ck报文。

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

当链路层协议是PPP、HDLC和LAPB时,OSPF默认网络类型为P2P。在该类型中,以组播形式224.0.0.5发送协议报文。Hello报文、DD报文、LSR报文、LSU报文以及LSA ck报文。

————————————————————————————————————————————————————————

3.5.OSPF报文类型

OSPF有五种类型的协议报文。

3.5.1.OSPF报文头格式

OSPF5种报文都有相同的头格式。
在这里插入图片描述

Version: OSPF版本号。OSPFv2来说,其值为2。8bit。
Packet Type: OSPF的五种报文类型。8bit。
Packet Length: OSPF报文总长度,包括头部在内。16bit。
Router ID: 发送该报文的路由器标识。32bit。
Area ID: 发送该报文所属区域。32bit。
Checksum: 包含除了认证字段的整个报文的校验和。16bit。
AuType: 验证类型,0:不验证,1:简单认证,2:MD5认证。16bit。
Authentication: 当验证类型0时,不做定义,类型为1时此字段作为密码信息,类型2时,此字段包括Key ID、MD5验证数据长度和序列号信息。

抓包看下OSPF报文的头部格式。
在这里插入图片描述

——————————————————————————

3.5.2.Hello报文:

周期性发送,用来发现和维护OSPF邻居关系。Hello报文是最常用的一种报文,作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。

在这里插入图片描述

Network Mask: 发送Hello报文的接口所在网络的掩码。32bit。
HelloInterval: 发送Hello报文的时间间隔,默认为10秒。16bit。
Options: 可选,E:允许Flood AS-External-LSAs; MC:转发IP组播报文;N/P处理Type7LSA,DC:处理按需链路。8bit。
Rtr Rri: DR优先级,默认为1。如果为0,代表不能参与DR/BDR选举。8bit。
RouterDeadInterval: 失效时间,默认40秒。32bit。
Designated Router: DR的接口地址。32bit。
Backup Designated Router: BDR的接口地址。32bit。
Neighbor: 邻居,以Router ID标识。 32bit。

邻居还没建立,所以没Neighbor参数。
在这里插入图片描述

————————————————————————————

3.5.3.DD报文(Database Description Packet):

描述本地LSDB的摘要信息,用于两台路由器进行数据库同步。两台路由器在邻接关系初始化时,用DD报文来描述自己的LSDB,进行数据的同步。报文内容包括LSDB中每一条LSA的Header。LSA Header只占一条LSA的整个数据量的一小部分,对端路由器根据LSA Header就可以判断出是否已有这条LSA。

在这里插入图片描述

Interface MTU: 在不分片情况下,此接口最大可发出的IP报文长度。16bit。
Options: 可选项,前面已经介绍过了。8bit。
I: 当发送多个DD报文时,如果这是第一个DD报文,则为1,否则为0。1bit。
M(More): 当发送多个DD报文时,如果这是最后一个DD报文,则为0,否则为1,表示后续还有。1bit。
M/S(Master/Slave): 相互交换DD报文时,先确定双方的主从关系。值为1:Master。1bit。
DD Sequence Number: DD报文序列号,主从双方利用序列号来保证DD报文传输的可靠性和完整性。32bit。
LSA Headers: 该DD报文中所包含LSA的头部信息。

**两台路由器都使能OSPF协议后,首先发送hello报文发现邻居,邻接关系建立成功后,其次发送DD报文,描述各自的LSDB,同步数据库。
第一个DD报文。I:1。M:1。M/S:1。第一个DD报文,而且不是最后一个。
在这里插入图片描述
第二个DD报文
在这里插入图片描述
最后一个DD报文,I、M、MS,都为0。DD报文协商的最后一个报文携带了LSA类型为1的LSA报文头部信息。
在这里插入图片描述

——————————————————————————————

3.5.4.LSR报文(Link State Request Packet):

向对方请求所需的LSA,只有在双方成功交换DD报文后,才会向对方发出LSR报文。相互交换完DD报文后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA已经失效的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需LSA摘要。当两个LSA一样时,需要根据LSA中的信息来判断所需要的LSA的新旧。

在这里插入图片描述

LS Type: LSA的类型号。32bit。
Link State ID: 根据LSA中的LS Type和LSA Description在路由域中描述一个LSA。32bit。
Advertising Router: 产生此LSA的路由器的Router ID。32bit。

双方都会交换LSR报文。
在这里插入图片描述
在这里插入图片描述

——————————————————————————————

3.5.5.LSU报文(Link State Update Packet):

向对方发送其所需要的LSA。LSU报文用来向对端路由器发送所需要的LSA,内容是多条LSA的集合。LSU报文在支持组播和广播的链路上是以组播形式将LSA传送出去。为了实现Flooding的可靠性传输,需要LSAck报文对其确认。没有收到确认报文进行重传。

在这里插入图片描述

Number Of LSAs: LAS的数量。32bit。
在这里插入图片描述

两个路由器各发布了两个接口,会进行多次LSU的组播通告。

————————————————————————————————————

3.5.6.LSAck报文(Link State Acknowledgment Packet):

LSAck报文用来对接收到的LSU报文进行确认。内容是需要确认LSA的Header。LSAck根据报文不同的链路以单播或组播形式发送。

在这里插入图片描述

Number Of LSAs: LAS的数量。32bit。

在这里插入图片描述
双方会多次确认,且一个LS Ack可以确认多个LSA Header。

OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文,分别是Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。正常的封装顺序是,首先将OSPF报文如HELLO/DD/LSR/LSU/LSACK作为净载荷封装在IP报文中,协议号89,接着将收到的IP报文进行链路层封装。封装上相应的帧头和帧尾,就构成一个完整的链路帧。

——————————————————————————————————————————————————————————

3.6.邻居与邻接关系

在OSPF中,邻居(Neighbors)和邻接(Adjacencies)是两个不同的概念。
OSPF在路由器启动后,通过OSPF接口向外发送HELLO报文,收到HELLO报文的OSPF路由器会检查报文中所定义的一些参数。如果双方一致就会形成邻居关系。
形成邻居关系的双方并不一定都能形成邻接关系,这要根据网络类型而定。只有双方成功交换了DD报文,并交换LSA之后,才能形成真正意义上的邻接关系。

3.6.1.建立邻居关系

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

过程为:
首先,两台路由器分别以组播方式224.0.0.5发送OSPF的hello报文,报文中包含了自己的Router ID以及相关的参数协商信息。
其次,两台路由器根据自己收到的hello报文,判断协商的参数是否通过,如果验证、区域等参数一致,那么互相认为邻居已发现。

3.6.2.维持邻居关系

邻居之间周期性的交换hello报文,以确认邻居是否正常工作。在一定时间间隔内,只要能够从邻居收到hello报文,就认为邻居工作正常,继续维持邻居关系。为此OSPF定义了两个计时器。这两个定时器的值对于不同厂商设备对接OSPF时,建立邻居关系有很大作用。

Hello定时器: 接口向邻居发送Hello时间的间隔,OSPF邻居之间的Hello定时器值要保持一致。缺省情况下P2P、广播类型接口发送的hello报文时间间隔10秒。P2MP、NBMA类型接口发送的间隔时间为30秒。
邻居失效定时器: 在邻居失效内,如果接口还没收到邻居发送的hello报文,路由器就会宣告该邻居无效。缺省情况下P2P、广播类型接口邻居失效时间40秒。P2MP、NBMA类型接口邻居失效时间为120秒。

3.6.3.建立邻接关系

在这里插入图片描述
这是两台路由器建立邻接关系的日志信息。经过了这么几种状态。
Down–Init–2Way–ExStart–Exchange–Loading–Full。

Down:邻居状态的初始状态,在过去的Dead-Interval时间内没有收到对方的Hello报文。
Init:已经收到Hello报文,但是该报文中列出的邻居中没有包含我的Router ID(对方并没有收到我发的Hello报文)。
2-Way:双方相互收到了对端发送的Hello报文,建立了邻居关系。两个接口状态是DROther的路由器之间将停留在此状态。掐他情况状态将继续转入高级状态。
ExStart:路由器和它的邻居之间通过互相交换DD报文(并不包含实际的内容,只包含一些标记位)来决定发送时的主从关系。建立主从关系为了保证后续的DD报文交换中能够有序的发送。
ExChange:路由器将本地LSDB用DD报文来描述,并发送给邻居。
Loading:路由器发送LSR报文向邻居请求对方的LSA。
Full:在此状态下,邻居路由器的LSDB中所有的LSA本路由器全都有了,即本路由器和邻居建立了邻接关系。

在这些状态中,只有Down、2-WAY和FULL状态才是稳定的状态。其他状态都是瞬时的中间状态。正常情况下,DR/BDR和DROther路由器的邻居状态应该是稳定在FULL状态,而DROther路由器之间邻居状态应该稳定在2-WAY状态。
在这里插入图片描述

R1 G0/0/1 IP:10.1.1.5/30,R2 G0/0/1 IP:10.1.1.6/30
(1)初始情况下,邻居关系处于DOWN状态,假设R1先开始发送Hello报文,由于当前没有发现邻居,因此它的邻居表是空的,并且DR字段设置为0.0.0.0。(两台路由器同时配置OSPF,双方都会发出Hello包,DR字段都为:0.0.0.0,来发现它的邻居
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)R2收到R1的Hello报文后,将R1添加到自己的邻居表中,同时将R1的邻居状态设为Init。与R1比较Router ID,由于R2的Router ID较大,所以在发送Hello报文中,将DR字段设置为自己的Router ID。(双方都会收到对方的Hello报文,各自把对方添加到自己的邻居表中,同时将比较Router ID。

(3)R1收到了R2发来的Hello报文,在邻居列表中发现了自己的Router ID,因而将邻居表中R2的状态修改为2-Way,R1发送Hello报文,其中邻居列表添加R2的Router ID,将DR字段设置为R2的Router ID。
上图已体现。在实际中,R1和R2同时发送Hello报文请求建立邻居关系后,双方先发送DD报文,以及Hello报文,来对比Router ID。

在这里插入图片描述
在这里插入图片描述

(4)R2检查R1的hello报文,发现自己的Router ID,从而将邻居表中的R1状态也修改为2-Way,**如果R1和R2都是DROther路由器,它们之间的邻居状态会停留在2-Way状态。

(5)R1将邻居表中的R2状态设置为ExStart状态,并且发送一个不包含LSA摘要的DD报文,开始主从关系的协商。这个DD报文的序列号由R1决定,设置为X。1位设置为1。表明这是R1发起的初始化报文。M位被设置为1。表明这不是最后一个DD报文。MS位设置为1。表明R1首先判断自己是Master路由器。这里的Master路由器的作用主要是在交换DD报文的时候,主动发送DD报文,并且控制修改报文的序列号,对应的Slave路由器只能接受Master路由器使用的序列号,被动的发送DD报文。实际看过程的话,是R1和R2都主动发送DD报文,认为自己是Master路由器。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
协商的结果就是R1说它自己是Slave路由器。R2说它自己是Master路由器。
在这里插入图片描述

在这里插入图片描述

(6)R2收到R1的DD报文后,将邻居表中R1的状态也设置为ExStart状态。由于R2的Router ID数值要大于R1,因此R2认为自己应该作为Master路由器,所以它发送的DD报文中同样将MS位设置为1,用来表明自己Master路由器的身份。R2将序列号设置为Y,同时将I位和M位也设置为1。同上

(7)R1同意R2作为Master路由器,因此MS设置为0,表明自己的Slave路由器身份,并且采用RT-2设置的序列号Y开始发送DD报文。这时的DD报文中包含LSA摘要。R1将处于邻居状态中的R2状态修改为Exchange。同上图最后一张图所示

(8)R2收到R1发来的DD报文,将邻居表中R1的状态修改为Exchange,接下来采用Y+1的序列号和R1交换LSA摘要信息。R1和R2对于DD报文中包含的LSA摘要信息,均与自己的LSDB做比较。R2发现所有的LSA信息在LSDB中都存在,因此直接进入FULL状态。R1比较之后,发现LSDB中缺少部分LSA,需要请求这些LSA。于是进行LSA请求、更新、确认三个步骤。如图。这三个步骤都在干嘛,上章有介绍。
在这里插入图片描述

(9)R1将邻居表中的R2状态设置为Loading,同时向R2发送LSR报文,请求自己所缺少的LSA。LSR报文中仅仅包含LSA摘要。

(10)R2收到LSR报文,将请求的LSA全部内容以一条或多条LSU报文发送给R1。

(11)R1将收到的LSA更新放入自己的LSDB,直到所有请求的LSA都获得之后,它将邻居表中的R2状态设置为FULL。

至此,完整的OSPF邻接关系才算建立完成。

看了这个过程以及前章节的内容,其实有些东西是要去自己理解的。想象它们如何进行邻接关系的建立。自己要去验证的话,有些过程中的细节东西没法查看。在抓包的时候,其实可以过滤源来看。。10.1.1.5一个过程,10.1.1.6一个过程。

在这里插入图片描述
在这里插入图片描述

不同厂家设备互接时,可能默认的Hello参数不同,导致OSPF邻居关系无法建立。
当两台路由器运行OSPF的接口MTU值不匹配会导致OSPF停留在ExStart/ExChange状态。
接口网络类型不一致,会导致OSPF邻居无法建立。
由于误操作,将所有路由器的Priority值都设置为0,路由器会停留在2-Way状态。
Hello时间大于Dead时间,会导致接收的邻居关系终止报文要早于Hello报文的邻接关系,会出现反复建立现象。

————————————————————————————————————————————————————

3.7.邻居与邻接关系

在广播网络中,任意两台路由器之间都要传递路由信息。如果网络中N台路由器,则需要建立N(N-1)/2个邻接关系。这使得任何一台路由器的路由变化都会对导致多次传递,浪费了资源。为了解决这一问题,OSPF协议定义了指定路由器DR,所有路由器都只将信息发送给DR,再由DR将网络链路状态广播出去。这里记住一点,DR是基于端口的,不是基于路由器的也跟区域无关。

如果DR由于某种故障而失效,网络中的路由器必须重新选举DR,并与新的DR同步。这就需要较长的时间,因为又要重新选举,这段时间内路由的计算会不正确的。为了能缩短这个过程,OSPF提出了BDR,备份指定路由器的概念。

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

除了DR和BDR之外的路由器(DROther)之间将不再建立邻接关系,也不交换任何路由信息。
———————————————————————————————————————————————————————————

如图所示:在没有采用DR/BDR之前,路由器的数量为n(n-1)/2,图中5台路由器邻居关系数量为5(5-1)/2=10。而采用DR/BDR机制后,路由器之间的邻居关系数量为2(n-2)+1,图中5台路由器的邻居关系数量为2(5-2)+1=7。也就是说建立7条邻居关系就OK了。

在这里插入图片描述
我也不知道这个公式是不是有毛病,死活算出来是9条。第二个是7条。不管怎么算, 总之有DR和BDR比之前开销少了。

——————————————————————————————————————————————————————
在选举之前,要搞明白几点。
选DR/BDR跟区域无关,只和路由器的接口有关。可能一个路由器的1号口是DR、2口就是BDR、3口也需是DROther。
广播网和NBMA网会选DR/BDR,其他网络不选。以太网属于广播网,PPP属于点到点。
如果两个路由器直连,那么它之间就是一个广播网。
在这里插入图片描述
如果N个路由器通过交换机二层接口连在一起的话,这N个路由器就构成一个广播网。

在这里插入图片描述
再次纠正:如第一个图。AR30和AR31,他俩其中必定有1个接口是DR、一个接口是BDR,假设AR30是DR。我们可以说在AR30和AR31之间的网络里AR30是DR,而不能绝对的说AR30就是DR。把这逻辑搞清楚就行了。

———————————————————————————————————————————————————————————

DR和DBR不是人为指定的,而是由本网段中所有路由器共同选举的。路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格。本网段内DR优先级大于0的路由器都可以作为候选人。

选举中使用的选票就是Hello报文。每台路由器将自己选出的DR写入Hello报文中,并发给网段上其他路由器。相处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如优先级相等,则Router ID大者胜出,如果一台路由器优先级为0,则它不会被选举DR/BDR。

———————————————————————————————————————————————————————————

3.7.1.DR/BDR选举的原则

———————————————————————————————————————————————————————————
选举制: DR是各路由器选出来的,而非认为指定,虽然管理员可以配置Priority干预选举过程。
如图:假设4台路由器同时进行DR/DBR选举,在没有对优先级进行配置情况下,所有路由器的优先级都是默认一致的。只能根据Router ID来选举DR/BDR。AR35的Router ID值最大,因此被选举DR。AR34的值其次,因此被选举为BDR,AR32和AR33路由器则被选举为DROther。
在这里插入图片描述

稳定压倒一切: DR一旦当选,除非路由器故障,否则不会更换,即便在新增加一台路由器,配置优先级更高。但也只能成为DROther。

世袭制: DR选出的同时也选出BDR来,DR故障后,由BDR接替DR成为新的DR。假如此时同网段中的路由器有比BDR高,也不能成为DR。

先选举BDR,再选举DR: 再具备选举资格的路由器中,优先级最高的路由器被选为BDR,优先级相同则Router ID大的优先。BDR选举成功后,进行DR选举。如果同时有一台或多台路由器宣称自己为DR,则优先级最高的将宣告为DR,优先级相同则Router ID大的优先。如果网络没有路由器宣称自己为DR,则将已有的BDR推举为DR,然后再次选出新的BDR。DR/BDR选举成功后,OSPF路由器会将DR和BDR的IP地址设置到Hello包的DR和DBR字段上,表明该区域内的BDR和DR已经有效。

————————————————————————————————————————————————————

3.8.OSPF LSDB

当网络拓扑发生变化时,感知到变化的OSPF路由器会生成相应的LSA更新报文,发送到区域中。当运行OSPF协议的路由器收到一条LSA更新报文的时候。系统会首先在LSDB中查找此条LSA。如果找不到,就认为是一条新的LSA,加入LSDB。

如果查到了此条LSA,那么比较LSA序列号,如果收到的序列号更大,那么认为这条LSA有了更新,将这条LSA的计时器进行刷新,同时更新序列号。如果收到的新LSA序列号等于或小于LSDB中LSA的序列号,那么就认为收到的LSA可能是由于网络拥塞或者重传的陈旧LSA,不会对LSDB的LSA做任何操作,并且将收到的LSA更新报文丢弃。

另外为了保证LSDB及时更新,LSDB里面LSA都设定有老化时间,默认1小时。如果1小时内LSA没有被更新,则LSA将会老化同时被移除。默认情况下,LSDB每隔半小时刷新一次所有的LSA,此时,LSA序列号会加1,同时老化计时器会重置。

当路由器想把一条LSA从LSDB删除,可以将老化时间设置为最大老化时间,然后向所有路由器发送更新。广播网络中,当链路发生变化,主要通过DR路由器发送更新报文,以便其他的路由器更新自己的LSDB。

例如:R3和R4分别作为DR和BDR,负责LSA更新报文的传播。R1路由器发现链路发生变化,以组播的方式224.0.0.6将LSU报文发送给R3和R4,组播地址224.0.0.6表示只有DR和BDR能够接收到这个报文。R3作为DR,收到报文后,发送LSAck确认,同时使用组播地址224.0.0.5将LSU报文发送给所有OSPF路由器。

————————————————————————————————————————————————————

3.9.OSPF Cost值

在OSPF路由协议中,最短路径树长度,即OSPF路由器至每一个目的路由的距离称为OSPF的Cost值。Cost值应用于每一个启动了OSPF的链路,范围是1-65535,16bit的正数,Cost值越小,路径越优,OSPF选择路径是依靠整个链路的Cost值的总和。

10M以太网链路的花费是10,100M链路的花费是1,千兆以上的链路花费只能是1。现在基本全千兆,核心都万兆了。还有40GE等等。华为ospf默认Cost值是1。现在基本上不存在对于Cost值的修改。除了在特定情况下,需要指定某条链路。

比如R1和去往目的R2和R3都可以走,要让走R2,直接把和相连的R2接口Cost值修改大点就行了。。。

修改ospf接口Cost
在这里插入图片描述
也可以通过改变带宽值来影响Cost值。计算公式为:接口开销=带宽参考值/接口带宽。
在这里插入图片描述

dis ospf lsdb:Metric度量值依据的就是Cost值。也可以使用dis ospf routing。查看Cost。
在这里插入图片描述
在这里插入图片描述

————————————————————————————————————————————————————

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值