HCIE:详解OSPF,从基础到高级特性再到深入研究

目录

前言

一、OSPF协议基本原理

简介

基本原理

OSPF路由器类型

OSPF网络类型

OSPF报文类型和封装

OSPF邻居的建立的维护

DR和BDR的选举

伪节点

LSDB的更新

OSPF的配置

二、OSPF的高级特性

虚连接(Virtual-Link)

OSPF的LSA和路由选择

OSPF的特殊区域

Stub区域:

[Totally Stub区域:](#Totally Stub区域:)

[NSSA区域和Totally NSSA区域](#NSSA区域和Totally NSSA区域)

OSPF路由聚合

OSPF安全特性

报文验证

禁止接口发送OSPF报文

过滤OSPF的路由和LSA

三、深入研究OSPF

OSPF的域间防环规则

OSPF的收敛过程

OSPF收敛速度控制

按优先级收敛

路由的撤销

智能定时器(本地有效)

[IP FRR---快速重路由](#IP FRR—快速重路由)

SPF算法

[Database Overflow](#Database Overflow)

OSPF主备双出口

OSPF双塔骑兵

LSA头部信息

OSPF的故障诊断

其他特性

OSPF与BGP联动

[Forwarding Address](#Forwarding Address)

GR平滑重启

NSR不间断路由

四、补充

OSPF的Router-ID冲突分三种情况

OSPF的多进程

常见问题


前言

本文为HCIE学习时的笔记汇总整理,有不对的地方可以私信或评论,确认后会修改~

一、OSPF协议基本原理

简介

OSPF(开放最短路径优先)是IETF开发的一个基于链路状态的内部网关协议,目前在互联网上大量的使用。

基本原理

作为典型的链路状态型路由协议,OSPF协议的工作过程包含了邻居发现、路由交换、路由计算和路由维护等阶段;在这些过程中,主要设计到的表有以下三个:

OSPF的"三表"

邻居表:

运行了OSPF协议的路由器以组播方式(目的地址为:224.0.0.5)发送Hello报文来发现邻居。收到Hello报文的邻居路由器检查报文中所定义的参数,如果双方一致,则建立邻居关系并写入到邻居表中。邻居表记录了所有已建立了邻居关系的路由器,包括相关描述和邻居状态,路由器会定时的向自己的邻居发送Hello报文,如果在一定的周期内没有收到邻居的回应报文,则认为改路由器失效,从邻居表中删除对应邻居。

.

链路状态数据库(LSDB):

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

.

OSPF路由表:

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

OSPF 基于 Dijkstra 算法,也称为SPF(Shortest Path First,最短路径优先)算法。这种算法的特点是,路由器收集网络中链路或接口的状态,然后将自己己知的链路状态向该区域的其他路由器通告。

这样,区域内的每台路由器都建立了一个本区域的完整的链路状态数据库。然后路由器根据链路状态数据库来创建它自己的网络拓扑图,并计算生成路由。

在SPF算法中认为,每个运行OSPF的路由器都是一个节点,而路由器上产生的路由则被认为是叶子,挂靠在节点上。

OSPF路由产生的过程

1、建立邻居关系:当一个路由器启动OSPF协议时,它会向周围的路由器发送Hello报文以发现相邻路由器并建立邻居关系

.

2、交换链路状态信息:路由器之间会定期交换链路状态信息(LSA),这些信息包括链路的带宽、延迟、可靠性等状态信息直到该区域内的所有路由器的LSDB同步。同时,每个路由器都会更新自己的链路状态数据库(LSDB)以反映最新的网络状态

.

3、执行最短路径优先算法:基于收集到的链路状态信息(LSDB),路由器会执行最短路径优先算法(SPF,通常是Dijkstra算法)来计算到达每个目的地的最短路径

.

4、生成路由表:根据最短路径算法计算出的结果,路由器会生成路由表。路由表中包含了到达不同目的网络所需经过的下一跳路由器的信息以及路径的度量(COST)

.

5、动态调整:当网络拓扑发生变化时,如链路故障或新的链路添加,路由器会重新执行上述过程,更新链路状态信息并重新生成路由表,确保网络中的数据包可以顺利传输到目的地址

.

6、为了避免网络频繁变化而不断地进行计算最短路径,造成占用大量的系统资源,在默认情况下,OSPF会自动开启PRC(部分路由计算)的功能,当路由发生变化时,路由器不会进行SPT树的计算,只会将变化的路由挂载拓扑上,下一跳指向的是产生路由的节点

.

华为设备只会对3/5/7类LSA直接进行PRC计算,1/2类LSA是无法直接进行PRC计算的,需要先通过I-SPF算法生成SPT树并生成路由后才能进行PRC计算(同区域内network的网络)

.

注意:

1、COST叠加的方向为路由的入接口或数据的出接口

2、当SPF计算出两条去往相同目的,且COST相同的路由时,会形成等价路由(ECMP)

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

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

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

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

1、所有非骨干区域必须同骨干区域相连接,且所有非骨干区域的路由转发必须通过骨干区域进行;

2、骨干区域必须连续;

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

1、减少区域内LSA 的数量:

在进行了区域划分之后,OSPF路由器的LSDB就不需要维护所有区域的链路状态信息,而只需要维护本区域内的链路状态信息。LSDB所维护的LSA 数量减少了,运行 OSPF 协议对于路由器性能的要求也降低了。这样对于性能不是很好的路由器来说,也同样可以运行 OSPF协议。

.

2、便于管理:

功能性和地理位置相同的路由器,往往有着相同的路由选择需求。例如,对于某国家骨干网来说,可以根据地理位置,将各个省份的路由器划分在不同的区域内,也可以根据功能性的需求,将服务器区、测试区、网管区等中的路由器划分在为不同的区域内,对于它们进行集中管理,同时进行路由控制。

.

3、减少路由震荡的影响:

可以对部分区域进行特殊配置,或者在区域边缘设置路由聚合和路由过滤等策略,将路由震荡控制在区域内,减少对于自治系统内其他区域路由器的影响,降低其他区域路由器 SPF 算法反复计算的次数。

OSPF路由器类型

按照在AS内的不同位置,OSPF路由器可以分为以下四类:

OSPF中路由器的四类角色:

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

.

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

.

骨干路由器(Backbone Router):该类路由器至少有一个接口属于骨于区域。因此所有的 ABR 和位于 Area0 的内部路由器都是骨干路由器。

.

自治系统边界路由器(ASBR,Autonomous System Border Router):与其他 AS交换路由信息的路由器称为 ASBR。ASBR 并不一定位于 AS 的边界,它有可能是区域内路由器,也有可能是 ABR。有能力产生Type5 LSA或Type7 LSA的OSPF设备为ASBR。

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

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

Router ID的选择规则

如果当前设备配置了 Loopback接口,将选取所有Loopback接口上数值最大的IP地址作为 Router lD;

.

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

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

OSPF网络类型

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

OSPF网络类型

Broadcast(广播型网络):当链路层协议是 Ethernet、FDDI时,OSPF 缺省认为网络类型是Broadcast。在该类型的网络中,通常以组播形式(224.0.0.5和224.0.0.6--DR)发送协议报文。

.

NBMA(Non-Broadcast Multi-Access,非广播多点可达网络):当链路层协议是帧中继、ATM 或 X.25 时,OSPF 缺省认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。

.

P2MP(Point-to-MultiPoint,点到多点):没有一种链路层协议会被缺省的认为是P2MP 类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将BMA改为点到多点的网络。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文。

.

P2P(Point-to-Point,点到点):当链路层协议是PPP、HDLC 时,OSPF 缺省认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文。
NBMA与P2MP网络之间的区别

从定义上来看,NBMA 网络是指那些全连通的、非广播、多点可达网络。而P2MP网络,则并不需要一定是全连通的。

.

NBMA 是一种缺省的网络类型,如链路层协议是帧中继、ATM或X.25 时,接口默认的网络类型就是 NBMA。而 P2MP 网络必须是由其它的网络强制更改的。最常见的做法是将 NBMA 网络改为 P2MP 网络。

.

NBMA 网络采用单播发送报文,必须手工配置邻居,否则无法正常建立邻居关系,而P2MP 网络采用组播方式发送报文,不需要手工配置邻居,可以依靠协议自身的机制建立邻居关系。

OSPF报文类型和封装

OSPF报文直接封装在IP报文中,协议号为89;

OSPF的五种协议报文

Hello 报文:周期性发送,用来发现和维持 OSPF 邻居关系。内容包括一些定时器的数值、DR(Designated Router,指定路由器)、BDR(Backup Designated Router备份指定路由器)以及自己已知的邻居。

.

DD(Database Description,数据库描述)报文:描述了本地LSDB 中每一条 LSA的摘要信息,用于两台路由器进行数据库同步。

.

LSR(Link State Request,链路状态请求)报文:向对方请求所需的LSA。两台路由器互相交换 DD报文之后,得知对端的路由器有哪些 LSA是本地的 LSDB 所缺少的这时需要发送 LSR 报文向对方请求所需的 LSA。内容包括所需要的 LSA 的摘要。

.

LSU(Link State Update,链路状态更新)报文:向对方发送其所需要的LSA

.

LSAck(Link State Acknowledgment,链路状态确认)报文:用来对收到的LSU进行确认。内容是需要确认的LSA的Header(一个报文可对多个LSA进行确认)

OSPF邻居的建立的维护

OSPF邻居的建立过程(状态机)

1、Down状态:本设备发送Hello报文但是未收到Hello报文(在NBMA网络中,需要手动配置邻居并进入Attempt状态)

.

2、init状态:收到对端设备发送的Hello报文,但邻居字段为空,此时将对端设备的Router ID添加到自己的邻居表中并在下一次的Hello报文中携带该邻居的Router ID;

.

3、2-way:收到对端设备发送的Hello报文,且报文中的邻居字段值为本端设备的Route-ID;

.

Broadcast和NBMA网络下开始选举DR,P2P和P2MP不选举DR;不选出DR的话无法进入以下状态(优先级为0时)

.

4、Exstart状态:双方交换首个数据库描述信息(DD报文)以确定权威性,通过Route-ID协商谁将充当Master(主)和Slave(从)角色。其中确认对方收到DD报文使用的是序号字段(seq)的隐式确认机制。双方首个DD报文中的序列号都由它们自己设置,且I位为,表明这是本端设备发起的初始化DD报文;M位为1表明这不是最后一个DD报文;MS位为1表明首先判断自己为Master设备。

这里的Master设备用于后续主动发送DD报文和修改序列号,对应的Slave设备为被动接受和发送DD报文的设备

.

注意:1、两端设备链路的MTU值不一致时有可能会一直卡在这个状态;2、除了P2P网络类型DD报文使用组播224.0.0.5地址外,其余网络均使用单播方式发送DD报文;

.

5、Exchange状态:收到首个DD报文,经过协商确定Master设备和Slave设备后,将邻居状态设置为Exchange,交换后续的链路状态信息(DD报文),由Master设备发送后续的DD报文给Master设备,且DD报文的I位为0,M位为1,MS位为1,Slave设备发送DD报文的回应报文,如果有一次主设备未收到确认的DD报文就会重新发送该DD报文。

.

注意:两端设备链路的MTU值不一致时有可能会一直卡在这个状态

.

6、Loading状态:发送LSR(链路状态请求)来请求对端路由器的部分链路状态数据库,对方收到请求后会发送LSU(链路状态更新),本端收到LSU后会向对方发送LSAck(链路状态确认)。

.

注意:如果设置了LSA的数量上限,当数量超过这个上限时无法继续学习更多的LSA,就会卡在这个状态

.

7、Full状态:互相交换路由信息,并计算出最短路径,每1800s(30min)会进行一次周期性同步LSDB,如果3600s(1h)未同步就会认为LSA超时

.

通常情况下,4/5/6步通常是瞬时完成的
OSPF邻居建立的条件:

1、Route-ID不同

.

2、Area-ID一致

.

3、认证一致

.

4、网段一致

.

5、特殊区域一致

.

6、Hello、Dead时间要相同

.

7、非静默接口

.

8、网络类型一致

.

9、两端MTU值不一致

.

10、MA网络中优先级不都为0

如果两边的路由器接口网络类型分别为MA和P2P,都运行OSPF可以建立邻居和邻接关系,数据库也可以进行同步,但路由不会被计算(常见的有华为、华三、锐捷设备等)

  • 因为在LSA的Link Type不统一,无法进行路由计算,双方不认可对端发送的LSA;
  • 思科设备网络类型不一致的情况下无法建立Full关系

DR和BDR的选举

在广播网和 NBMA网络中,任意两台路由器之间都要传递路由信息。如果网络中有n台路由器,则需要建立 n(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递浪费了带宽资源。为解决这一问题,OSPF 协议定义了 DR(Designated Router,指定路由器)所有路由器都只将信息发送给 DR(发送给DR时使用224.0.0.6的组播地址),由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)是两个不同的概念,邻居是2-way状态,邻接是Full状态

OSPF 路由器启动后,便会通过 OSPF 接口向外发送 Hello 报文。收到 Hello 报文的 OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。但形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成交换 DD 报文,交换 LSA 并达到 LSDB 的同步之后,才形成真正意义上的邻接关系

DR的选举规则:

1、比较接口优先级,范围为:0-255,越大越优先,0为不参与选举。

.

2、比较Router-ID,以手动配置为准,若没有会自动选择,优先选择最大IP的环回接口,如果没有环回接口就选择最大IP的物理接口。注意:如果设备没有IPV4地址的话就必须手动配置Router-ID。

.

3、DR位置不能抢占,重新配置Router-ID后必须重启OSPF进程才能生效。

.

4、在进入2-way状态后,需要经过40s的时间决定谁是DR,因为MA网络中很可能还会有别的设备加入,但是40s后选出DR就无法抢占了。且如果DR设备故障下线,待恢复后也无法成为DR
OSPF中为什么要选举DR和BDR:

1、简化网络拓扑:在广播性网络中通过选举DR(指定路由器)和BDR(备份指定路由器),可以减少网络中的路由器之间的对等关系,从而简化网络拓扑结构,只有DR和BDR与其他路由器建立邻接关系,其他路由器则只需要与DR和BDR建立邻居关系,从而大大简化了网络拓扑结构。

.

2、提高网络稳定性和可靠性:在OSPF网络中,DR和BDR负责向其他路由器发送LSA更新信息,其他路由器只需要从DR和BDR获取LSA更新信息,而不需要与其他路由器直接交换LSA信息。这种集中管理的方式可以有效减少LSA信息的传输和处理负担,提高网络的效率和可靠性。

.

3、快速响应网络变化:BDR作为DR的备份,当DR失效时,BDR会立即成为DR,继续负责网络的路由信息更新和转发。由于不需要重新选举,并且邻接关系事先已建立,所以BDR替代DR的过程非常短暂,这有助于网络快速响应变化并维持稳定性。

.

4、优化资源利用:通过DR和BDR的选举,可以减少网络中不必要的路由信息交换,从而节省网络带宽和处理资源,优化资源利用。

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

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

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

  • 只有在广播或NBMA类型接口才会选举DR,在p2p或点到p2mp的接口上不需要选举DR。
  • DR 是某个网段中的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是 DR,在另一个接口上有可能是 BDR,或者是 DR Other。
  • 路由器的优先级可以影响一个选举过程,但是当DR/BDR已经选举完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经存在的DR/BDR 成为新的DR/BDR
  • DR并不一定就是路由器优先级最高的路由器接口;同理BDR也并不一定就是优先级次高的路由器接口

伪节点

伪节点(Pseudonode)是一个虚拟节点的概念,主要在多访问网络(如广播型网络:Ethernet)中用于优化和简化路由的LSA(链路状态通告)管理。

在广播或NBMA网络中,所有路由器通过Hello报文交换信息,选举出一个DR和一个备用指定路由器(Backup Designated Router, BDR)。DR负责代表伪节点,而BDR作为冗余机制,确保DR失效时迅速接替工作,但伪节点和DR不是完全等同的概念,可以理解为,伪节点是一种逻辑抽象,而DR是伪节点的实际承担者。

它们的区别在于:

1、伪节点是一个抽象模型,用于简化OSPF多访问网络中的路由表示

2、DR是一个实际角色,负责代表伪节点生成和传播路由信息。

LSDB的更新

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

LSDB的更新

1、系统会首先在LSDB 中查找此条 LSA。如果不能查到,就认为是一条新的LSA,加入LSDB

.

2、如果查到了此条 LSA,那么比较这条 LSA 的序列号。如果收到的新LSA 序列号更大,那么认为这条 LSA 有了更新,将这条LSA的计时器进行刷新,同时更新序列号。

.

3、如果收到的新 LSA 序列号等于或者小于 LSDB 中 LSA的序列号,那么就认为收到的LSA 可能是由于网络拥塞或者重传的陈旧的 LSA,不会对 LSDB 的 LSA 做任何操作并且将收到的 LSA 更新报文丢弃。

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

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

OSPF的配置

1、激活接口

php 复制代码
ospf 1 router-id 1.1.1.1
area 0
network 1.1.1.1 0.0.0.0

在配置过程中宣告地址时使用的是通配符,0表示检查,1表示不检查,作用是激活接口,与邻居收到的路由的掩码无关;0.0.0.0表示精确激活接口,0.0.0.255表示激活一个范围内的所有接口;无论激活时是激活的精确还是范围,对端设备收到的都是接口上网段的路由,比如:GE0/0/1接口的地址是192.168.10.1/24,无论是精确激活还是范围激活,邻居收到的路由都是24位的;

默认的,无论环回接口的掩码是多少位的,将邻居收到的路由都是32位的,因为换回接口默认的网络类型是p2p,如果想让邻居获得其他掩码的路由,需要将环回接口的网络类型修改为broadcast;

被激活的接口会向外发送Hello报文,默认Hello报文的发送周期为10s,邻居私网周期为40s;

2、配置OSPF引入缺省路由

php 复制代码
ospf 1 router-id 1.1.1.1
default-route-advertise <always> <tyep1/2>

执行该命令后,如果本地路由表存在缺省路由,则以5类LSA的形式向邻居下发缺省路由,且在整个AS内传递;

使用always选项可在本地路由表无缺省路由得情况下,以5类LSA的形式向邻居下发缺省路由,且在整个AS内传递;

type1/2选择为设置引入缺省路由的外部路由类型,默认情况下Type1优先于Type2;

注意:引入路由时不会将默认路由引入

3、设置接口开销值

php 复制代码
interface g0/0/1
ospf cost 10

缺省情况下,接口按照 参考带宽/接口带宽计算开销值,最低为1

4、修改参考带宽

php 复制代码
ospf 1 router-id 1.1.1.1
bandwidth-reference 1000

缺省情况下,参考带宽为100

二、OSPF的高级特性

虚连接(Virtual-Link)

OSPF协议规定:

1、骨干区域必须是连续的;

2、所有非骨干区域都必须和骨干区域相连接;

3、所有非骨干区域的路由转发必须通过骨干区域进行;

如果骨干区域并不是连续,而是中间被其他区域所分割;或非骨干区域并没有与骨干区域相连接,而是被其他区域所分割,就会导致OSPF邻居无法正常的学习路由,可以通过Virtual Link进行解决:

OSPF Virtual Link

虚连接是指在两台ABR之间通过一个非骨干区域而建立一条逻辑连接通道。它的两端必须是 ABR,而且必须在两端同时配置方可生效。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区域(Transit Area)

.

虚连接相当于在两个 ABR之间形成了一个点到点的逻辑连接。在这个连接上,和物理接口一样可以配置接口的各参数,如发送Hello 报文间隔等。虚连接建立后,两台 ABR 间通过单播方式直接传递OSPF协议报文。对于传输区域内的路由器来说,虚连接所传输的协议报文是透明的,只是当作普通的IP报文来转发。

.

虚连接的另外一个应用是提供冗余的备份链路。当骨干区域因链路故障不能保持连通时通过虚连接仍然可以保证骨干区域在逻辑上的连通性。

.

配置时需要注意:1、虚连接的目的地址必须是传输区域内可达;2、一段虚连接只能跨域一个区域,如果非骨干区域和骨干区域之间相隔很多区域,则必须在每个区域的两端ABR上分别创建虚连接;

配置虚连接:

php 复制代码
ospf 1 router-id 1.1.1.1
area 1
vlink-peer 1.1.1.1
php 复制代码
ospf 1 router-id 2.2.2.2
area 1
vlink-peer 2.2.2.2 

OSPF的LSA和路由选择

OSPF协议作为典型的链路状态协议,邻居之间传递的并不是路由表,而是链路状态描述信息(LSA)

LSA头部字段主要含义:

LSA头部字段主要含义

LS age:LSA产生后所经过的时间,以秒为单位。LSA在本路由器的链路状态数据库(LSDB)中会随时间老化(每秒钟加1),但在网络的传输过程中却不会

.

LS type:LSA 的类型

.

Link State lD:具体数值根据LSA的类型而定

.

Advertising Router:始发LSA的路由器的ID

.

LS sequence number:LSA的序列号,其他路由器根据这个值可以判断哪个LSA是最新的

.

LS checksum:除了LS age 字段外,关于LSA的全部信息的校验和

.

Lengh:LSA的总长度,包括LSA Header,以字节为单位

在以上字段中,LS Type,Link State ID和Advertising Router三个字段最为重要,可以唯一的标识一个LSA;

LSA的类型:

OSPF 协议中定义了不同类型的LSA。OSPF就是通过这些不同类型的LSA来完成LSDB同步,并且做出路由选择的。

通常情况下,使用较多的LSA类型有第一类、第二类、第三类、第四类、第五类和第七类LSA;

OSPF中常用的LSA

第一类LSA:即Router LSA,描述了区域内部与路由器直连的链路信息,每一台启用了OSPF协议的路由器都会产生,它的内容中包含了这台路由器所有的直连的链路类型和链路开销等信息,并向该区域内的邻居传播;

.

第二类LSA:即Network LSA,由DR产生,描述了连接到一个特定的广播网络或NBMA网络的所有路由器的链路状态。与Router LSA不同的是,Network LSA的作用是保证对于广播网络或者NBMA网络只产生一条LSA;这条LSA内描述其在该网络上连接的所有路由器以及网段掩码信息,记录了这一网段上所有路由器的Router ID,甚至包括 DR 自己的 Router ID。Network LSA也只在区域内传播,由于 Network LSA 是由 DR 产生的描述网络信息的LSA,因此对于 P2P 和P2MP 网络类型的链路,不产生Network LSA

.

第三类LSA:即Summary LSA,是由ABR生成,将所连接区域内部的链路信息以子网的形式传播到相邻区域。Summary LSA实际上就是将区域内部的Type 1和Type 2的LSA信息收集起来以路由子网的形式进行传播。ABR 收到来自同区域其它 ABR 传来的 Summary LSA后,重新生成新的 Summary LSA(Advertising Router改为自己)后继续在整个 OSPF系统内传播。一般情况下,三类LSA的传播范围是除了生成这条LSA的区域外的其他区域。在第三类LSA中,由于直接传递的是路由条目,而不是链路状态描述,因此,路由器在处理第三类LSA的时候,并不是运用SPF算法进行计算,而且直接作为路由条目加入路由表中沿途的路由器也仅仅是修改链路开销

.

第四类LSA:即ASBR Summary LSA,是由 ABR 生成,格式与第三类 LSA 相同,描述相标网络是一个ASBR的Router ID,它不会主动产生,触发条件为ABR收到一个第五类SA,意义在于让区域内部路由器知道如何到达ASBR

.

第五类LSA:即AS External LSA,是由 ASBR产生,描述到 AS 外部的路由信息,它一旦生成,将在整个OSPF系统内扩散,除非个别特殊区域做了相关配置。AS外部的路由信息来源一般是通过路由引入的方式,将外部路由在OSPF区域内部发布。第五类LSA 和第三类LSA非常类似,传递也都是路由信息,而不是链路状态信息。同样的,路由器在处理第五类LSA的时候,也不会运用SPF算法,而是作为路由条目加入路由表中。

.

  • 第一类外部路由:是指接收路由的可信程度较高,并且和OSPF自身路由的开销具有可比性,如RIP路由或者静态路由等,所以到第一类外部路由的开销等于本路由器到相应的 ASBR 的开销与 ASBR 到该路由目的地址的开销之和
  • 第二类外部路由:是指接收路由的可信度比较低,如BGP路由等,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达 ASBR 的开销。所以计算路由开销时将主要考虑前者,即到第二类外部路由的开销等于ASBR 到该路由目的地址的开销。如果计算出开销值相等的两条路由,再考虑本路由器到相应ASBR的开销

第七类LSA:即NSSA LSA,只在NSSA区域内传播,描述到AS外部的路由信息

.

以上几类 LSA 是 OSPF 协议最重要的几种类型的LSA

.

另外,其他类型的LSA很少被使用

.

第六类LSA:在MOSPF(组播扩展 OSPF)协议中使用的组播LSA

.

第八类LSA:在OSPF域内传播 BGP属性时使用的外部属性LSA

.

第九类LSA:本地链路范围的opaque(不透明)LSA

.

第十类LSA:本地区域范围的opaque LSA

.

第十一类 LSA:本自治系统范围的opaqueLSA

.

其中第九、十、十一类LSA在新兴技术SR中被使用

Type1 LSA包含的信息:

P2P

Broadcast

Type2 LSA包含的信息:

Type3 LSA包含的信息

OSPF的路由选择

1、按照以下顺序进行选择:

.

区域内路由 > 区域间路由 > Type 1外部路由 > Type 2外部路由

.

2、在类型相同的情况下,选择路由开销值较小的路由

.

3、如果路由类型和链路开销都相等,那么这两条或多条路由形成等价路由

OSPF的特殊区域

就OSPF的区域整体而言可分为"传输区域(Transit Area)"和"末端区域(Stub Area)"两种。

Transit区域除了有本区域发起的流量和访问本区域的流量,还承载了源IP地址和目的IP地址均不属于本区域的流量,例如:OSPF要求非骨干区域间LSA和流量的传递必须经过骨干区域。

Stub区域只承载本区域发起的流量和访问本区域的流量。而Stub区域可以细分为以下四种特殊区域:

OSPF特殊区域

Stub区域(末端区域)

.

Totally Stub区域(完全末端区域)

.

NSSA区域(次末端区域)

.

Totally NSSA区域(完全次末端区域)

这些区域都有以下优势:

  • 控制外部路由;
  • 可以减少区域内 LSDB 的规模,降低区域内部路由器路由表的大小和容量,并且减少区域内路由器对于存储器的需求,降低设备的压力;
  • 网络的安全性有所增强

Stub区域:

在 Stub 区域中,ABR 不允许注入Type5 LSA,所以区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。因为没有Type5 LSA,因此Type4 LSA也没有必要存在,所以同样不允许注入。

在配置某区域成为 Stub 区域后,为保证自治系统外的路由依旧可达,ABR会产生一条0.0.0.0/0的第三类LSA,发布给区域内的其他路由器,通知它们如果要访问外部网络,可以通过ABR。所以,区域内的其他路由器不用记录外部路由,从而大大的降低了对于路由器的性能要求。

在配置 OSPF 区域成为 Stub 区域时,需要注意的是:

1、骨于区域不能配置成 Stub 区域;

2、虚连接不能穿过 Stub 区域;

3、位于AS的边缘,只有一个ABR,区域内如果有多个 ABR,可能会产生次优路由;

4、Stub 区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播;

5、区域内部的所有路由器都必须同时配置为 Stub 区域;

配置方式:

php 复制代码
ospf 1 router-id 1.1.1.1
area 2
stub

Totally Stub区域:

为了进一步减少 Stub区域中路由器的路由表规模以及路由信息传递的数量,可以将该区域配置为Totally Stub(完全 Stub)区域,该区域的 ABR 不会将区域间的路由信息和外部路的信息(Type3 LSA)传递到本区域。

在 Totally Stub 区域中,不仅类似于 Stub 区域,不允许Type4 LSA和Type5 LSA的注入,为了进一步降低链路状态库的大小,还不允许第三类LSA注入。同样地ABR会重新产生一条0.0.0.0/0的第三类LSA,以保证到本自治系统的其他区域或者自治系统外的路由依旧可达。而配置Totally Stub区域与Stub区域的注意事项一样。

注意Totaly Stub只需在ABR上配置即可

配置方式:

在ABR上

php 复制代码
ospf 1 router-id 1.1.1.1
area 2
stub no-summary

NSSA区域和Totally NSSA区域

NSSA(Not-So-Stubby Area)区域产生的背景:

  • 该区域存在一个ASBR,其产生的外部路由需要在整个OSPF 域内扩散;
  • 该区域不希望接收其它 ASBR 产生的外部路由。

要满足第一个条件,标准区域即可,但此时第二个条件不满足;要满足第二个条件,区域必须为 Stub,但此时第一个条件又不满足;为了同时满足第二个条件,OSPF设计了NSSA这个区域。

NSSA区域是Stub 区域的变形,与Stub区域有许多相似的地方。NSSA区域也不允许第五类LSA注入,但可以允许第七类LSA 注入。来源于外部路由的第七类LSA 由 NSSA区域的ASBR产生,在 NSSA区域内传播。当第七类LSA 到达NSSA的 ABR 时,由ABR 将第七类LSA 转换成第五类LSA,传播到其他区域。

同时,ABR 会产生一条0.0.0.0/0的第七类LSA,在 NSSA区域内传播,与 Stub 区域一样,虚连接也不能穿过NSSA 区域。

相较于Stub区域:NSSA区域可以位于非边缘区域,可以存在多个ABR,也可以有多个ASBR

配置方式:

php 复制代码
ospf 1 router-id 1.1.1.1
area 2
nssa 
# nssa <deault-route-advertise> <no-import-route> <no-summary>

其中主要参数含义如下:

default-route-advertise:该参数只用于NSSA区域的ABR或ASBR,配置后对于ABR,不论本地是否存在缺省路由,都将生成一条 Type7 LSA 向区域内发布缺省路由;对于ASBR,只有当本地存在缺省路由时,才产生Type7 LSA向区域内发布缺省路由。

no-import-route:该参数用于禁止将AS外部路由以Type7 LSA的形式引入到NSSA区域中,这个参数通常只用在既是NSSA区域的ABR,也是OSPF自治系统的ASBR的路由器上,以保证所有外部路由信息能正确地进入OSPF路由域。

no-summary:该参数只用于 NSSA 区域的ABR配置后,NSSA ABR 只通过Type3的 Summary-LSA 向区域内发布一条缺省路由,不再向区域内发布任何其它Summary-LSA,也就是该区域内只存在一条缺省路由的Type3 LSA和其他Type7 LSA,属于Totally NSSA区域的配置

Type7 LSA转换为Type5 LSA的条件

1、该ABR是NSSA的出口

一个 NSSA 可以有多个 ABR,但只有一个 ABR 会被选为负责将 Type-7 LSA 转换为 Type-5 LSA 的翻译器。这由 ABR 的 Router Priority 决定。优先级较高的 ABR将被选为翻译器。翻译器角色由 P-bit 和配置选项决定,如果 NSSA 有多个 ABR,当主翻译器失效时,备选翻译器将自动接替角色。

.

2、Type-7 LSA 中的 P-Bit(Propagate Bit)被设置为 1

P-Bit 是 Type-7 LSA 中的一个标志位,用来指示该 LSA 是否允许被转换为 Type-5 LSA。通常,P-Bit 由生成 Type-7 LSA 的路由器(通常是 ASBR)设置。如果 P-Bit 为 0,则 ABR 不会将其转换(例如ABR下发的缺省Type7路由)。

.

3、FA地址不为0且不是 NSSA 内部的地址

由于Type7 LSA会在ABR上转换为Type5 LSA,但并不会生成Type4 LSA,因此需要FA地址作为去往外部的地址

如果Type-7 LSA 的FA地址是NSSA 内部的地址,ABR 通常不会将其转换为 Type-5 LSA,因为其他区域无需得知这些路由

.

4、ABR 配置允许Type-7 转换

有些网络设备允许通过手动配置来控制是否进行 Type-7 到 Type-5 的转换,例如通过 Cisco 设备可通过命令强制转换

OSPF路由聚合

路由聚合是指ABR或ASBR将具有相同前缀的路由信息聚合,只发布聚合后路由到其他区域。AS被划分成不同的区域后,区域间可以通过路由聚合来减少路由信息,减小路由表的规模,提高路由器的运算速度。

OSPF的聚合有两种:

**ABR聚合:**ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区域中存在一些连续的网段,则可以将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,所有属于聚合网段范围的LSA将不再会被单独发送出去这样可减少其它区域中 LSDB 的规模。

**ASBR聚合:**配置引入路由聚合后,如果本地路由器是自治系统边界路由器ASBR将对引入的聚合地址范围内的Type5 LSA进行聚合。当配置了 NSSA区域时,还可以对引入的聚合地址范围内的 Type7 LSA进行聚合。

ABR聚合配置

php 复制代码
ospf 1 router-id 1.1.1.1
area 1
abr-summary 192.168.0.0 255.255.0.0
# abr-summary ip-address <mask/mask-length> <advertise/no-advertise> <cost>

本命令只适用于区域边界路由器(ABR),用来对某一个区域内的路由信息进行聚合。对于落入该聚合网段的路由,ABR 向其它区域只发送一条聚合后的路由。一个区域可配置多条聚合网段,这样 OSPF 可对多个网段进行聚合。

其中主要参数含义如下:

ip-address:聚合路由的目的IP地址。

mask:聚合路由的网络掩码,点分十进制形式。

mask-length:聚合路由的网络掩码长度,取值范围为0~32.

advertise/not-advertise:是否发布这条聚合路由。缺省为发布聚合路由。

cost:设置聚合路由的开销,默认为所有被聚合路由中最大的开销值。

ASBR聚合配置

php 复制代码
ospf 1 router-id 1.1.1.1
area 1
asbr-summary 192.168.0.0 255.255.0.0
# asbr-summary ip-address <mask/mask-length> <tag> <advertise/no-advertise> <cost>

如果本地路由器是自治系统边界路由器(ASBR),使用asbr-summary 命令可对引入的聚合地址范围内的第五类LSA描述的路由进行聚合;当配置了NSSA区域时,还要对引入的聚合地址范围内的第七类LSA描述的路由进行聚合

如果本地路由器是区域边界路由器(ABR),且是NSSA区域的转换路由器,则对由第七类LSA转化成的第五类LSA描述的路由进行聚合处理;对于不是NSSA区域的转换路由器则不进行聚合处理

以上聚合路由配置中,聚合但不发布的方法通常在OSPF路由过滤中使用,可以在ABR上过滤区域间路由或ASBR上过滤外部路由;

OSPF安全特性

随着越来越多的用户接入Internet,以及公司扩展他们的网络,网络安全特性变得尤为重要。OSPF 作为路由协议,它并不保护通过网络的数据报文,仅仅对 OSPF 协议本身进行保护以及对 OSPF 路由进行过滤。

常见的 OSPF 安全特性主要包括以下方面:

OSPF 安全特性

协议报文验证:OSPF支持报文验证功能,只有通过验证的OSPF报文才能被接受并正常建立邻居关系。

.

禁止端口发送OSPF报文:禁止接口发送OSPF报文后,它将成为被动接口(Passive interface),不再发送Hello 报文,但路由依旧会通告给邻居。

.

过滤计算出的路由:可以设置路由信息的过滤条件。经过SPF计算后,只有通过过滤条件的路由信息才可以加入路由表。

.

过滤 Type3 LSA:可以设置第三类 LSA的过滤条件,只有通过过滤的LSA才能被接收或者发送。

报文验证

从安全性角度来考虑,为了避免路由信息外泄或者对OSPF路由器进行恶意攻击,OSPF提供了报文验证功能。

OSPF 路由器建立邻居关系时,在发送的报文中会携带配置好的口令,接收报文时进行密码验证,只有通过验证的报文才能接收,否则将不会接收报文,不能正常建立邻居。

要配置 OSPF报文验证,同一个区域的所有路由器上都需要配置区域验证模式,且配置的验证模式必须相同,根据报文的种类,认证可以分为接口认证和区域认证;

每种方式都可以分为两种:

Simple:使用这种方法,设备将会在链路上直接发送预配置的验证密码。接收路由器处理报文时,会比较报文中的验证密码和自己与配置的是否相同。如果相同,就接收报文;否则直接丢弃报文

MD5:使用这种方法,设备不会在链路上直接发送预配置的验证密码,而是根据预置的密钥生成一个散列值,在链路上发送的仅仅是这个散列值。接收路由器处理报文时,会根据自己的密钥也生成一个散列值,并与报文携带的散列值比较是否相同。如果相同,就接收报文;否则就丢弃报文。

区域认证

php 复制代码
ospf 1 router-id 1.1.1.1
area 0
authentication-mode <simple/md5> xxxxxx

接口认证

php 复制代码
interface g0/0/0
ospf authentication-mode simple <plain/cipher> xxxxxxx                    # 简单验证
ospf authentication-mode <md5/hmac-md5> <plain/cipher> xxxxx              # md5验证

plain/cipher:用于在查看配置文件时的显示方式,plain为明文显示,cipher为密文显示

注意:建立虚链路之后,两端设备也都需要配置认证

禁止接口发送OSPF报文

为了使 OSPF 路由信息不被其它路由器获得,可以禁止接口上发送 OSPF 报文。接口禁止发送协议报文后,此接口称为静默接口,也称为被动接口(Passiveinterface),通常将业务接口设置为静默接口,值得注意的是:即使接口被设置为静默接口,该接口的网段信息还是会发送给OSPF的邻居设备;

配置静默接口

php 复制代码
ospf 1 router-id 1.1.1.1
silent-interface vlan 10

过滤OSPF的路由和LSA

由于OSPF是基于链路状态的动态路由协议,邻居之间传递的仅仅是链路状态通告,而不是路由信息,所以不能简单的在邻居之间对发布和接收的LSA进行过滤。过滤计算出的路由的方法实际上是对SPF算法计算后的路由进行过滤,只有通过过滤的路由才被添加到路由表中。

OSPF对发布路由的过滤仅针对在ASBR上引入的外部路由,因此进程下过滤的是路由和Type5 LSA;

OSPF虽然在区域内传递的是链路状态信息,但是在区域之间传递的Type3 LSA中仅仅包含相关的路由信息,在区域之间传递的时候,是可以通过规则进行过滤的;

这里注意:同区域下,Type1 LSA和Type2 LSA是无法过滤的,只能对SPF算法计算出的路由进行过滤,因此即便本设备进行了过滤,其他邻居还是会收到Type1 LSA和Type2 LSA

一个区域的LSDB是同步的,除了接口过滤所有的LSA

接口下可以强制过滤所有LSA,邻居还是存在,但是1,2类LSA也没了。原理是设备发送空DD报文"欺骗"对端设备没有其他任何LSA;

常用在末节设备配置,不接受其他所有LSA但是又需要发送自己的LSA或多链路连接对端设备中间链路大量减少LSA泛洪保证链路带宽的场景,配置完成后如果设备原先存在LSA需要等待超时老化或手动刷新

由于只有自己的LSA,因此需要手动配置默认路由出去

php 复制代码
# 在对端设备上配置,本端才会只有自己的LSA
int g0/0/0
ospf filter-lsa-out all

区域下过滤LSA

php 复制代码
ospf 1 router-id 1.1.1.1
area 1
filter <acl-number>/<ip-prefix & ip-prefix name> import

在ASBR上对外部路由进行过滤

php 复制代码
ospf 1 router-id 1.1.1.1
filter-policy <acl-number>/<ip-prefix & ip-prefix name> import/export

三、深入研究OSPF

OSPF的域间防环规则

OSPF将整个OSPF域划分为多个区域,区域内部通过拓扑信息计算路由,区域间传递路由信息,实现全网可达。OSPF防环机制主要是体现在域内防环和域间防环。

OSPF域间防环规则:

原则一:

为了避免区域间的环路,OSPF规定不同区域间的路由器交互只能通过ABR实现;ABR是连接到骨干区域的,所以在区域设计上规定,所有非骨干区域要连接到骨干区域。区域间的通讯需要通过骨干区域,形成逻辑上的星状拓扑、且无环

.

原则二:

ABR从非骨干区域学到的Type3 LSA不会传递给骨干区域;ABR骨干区域存在邻居时,不会计算非骨干区域的3类LSA,不存在邻居时则计算;

.

原则三:

ABR描述某个区域的Type3 LSA不会再传回该区域(前提:ABR上存在该区域的LSA,特殊情况可以下拉到补充章节);

类似于RIP中的水平分割,因此在以前的CCIE面试中会被问到"OSPF的水平分割"

OSPF的收敛过程

  • 发送和接收LSA;
  • 同步LSDB;
  • 使用SPF算法(OPT和PRC)计算路由;
  • 将计算出的路由写入OSPF RIB;
  • 通过各个协议产生路由之间的比较,将最优路由写入全局的IP RIB;
  • 将控制层的IP RIB写入到转发层的FIB;

OSPF收敛速度控制

按优先级收敛

可以通过前缀列表等将特定路由过滤出来,通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性,本地有效

优先级顺序:Critical > High > Medium > LOW(不可修改为Low级)

配置举例:

php 复制代码
ip ip-prefix 1 index 10 permit 1.1.1.1 32        # 前缀列表抓取路由
ospf 1 router-id 4.4.4.4                
prefix-priority critical ip-prefix 1             # 将抓出来的路由的优先级修改为紧急
quit

各路由协议产生的路由具有内外部优先级之分

内部优先级大部分时候不使用,只有当两种协议的优先级被管理员手动设置为相同时为了唯一的选择一种协议产生的路由时才会使用

修改OSPF_ASE路由的优先级

php 复制代码
ospf 1
preference ase xxx

路由的撤销

  • 1/2类的LSA在撤销时使用的是序列号+1的方式撤销路由;
  • 3/5/7类LSA在撤销路由时是将路由的Age改为3600秒进行老化;
  • 如果与对端设备失联,则等待路由的计时器到3600秒后进行删除

智能定时器(本地有效)

网络不稳定时,可能会频繁进行路由计算,造成系统CPU消耗过大。尤其是在不稳定网络中,经常会产生和传播描述不稳定拓扑的LSA(Link State Advertisement),频繁处理这样的LSA,不利于整个网络的快速稳定。

OSPF智能定时器分别对路由计算、LSA的产生、LSA的接收进行控制,加速网络收敛。

OSPF智能定时器可以通过以下两种方式来加速网络收敛:

  • 在频繁进行路由计算的网络中,OSPF智能定时器根据用户的配置和指数衰减技术动态调整两次路由计算的时间间隔,减少路由计算的次数,从而减少CPU的消耗,待网络拓扑稳定后再进行路由计算。
  • 在不稳定网络中,当路由器由于拓扑的频繁变化需要产生或接收LSA时,OSPF智能定时器可以动态调整时间间隔,在时间间隔之内不产生LSA或对接受到的LSA不进行处理,从而减少整个网络无效LSA的产生和传播。
  • 0-1次最短为500ms,1-2次最短为1000ms,2-3次最短为2000ms,3-4次最短为4000ms,最多为10000ms,当经过3次最大更新时间后网络还是会更新,则从1次开始计算
  • RFC默认规定更新为5秒,接收为1秒,开启只能定时器后可以更快收敛
php 复制代码
# LSA更新链路状态数据库
ospf 1
lsa-arrival-interval intelligent-timer xxx xxx xxx         # 收,1/2类LSA的最大、最短和基本时间
lsa-originate-interval intelligent-timer xxx xxx xxx       # 发,1/2类LSA的最大、最短和基本时间
# lsa-originate-interval other-type 3/4/5/6 5              # 发,3/4/10类LSA的时间,默认为5s
# lsa-arrival-interval 0                                   # 接收LSA时不开启定时器,直接接收
---------------------------------------------------------------------------------------------------
# SPF算法更新拓扑
ospf 1
spf-schedule-interval intelligent-timer 20000 1000 2000            # 分别为最大、最短、基本时间

IP FRR---快速重路由

传统的 OSPF 故障恢复需要经历以下几个过程才能将流量切换到新的链路上:故障检测(需要几毫秒)、向控制平面通知故障(需要几毫秒)、生成并洪泛新的拓扑信息(需要几十亳秒)、触发 SPF 计算(需要几十毫秒)、通知并安装新的路由(需要几百毫秒)。例如:主路径联动BFD,断掉后切换到备用路径,但是可能由于过快导致备用路径还不知道切换了,如果被路径的COST大于主路径,备用路径的设备可能将数据扔回

OSPF IP快速重路由(Fast Re-Route,FRR)利用无环替换(Loop-Free Alternates,LFA)算法预先计算好备份链路,并与主链路一起加入转发表。当网络出现故障时,OSPF IP FRR可以在路由收敛前将流量快速(50 毫秒内)切换到备份链路上,保证流量不中断从而达到保护流量的目的,因此,极大地提高了 OSPF 网络的可靠性。其中主备路径都会被加入FIB表

LFA 计算备份链路的基本思路是:以可以提供备份链路的邻居为根节点,利用SPF算法计算出到目的节点的最短距离,然后,按照 RFC5286 规定的不等式计算出开销最小且无环的备份链路。OSPF IP FRR 支持对需要加入IP路由表的备份路由进行过滤,通过过滤策略的备份路由才会加入IP 路由表,因此,用户可以更灵活地控制加入IP路由表的 OSPF 备份路由。

OSPF LFA FRR流量保护分为链路保护节点链路双保护,节点链路双保护的优先级高于链路保护的优先级;

主路径(S---E---D);备用路径(S---N---D);

保护公式(比cost值)

1、链路保护:Distance(N,D)< (N,S) + (S,D),满足该公式时配置OSPF IP FRR功能,可以保证当主链路故障后,Device S将流量切换到备份链路转发,确保流量中断降低,不满足此公式时不选择该备用路径

2、节点保护:Distance(N,D)< (N,E) + (E,D)同时满足1公式和2公式时配置OSPF IP FRR功能,可以保证源节点(S)的下一跳节点(E)故障后,源节点(S)将流量切换到备份节点(N)转发,确保流量中断降低;

注意:

1、实现链路保护时只用满足链路保护公式,实现节点保护时,1和2公式均要满足

2、备用链路只会选择一条:节点保护优于链路保护

3、接口下使能ospf frr block,阻止接口下的FRR功能

4、FRR只能保护直连链路,因此需要在所有设备上开启

5、MPLS中开启FRR后,LDP默认开启FRR

配置OSPF IP FRR

php 复制代码
ospf 1
frr 
loop-free-alternate
quit
# dis ip routing-table 4.4.4.4 verbols中可以查看
# int g0/0/0
# ospf frr block                                     # 关闭接口FRR能力

SPF算法

Database Overflow

  • 默认无条目限制,但是一般认为最多能计算1w条路由
  • 抑制的是自己产生的外部路由,但是无法抑制别人产生的,还是会接受
  • 在设置时需要将两端设置为一样的Overflow,否则会造成数据库不同步的情况
  • Overflow针对的是外部路由,5类默认路由不在抑制范围内
php 复制代码
ospf 1
lsdb-overflow-limit 100

OSPF主备双出口

下层设备的数据需要通过主备出口R1/2进入互联网时,平时优选出口R1,当R1出口断掉时再选择R2

解决方法:

1、R1/2都配置静态的指向外网的默认路由然后使用命令,下发五类默认LSA;

2、R1下发默认路由使用Type1,R2下发默认路由使用Type2,此时数据优先使用R1作为出口(Type1优先于Type2);此时如果数据选择的是去往R1的路径但是经过了R2,就会被R2直接转发,因为R2上也有配置的默认路由

3、R2默认路由的优先级修改为160;

4、R2上配置 default-route-advertise permit-calculate-other 计算其他设备下发的五类缺省LSA可以使得R2计算R1下发的缺省路由,其优先级为150,优先于手动配置的160静态缺省,此时R2上手动配置的静态为不活跃状态,而是使用R1下发的缺省,指向R1;

注意:如果不配置 default-route-advertise permit-calculate-other数据默认也会从R1的出口进入互联网,但只能检测一次,如果R1失效后又恢复,那么数据经过R2时还是会被R2转发向出口

OSPF双塔骑兵

《OSPF双塔骑兵》子接口的带宽并不共享,而都是全部的物理带宽

LSA头部信息

  • LS age:此字段表示LSA已经生存的时间,单位是秒,默认1800s更新一次,3600s超时;
  • Option:该字段指出了部分OSPF域中LSA能够支持的可选性能,其中E表示可以接受外部路由;
  • LS type:此字段标识了LSA的格式和功能,常用的LSA类型有五种。
  • Link State ID:根据LSA的类别而不同,1类为节点Router-ID,2类为DR的接口IP,3类是不同区域间的路由信息,4类为ASBR节点的Router-ID,5/7类为外部路由信息;
  • Advertising Router:通告LSA的路由器的Router-ID;
  • Sequence Number:当LSA每次新的实例产生时,这个序列号就会增加,收到的版本号大于原先的,根据SPF算法重新计算后将更新传递给邻居,版本号一致时忽略,版本号小于原先版本时将自己最新的传递给邻居;
  • Checksum:关于LSA的全部信息的校验和。因为Age字段,所以校验和会随着老化时间的增大而每次都需要重新进行计算;
  • Length:是一个包含LSA头部在内的LSA的长度

OSPF的故障诊断

其他特性

OSPF与BGP联动

解决方案---设置末节路由器Stub router:

BGP未收敛时将所有OSPF端口的开销在某一时间段内设置为最大65535,使得数据包暂时走次优路径,当时间结束后再讲COST设置还原

需要注意的是,这个开销值并不是设置到接口上的,而是写在了LSA中进行传递

php 复制代码
ospf 1
stub-router on-startup 200                # 设备重启后等待200s再还原cost,200s内cost为最大
# stub-router                             # 直接使得cost为最大,常用于割接或设备扩容

Forwarding Address

FA是ASBR通告的Type5 LSA和Type7 LSA中的字段,它的作用是:告诉OSPF域内的路由器如何能够更快捷地到达路由下一跳,以免OSPF内部路由器在MA网络上以ASBR为下一跳,再由ASBR自己转发到正确的下一跳,而产生额外的路由,具有避免次优路径的产生以及防止环路的功能

在Type5 LSA中,如果FA=0,数据要去往外部时必会先经过ASBR,在MA网络中可能会存在次优路径问题,如果存在FA地址,则数据去往外部时会直接指向FA地址,而无需经过ASBR,可解决次优路径问题;

在Type7 LSA中,FA地址一定不为0,因为ABR会将Type7 LSA转换为Type5 LSA,但是不会生成Type4 LSA指明ASBR的位置,因此必须存在FA地址,7类LSA转为5类LSA时只会修改LS Type和通告路由器,不会修改FA;

5类LSA的FA填充条件

1、ASBR在去往外部路由下一跳的出接口必须发布在OSPF中(保证FA地址有路由)

2、ASBR在去往外部路由下一跳的出接口为非静默接口

3、ASBR在去往外部路由下一跳的出接口的网络类型为广播或者NBMA(P2P网络不会存在次优情况)

满足以上条件,ASBR在发布5类LSA时才会自动填充FA地址(填充地址为ASBR自身去往外部路由的下一跳地址);不满足则填充0.0.0.0地址

7类LSA的FA填充条件

1、7类LSA如果满足5类LSA的填充条件,也会按照5类LSA一样填充目的网段下一跳地址

2、如果不满足5类LSA的填充条件,会填充自己的Loopback或物理接口地址

华为设备上NSSA区域ASBR发布的Type7 LSA中FA默认为在该设备上配置的第一个LoopBack地址,没有环回接口时选择第一个Network的地址

GR平滑重启

​​​​​​《GR详解---静下心来敲木鱼》

NSR不间断路由

  • 通过协议备份机制,实现主备倒换时控制平面(路由)和转发平面(业务)均不中断
  • 在设备发生倒换的过程中,路由处理不中断,因为:
    • 邻居和拓扑信息不丢失;
    • 邻居关系不中断;
  • 优点
    • 不依赖也不影响对端设备,没有互通问题
    • 路由的收敛速度要比NSF(GR)快
  • NSR是在有主用主控板和备用主控板的设备上的,主用主控板发生故障是不影响邻居关系的一种可靠性技术
  • 一般情况下,可以使用NSR的话不会使用NSF

NSR原理主要包括以下几个部分:

批量备份:NSR功能使能后,备板重启时,主用主控板将路由信息和转发信息批量备份到备用主控板上。批量备份过程在实时备份过程之前进行,此时NSR无法实施主备倒换过程。

实时备份:当批量备份过程结束后,系统进入实时备份阶段,任何在控制平面和转发平面的改变都将实时从主用主控板备份到备用主控板上。在该阶段,备用主控板能够随时代替主用主控板工作。

主备倒换:在已经完成备份的NSR系统主用主控板发生故障时备用主控板会通过硬件状态感知到主用主控板故障,并成为新的主用主控板。备用主控板升主后,该单板会切换接口板的报文上送通道。由于倒换时间足够短,路由协议在主备切换的过程中不会和邻居节点断连

php 复制代码
switchover mode <nonstop-routing/nonstop-forwarding>
# 切换模式为不间断路由或不间断转发

四、补充

OSPF的Router-ID冲突分三种情况

1、两设备直连,无法建立邻居关系

2、两设备同一个区域但中间隔着一个设备,此时两者可以和中间设备建立邻居关系但是无法交换LSA。华为设备在这种情况下会自动将一端的Router-ID改为接口的IP地址

3、属于不同的区域,被ABR隔开,此时都可以与ABR建立邻居关系且可以和ABR交换LSDB,但是引入路由时会出问题

OSPF的多进程

1、OSPFv2中一个接口只能属于一个进程,OSPFv3的接口可以属于多个

2、进程不影响邻居关系的建立

3、在同一台设备上,不同OSPF进程之间的LSDB是隔离的

常见问题

1、非骨干区域被分割

如下图,Area1被Area0分割,那么从左边Area1传递到Area0的LSA能否再被传递到右边的Area1?

答:根据OSPF的防环规则来说,从非骨干区域传递给骨干区域的LSA不会再传递回该区域,一般这个防环规则适用在该区域多ABR的情况;但这里并不适用,因为R3上其实并不知道左边Area1内的情况的,所以上面那条防环规则的前提是ABR是有这个区域内的LSA的。

2、不同区域内OSPF设备的Router-ID重复

如下图,AR1的Router-ID为1.1.1.1,而AR4的Router-ID也为1.1.1.1的情况下,邻居关系能否正常建立,LSA的传递是否正常?

答:在不引入外部路由的情况下,邻居可正常建立,LSA的传递、路由的学习也都没有问题。因为区域间路由的学习主要依靠ABR将该区域的Type1 LSA和Type2 LSA汇总为Type3 LSA,通告路由器是ABR,而ABR的Router-ID是不冲突的,因此邻居的建立,路由的学习都是没有问题的。

但,如果AR1或者AR4引入外部路由的话就会出现问题,因为引入外部路由后,其他设备就需要知道ASBR的Router-ID,此时就会发现Router-ID冲突,会导致路由震荡。

相关推荐
烁月_o921 分钟前
《安全工程师自我防护指南:直面数字威胁的有效策略与实践》
运维·网络·经验分享·其他·网络安全
不一样的信息安全25 分钟前
网络安全与信息安全的区别
网络·网络安全·信息安全
ac-er88881 小时前
PHP和phpSpider如何应对反爬虫网站的IP封禁
爬虫·tcp/ip·php
听风吹等浪起1 小时前
改进系列(6):基于DenseNet网络添加TripletAttention注意力层实现的番茄病害图像分类
网络·人工智能·神经网络·算法·分类
BBluster1 小时前
multiprocessing包详解【Python】
开发语言·网络·python
半个西瓜.2 小时前
网络安全:基线检查---自动化脚本检测.
网络·安全·web安全·网络安全·安全威胁分析
运维小文2 小时前
TCP协议简单分析和握手挥手过程
服务器·网络·网络协议·tcp/ip·三次握手
xtggbmdk2 小时前
三层交换机和路由器的连接方式有三种:
网络·智能路由器
gywl2 小时前
计算机网络-应用层
服务器·网络·计算机网络
光明编码使者3 小时前
WebSocket 与 Server-Sent Events (SSE) 的对比与应用
网络·websocket·网络协议