一、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)来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路,一个网段(链路)只能属于一个区域,或者说每个运行 OSPF 的接口必须属于某个特定区域。

并非所有的 OSPF 区域都是平等的关系。其中有一个区域是与众不同的,它的区域号(Area ID)是 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。

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

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

📣 Router ID 的选择规则

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

2、如果当前设备没有配置 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)发送协议报文。

OSPF 协议中,NBMA 与 P2MP 网络之间的区别如下:

📣 NBMA 与 P2MP 网络之间的区别

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

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

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

OSPF 报文类型和封装

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

image

📣 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 报文,但该Hello报文中邻居字段为空,此时将对端设备的 Router ID 添加到自己的邻居表中并在下一次的 Hello 报文中携带该邻居的 Router ID;

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

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

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 报文;3、该状态下双方发送的是首个DD报文,其中不包含LSA的摘要信息,只用于确认主备;

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

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

6、Loading 状态:根据获取的DD报文摘要检测本端设备缺失的链路状态后,向邻居发送 LSR(链路状态请求)来请求对端路由器的部分链路状态数据库,对方收到请求后会发送 LSU(链路状态更新),本端收到 LSU 后会向对方发送 LSAck(链路状态确认)。

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

7、Full 状态:双方LSDB同步后进入Full状态,随后开始SPF树和路由的计算。默认情况下每 1800s(30min)会进行一次周期性同步 LSDB,如果 3600s(1h)未同步就会认为 LSA 超时。

通常情况下,4/5/6 步是瞬时完成的;

当先启动OSPF的设备等到DR选举超时后将自己视为DR后,另一设备再加入网络中,无需双方交互的Hello报文都包含对端Router-ID,只需要DR的Hello报文中包含对端的Router ID即可

📣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 的选举

在 Broadcast 网络和 NBMA 网络中,任意两台路由器之间都要传递路由信息。如果网络中有 n 台路由器,则需要建立 n(n-1)/2 个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递浪费了带宽资源。为解决这一问题,OSPF 协议定义了 DR(Designated Router,指定路由器)所有路由器都只将LSA发送给 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 路由器启动后,便会通过 OSPF 接口向外发送 Hello 报文。收到 Hello 报文的 OSPF 路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。但形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成交换 DD 报文,交换 LSA 并达到 LSDB 的同步之后,才形成真正意义上的邻接关系;

DR与BRD是一个接口(网段)概念,设备不同的接口(网段)会选择出不同的DR;因此在Hello报文中关于DR的描述为DR在该接口(网段)下的IP地址,并非是Router ID,否则 DR Router ID未知的情况下将无法传递数据;

image

📣 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 的选举机制还具有以下特点:

1、只有在广播或 NBMA 类型接口才会选举 DR,在 p2p 或 p2mp 的接口上不需要选举 DR。

2、DR 是某个网段中的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是 DR,在另一个接口上有可能是 BDR,或者是 DR Other。

3、路由器的优先级可以影响一个选举过程,但是当 DR/BDR 已经选举完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经存在的 DR/BDR 成为新的 DR/BDR(不抢占);

4、DR 并不一定就是路由器优先级最高的路由器接口,同理 BDR 也并不一定就是优先级次高的路由器接口;

伪节点

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

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

它们的区别在于:

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

  • 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 中删除,可以将该路由的老化时间设置为最大老化时间(3600秒),然后向所有路由器发送更新。

OSPF 的配置

1、激活接口

ospf 1 router-id 1.1.1.1 
area 0 
network 1.1.1.1 0.0.0.0

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

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

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

2、配置 OSPF 引入缺省路由

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、设置接口开销值

interface g0/0/1 
ospf cost 10

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

4、修改参考带宽

ospf 1 router-id 1.1.1.1
bandwidth-reference 1000

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

二、OSPF 的高级特性

虚连接(Virtual-Link)

为防止环路OSPF 协议规定:

1、骨干区域必须是连续的;
2、所有非骨干区域都必须和骨干区域相连接;
3、所有非骨干区域的LSA和流量的转发必须通过骨干区域进行;

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

image

📣 OSPF Virtual Link

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

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

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

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

配置虚连接:

ospf 1 router-id 1.1.1.1 
area 1 
vlink-peer 1.1.1.1
ospf 1 router-id 2.2.2.2 
area 1 
vlink-peer 2.2.2.2

OSPF 的 LSA 和路由选择

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

📣 LSA 头部字段主要含义

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

LS type:LSA 的类型,Router、Network、Summary等;

Link State lD:具体数值根据 LSA 的类型而定,Type1 LSA中为设备的Router-ID,Type2 LSA中为DR指向本端的接口IP地址,Type3/5/7 LSA中为目的网段,Type 4 LSA中为ASBR的Router ID;

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

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

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

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

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

OSPF 协议中定义了不同类型的 LSA。OSPF 就是通过这些不同类型的 LSA 来完成 LSDB 同步,并且做出路由选择的。通常情况下,使用较多的 LSA 类型有第一类、第二类、第三类、第四类、第五类和第七类 LSA;

📣 OSPF 中常用的 LSA

第一类 LSA:即 Router LSA,描述了区域内部本端设备直连的链路信息,每一台启用了 OSPF 协议的路由器会为自己所处的每个区域都产生 Type1 LSA(几个区域产生几条),它的内容中包含了这台路由器所有的直连的链路类型和链路开销等信息(P2P网络中还存在网络信息),并向该区域内的邻居传播;

第二类 LSA:即 Network LSA,由 DR 产生,描述了连接到一个特定的MA网络或 NBMA 网络的所有路由器的链路状态。与 Router LSA 不同的是,Network LSA 的作用是保证对于MA网络或者 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 收到一个第五类 LSA,作用为在ASBR路由器的Router ID未发布到网络中时让区域内部的其他路由器知道如何到达 ASBR,且掩码固定为0.0.0.0/0(不显示);

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

  • 第一类外部路由:是指接收路由的可信程度较高,并且和 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 中被使用

📣为何MA与NBMA网络中需要Type2 LSA,而P2P网络中不需要?

答:在MA与NBMA网络中,接口可能同时连接许多个路由器,如果各设备两两之间都建立邻接关系并传递LSA会对设备性能和链路带宽造成严重影响,且当网络出现变化时同样也会存在非常多的LSA交互。

因此在MA与NBMA网络中设置了DR和BDR,各设备只向DR设备发送第一类LSA,其中TransNET的Link Type仅需描述了本设备连接的拓扑信息即可,而SPF树的计算必须有拓扑和网络信息,因此还需要通过DR设备发送第二类LSA至DROther设备,为其描述网络中其他设备的Router ID(拓扑信息)与网络信息。

这样,各设备只需要向DR发送Type1 LSA,DR向其他设备发送网段信息与其他设备的拓扑信息,大大缓解了邻接数过多可能产生的问题。而P2P网络中,链路两端不是你就是我,没有MA与NBMA网络中的问题;

注意:如果设备同时处于MA网络与P2P网络中,那么在设备的Type1 LSA中会使用TransNET描述MA网络拓扑信息,使用StubNET描述P2P网络信息(如:宣告环回接口地址)。因为P2P接口类型中不存在DR与BDR设备,也就没有Type2 LSA,只将网络信息描述在Type1 LSA中;

image

📣 Link Type字段

Link Type字段可包含的内容:Point-to-Point、TransNET、StubNET、Virtual Link,根据不同的链路类型分不同的Link Type。

StubNET:末节网络----路由信息;

Point-to-Point:点到点网络----拓扑信息;

TransNET:传输网络,仅存在于MA接口----拓扑信息;

Virtual Link:虚链路----拓扑信息;

Type

Link ID

Data

p-2-p

邻居的RID

该网段上本地接口的IP地址

TransNet

DR的接口的IP地址

该网段上本地接口的IP地址

StubNet

该Stub网段的网络地址

该网段的网路掩码

Virtual

虚连接邻居的RID

去往该虚连接的本地接口IP

Type1 LSA 包含的信息(P2P):

Type1 LSA 包含的信息(Broadcast):

image

Type2 LSA 包含的信息:

image

Type3 LSA 包含的信息

image

📣 OSPF 的路由选择

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

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

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

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

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。所以,区域内的其他路由器不用记录外部路由,从而大大的降低了对于路由器的性能要求。(除了ABR产生的第三类 LSA 外,还存在其他区域的第三类 LSA )

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

🔔 Stub区域配置注意事项

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

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

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

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

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

配置方式:

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 上

ospf 1 router-id 1.1.1.1 
area 2 
stub no-summary

NSSA 区域和 Totally NSSA 区域

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

  • 该区域存在一个 ASBR,其产生的外部路由需要在整个 OSPF 域内扩散;

  • 该区域不希望接收其它 ASBR 产生的外部路由。

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

同时,ABR 会产生一条 0.0.0.0/0 的第七类 LSA,在 NSSA 区域内传播,当区域中存在多个ABR时,相互间不计算缺省路由;与 Stub 区域一样,虚连接也不能穿过 NSSA 区域。

相较于 Stub 区域:1、NSSA 区域可以位于非边缘区域;2、可以存在多个 ABR,也可以有多个 ASBR;3、可以引入外部路由;

配置方式:

ospf 1 router-id 1.1.1.1 
area 2 
nssa  
# nssa <deault-route-advertise> <no-import-route> <no-summary>

其中主要参数含义如下:

  • default-route-advertise:用来在ASBR上配置产生缺省的Type7 LSA到NSSA区域。在ABR上存在骨干区域邻接关系时,无论路由表中是否存在缺省路由0.0.0.0/0,无需命令可自动产生Type7 LSA缺省路由泛洪到该区域。而在ASBR上只有当路由表中存在缺省路由0.0.0.0/0后使能该命令,才会产生Type7 LSA缺省路由。
    backbone-peer-ignore:用来忽略检查骨干区域的邻居状态。即骨干区域中只要存在Up状态的接口,无论是否存在Full状态的邻居,ABR都会自动产生缺省的Type-7 LSA到NSSA区域。

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

当ASBR所在的区域被配置成NSSA时,在LSA洪泛区域中的其他路由器上仍会保留已经没用的Type5 LSA,这些LSA必须等到老化时间到达3600秒后才会被删除。由于大量的LSA会占用路由器内存,所以对设备的性能造成了一定影响。

此时,通过配置flush-waiting-timer参数产生老化时间被置为最大值(3600秒)的Type5 LSA,及时清除其他路由器上已经没用的Type5 LSA当ASBR同时还是ABR时,通过配置no-import-route参数使OSPF通过`import-route`命令引入的外部路由不被通告到NSSA区域,因为已经存在缺省的Type3 LSA了,所以可以确保该区域的LSA数量优化到最少。

📣 Type7 LSA 转换为 Type5 LSA 的条件

1、该 ABR 是 NSSA 的出口;
一个 NSSA 可以有多个 ABR,但只有一个 ABR 会被选为负责将 Type-7 LSA 转换为 Type-5 LSA 的翻译器。Router ID最大的路由器将被选为翻译器。翻译器角色由 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 路由),在查看LSDB时会看到P置为前还存在一个N置为,表明该路由器是NSSA路由器,只有N位置位的路由器才能正确处理7类LSA。

3、存在 FA 地址且不为0;
由于NSSA区域不能存在Type4 LSA,因此需要FA地址指明方向(可能为ASBR,也可能为ASBR去往外部网络的下一跳);

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

imageimage

Forwarding Address

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

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

在 NSSA 区域中 Type7 LSA 的 FA 地址一定不为 0,因为 ASBR 引入外部路由传递给NSSA区域其他路由器,但是如果ASBR没有将自己的Router ID宣告出去时,其他路由器将无法得知到达ASBR的路由,但NSSA区域中又不能存在Type4 LSA指明ASBR,因此需要在Type7 LSA中指定去往外部路由的地址。当7 类 LSA 转为 5 类 LSA 时只会修改 LS Type 和通告路由器,不会修改 FA;

存在FA时,路由的迭代和开销值是根据FA地址计算的,而不是根据ASBR;

🔔 5 类 LSA 的 FA 填充条件

1、ASBR 在去往外部路由下一跳的出接口必须发布在 OSPF 中(保证 FA 地址有路由);
2、ASBR 在去往外部路由下一跳的出接口为非静默接口;
3、ASBR 在去往外部路由下一跳的出接口的网络类型为广播或者 NBMA(P2P 网络不会存在次优情况);

满足以上条件,ASBR 在发布 5 类 LSA 时才会自动填充 FA 地址(填充地址为 ASBR 自身去往外部路由的下一跳地址),不满足时则填充 0.0.0.0 地址。当Type7 LSA转Type5 LSA时,在ABR上通过nssa suppress-forwarding-address命令也可强制设置FA为0.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 的地址;

OSPF 缺省路由的产生

区域类型

产生条件

发布方式

产生LSA的类型

普通区域

通过default-route-advertise命令配置

ASBR 发布

Type5 LSA

STUB区域

自动产生

ABR 发布

Type3 LSA

完全STUB区域

自动产生

ABR 发布

Type3 LSA

NSSA区域

自动产生

ABR 发布

Type7 LSA

NSSA区域

通过nssa [default-route-advertise]

ASBR 发布

Type7 LSA

完全NSSA区域

自动产生

ABR 发布

Type3 LSA

OSPF 路由聚合

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

OSPF 的聚合有两种:
ABR 聚合: ABR 向其它区域发送路由信息时,以网段为单位生成 Type3 LSA。如果该区域中存在一些连续的网段,则可以将这些连续的网段聚合成一个网段。这样 ABR 只发送一条聚合后的 LSA,所有属于聚合网段范围的 LSA 将不再会被单独发送出去这样可减少其它区域中 LSDB 的规模。
ASBR 聚合: 配置引入路由聚合后,如果本地路由器是自治系统边界路由器 ASBR 将对引入的聚合地址范围内的 Type5 LSA 进行聚合。当配置了 NSSA 区域时,还可以对引入的聚合地址范围内的 Type7 LSA 进行聚合。
配置了OSPF路由聚合后,无论是否发布聚合路由,明细路由都不会被发布到其他区域;

ABR 聚合配置

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 聚合配置

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 报文后,它将成为静默接口(silent interface),不再发送 Hello 报文,但路由依旧会通告给邻居。

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

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

报文验证

从安全性角度来考虑,为了避免路由信息外泄或者对 OSPF 路由器进行恶意攻击,OSPF 提供了报文验证功能。
OSPF 路由器建立邻居关系时,在发送的报文中会携带配置好的口令,接收报文时进行密码验证,只有通过验证的报文才能接收,否则将不会接收报文,不能正常建立邻居。

要配置 OSPF 报文验证,同一个区域的所有路由器上都需要配置区域验证模式,且配置的验证模式必须相同,根据报文的种类,认证可以分为接口认证和区域认证,如果同时配置了区域认证和接口认证,则以接口认证为准;认证字段主要存在于OSPF报文头部,每个报文都有携带;

每种方式都主要有两种方式:

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

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

另外华为还有一种keychain认证模式,可根据不同的日期更换不同的认证密码,更为安全;

区域认证

ospf 1 router-id 1.1.1.1
area 0
authentication-mode simple <plain/cipher> xxxxxxx                    			  # 简单验证
authentication-mode <md5/hmac-md5/hmac-sha256> <plain/cipher> xxxxx               # md5验证

接口认证

interface g0/0/0
ospf authentication-mode simple <plain/cipher> xxxxxxx                    			  # 简单验证
ospf authentication-mode <md5/hmac-md5/hmac-sha256> <plain/cipher> xxxxx              # md5验证

注意:
1、plain与cipher只是在设备配置中存储时选择明文还是密文;
2、建立虚链路之后,两端设备也都需要配置认证;

禁止接口发送 OSPF 报文

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

配置静默接口

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,过滤后邻居还是存在,但是1、2 类 LSA 也没了。原理是设备发送空 DD 报文“欺骗”对端设备没有其他任何 LSA;

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

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

区域下过滤

ospf 1 router-id 1.1.1.1
area 1
filter <acl-number>/<ip-prefix & ip-prefix name> import

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

ospf 1 router-id 1.1.1.1
filter-policy <acl-number>/<ip-prefix & ip-prefix name> import/export

三、深入研究 OSPF

OSPF 的域间防环规则

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

📣OSPF 域间防环规则:

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

原则二:
ABR 在非骨干区域从其他设备学习到的 Type3 LSA 不会传递给骨干区域,当 ABR 骨干区域存在邻居时,不会计算该 Type3 LSA 为路由,不存在邻居时则计算;

原则三:
ABR 描述某个区域的 Type3 LSA 不会再传回该区域(前提:ABR 上存在该区域的 LSA,特殊情况可以下拉到补充章节);
类似于 RIP 中的水平分割,因此在以前的 CCIE 面试中会被问到“OSPF 的水平分割”

OSPF 的收敛过程

1、发送和接收 LSA;

2、同步 LSDB;

3、使用 SPF 算法(OPT 和 PRC)计算路由;

4、将计算出的路由写入 OSPF RIB;

5、通过各个协议产生路由之间的比较,将最优路由写入全局的 IP RIB;

6、将控制层的 IP RIB 写入到转发层的 FIB;

OSPF 收敛速度控制

按优先级收敛

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

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

配置举例:

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

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

静态

O/O_ASE

ISIS

BGP

外层(可修改)

60

10/150

15

255

内层(不可修改)

60

10/150

L1: 15 / L2: 18

E: 20 / I: 200

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

修改 OSPF_ASE 路由的优先级

ospf 1
preference ase xxx

路由的撤销

  • 1/2 类的 LSA 在撤销时使用的是序列号 +1 的方式撤销路由(新的LSA中不包含被删除路由);

  • 3/5/7 类 LSA 在撤销路由时是将路由的 Age 改为 3600 秒进行老化;

  • 如果与对端设备失联,则等待路由的计时器到 3600 秒后进行删除

智能定时器(本地有效)

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

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

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

  • 在频繁进行路由计算的网络中,OSPF 智能定时器根据用户的配置和指数衰减技术动态调整两次路由计算的时间间隔,减少路由计算的次数,从而减少 CPU 的消耗,待网络拓扑稳定后再进行路由计算。

  • 在不稳定网络中,当路由器由于拓扑的频繁变化需要产生或接收 LSA 时,OSPF 智能定时器可以动态调整时间间隔,在时间间隔之内不产生 LSA 或对接受到的 LSA 不进行处理,从而减少整个网络无效 LSA 的产生和传播。

image

image

  • 0-1 次最短为 500ms,1-2 次最短为 1000ms,2-3 次最短为 2000ms,3-4 次最短为 4000ms,最多为 10000ms,当经过 3 次最大更新时间后网络还是会更新,则从 1 次开始计算

  • RFC 默认规定更新为 5 秒,接收为 1 秒,开启只能定时器后可以更快收敛

# 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);

image

保护公式(比 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

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 树的计算

imageimageimage

Database Overflow

image

  • 默认无条目限制,但是一般认为最多能计算 1w 条路由

  • 抑制的是自己产生的外部路由,但是无法抑制别人产生的,还是会接受

  • 在设置时需要将两端设置为一样的 Overflow,否则会造成数据库不同步的情况

  • Overflow 针对的是外部路由,5 类默认路由不在抑制范围内

ospf 1
lsdb-overflow-limit 100

OSPF 主备双出口

image

要求:下层设备的数据需要通过主备出口 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;

OSPF 双塔骑兵

https://blog.csdn.net/weixin_43025343/article/details/122967118?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172104255716800186569591%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172104255716800186569591&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-122967118-null-null.142%5Ev100%5Epc_search_result_base4&utm_term=OSPF%E5%8F%8C%E5%A1%94%E5%A5%87%E5%85%B5&spm=1018.2226.3001.4187

子接口的带宽并不均分,而都是全部的物理带宽

LSA 头部信息

image

  • 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 的故障诊断

image

其他特性

OSPF 与 BGP 联动

image

解决方案—设置末节路由器 Stub Router:
当 OSPF 设备重启时,可将开销在某一时间段内设置为最大 65535,使得数据包暂时走次优路径,当时间结束后再将 COST 设置还原;
需要注意的是,这个开销值并不是设置到接口上的,而是写在了 LSA 中进行传递;

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

GR 平滑重启

https://blog.csdn.net/m0_49864110/article/details/129729435?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172121095716800185849510%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172121095716800185849510&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-129729435-null-null.142%5Ev100%5Epc_search_result_base4&utm_term=GR&spm=1018.2226.3001.4187

NSR 不间断路由

通过协议备份机制,实现主备倒换时控制平面(路由)和转发平面(业务)均不中断,保证在设备发生倒换的过程中,路由处理不中断,因为:

  • 邻居和拓扑信息不丢失;

  • 邻居关系不中断;

优点:

  • 不依赖也不影响对端设备,没有互通问题

  • 路由的收敛速度要比 NSF(GR)快

  • NSR 是在有主用主控板和备用主控板的设备上的,主用主控板发生故障是不影响邻居关系的一种可靠性技术

  • 一般情况下,可以使用 NSR 的话不会使用 NSF

NSR 原理主要包括以下几个部分:
批量备份:NSR 功能使能后,备板重启时,主用主控板将路由信息和转发信息批量备份到备用主控板上。批量备份过程在实时备份过程之前进行,此时 NSR 无法实施主备倒换过程。
实时备份:当批量备份过程结束后,系统进入实时备份阶段,任何在控制平面和转发平面的改变都将实时从主用主控板备份到备用主控板上。在该阶段,备用主控板能够随时代替主用主控板工作。
主备倒换:在已经完成备份的 NSR 系统主用主控板发生故障时备用主控板会通过硬件状态感知到主用主控板故障,并成为新的主用主控板。备用主控板升主后,该单板会切换接口板的报文上送通道。由于倒换时间足够短,路由协议在主备切换的过程中不会和邻居节点断连

image

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?

image

答:根据 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 的传递是否正常?

image

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

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