「OSPF」- 表:Neighbor Table; LSDB Table; Routing Table

先有建立邻居关系,再相互交互 LSA 以形成 LSDB,最后计算生成路由表;
OSPF Neighbor Table
OSPF Neighbor Table(邻居表),其中记录邻居关系:
1)OSPF 在传递链路状态信息之前,需要通过 Hello 报文来先建立 OSPF 邻居关系;
在华为设备中,使用 display ospf peer 来查看邻居关系;
OSPF LSDB Table, LSA
OSPF LSDB Table(LSDB),其中记录 LSA 信息:
1)记录自己的 LSA 信息;记录从邻居收到的 LSA 信息;同区域路由器的 LSDB 是相同的;
2)Type 表示 LSA 的类型;AdvRouter 标识发送 LSA 的路由器;
在华为设备中,使用 display ospf lsdb 来查看 LSDB 表:

<AR2>display ospf lsdb

OSPF Process 1 with Router ID 2.2.2.2
Link State Database

Area: 0.0.0.0
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 4.4.4.4 4.4.4.4 608 36 8000000C 1
Router 2.2.2.2 2.2.2.2 609 36 8000000B 1
Router 1.1.1.1 1.1.1.1 607 36 8000000E 1
Router 3.3.3.3 3.3.3.3 608 36 8000000C 1
Network 10.0.12.3 3.3.3.3 608 40 80000006 0

OSPF Routing Table
OSPF Routing Table(协议路由表),其中记录 OSPF 路由:
1)通过 OSPF 协议学习而得到的路由表(此表是协议路由表,而非本地核心路由表);
2)其包含 Destination、Cost、NextHop 等等指导转发的信息;
3)在华为设备中,使用 display ospf routing 查看 OSPF 路由表;
注意事项,在 OSPF 中,配置的是地址范围,而非路由条目,但是对端收到的仍旧是路由[……]

READ MORE

「OSPF」- 概念术语

Router ID
解释:在 AS 中,唯一标识一台运行 OSPF 的路由器,以区分不同路由器(所以 Router ID 不能重复)。在 LSA 中,包含 Router ID 信息,用于区分 LSA 的来源;
格式:Router ID,任意,唯一,其值格式与 IP Address 格式类似;
配置:
1)手动指定(建议手动指定;其他方法并不能得到稳定的 Router ID 参数,会导致不确定性)
2)系统自动生成:
—- 使用 Loopback 中最大的 IP Address 作为 Router ID 参数;
—- 若未配置 Loopback 接口,则使用物理接口的最大 IP Address 作为 Router ID 参数;
OSPF Area
解释:OSPF Area(OSPF Domain),系列使用相同策略的连续 OSPF 网络设备所构成的网络,Area,是从逻辑上将设备划分为不同的组。

区域号(Area ID)
每个 Area 用区域号(Area ID)来标识,以标识某个 OSPF 区域;
1)是个 32bit 的非负整数,按点分十进制的形式(与 IPv4 Address 格式相同)呈现。例如:Area 0.0.0.1;
2)缩写为十进制数:为了简便起见,我们也会采用十进制的 Area 1 形式来表示;Area 256 表示为 Area 0.0.1.0 表示;
区域类型:骨干区;非骨干区;
Area 0:骨干区;只有 Area 0 才是骨干区;
Area x:非骨干区;非骨干区要必须直接相连骨干区;(否则需要使用虚链路,这是不好的实践)
如果 OSPF 没有划分区域,最这设备增多和网络增大,将出现诸多问题:
1)LSDB 越来越大,同时导致 OSPF 路由表规模增加,存储、内存等资源消耗增加;
2)LSDB 增大,导致路由计算变得困难;
3)当网络拓扑发生变化时,LSA 全域泛洪和全网 SPF 重计算也变的困难;
在划分 OSPF 区域后,将带来以下优势:
1)减小 LSA 泛洪的范围,有效地把拓扑变化的影响控制在区域内,以优化网络;
2)将 OSPF 划分为区域,能提高网络扩展性,能使 OSPF 支撑更大规模组网;
3)在区域边界路由器(ABR)能够进行路由汇总,减小路由表规模;
OSPF Router 在同个区域内的网络中泛洪 LSA 信息。为了确保每台路由器都拥有对网络拓扑的一直认证,LSDB 需要在 Area 内进行同步;
每个区域都维护一个独立的 LSDB;不同区域的 LSDB 是不同的;
在中小型企业中,我们通常使用单区域做网,并使用 Area 0 以保证以后的扩展性;
在大型企业网中,则分为多个区域;
路由器类型[……]

READ MORE

「OSPF」- 快速重路由 | FRR | Fast ReRoute

当链路出现故障时,OSPF 开始收敛。如果 LSDB 数量庞大,将出现 OSPF 收敛速度缓慢的问题。
FRR(Fast reroute,快速重路由)技术用于解决该问题,在发生 OSPF 故障中,以实现快速地重路由,进而实现流量保护。
FRR 利用 LFA(Loop-Free Alternates)算法预先计算出备份路径,保存在转发表中。在故障时,将流量快速切换到备份链路上,保证流量不中断,从而达到流量保护的目的。
LFA 计算备份链路的基本思路是:以可提供备份链路的邻居为根节点,利用 SPF 算法计算出到目的节点的最短距离,然后按照 不等式 计算出开销最小且无环的备份链路。
FRR 是动态 IP FRR;
FRR 特性可将故障恢复时间降低到 50ms 以内;
流量保护的类型
OSPF IP FRR 的流量保护分为:

链路保护:当需要保护的对象是经过特定 链路 的流量时;
节点链路双保护:当需要保护的对象是经过特定 设备 的流量时;

节点保护优先级 > 链路保护;
如下 Distance_opt(X,Y) 表示指节点 X 到 Y 间的最短路径;
链路保护

在常规 OSPF 收敛中,从 S ⇒ D 时,存在两条流量转发链路(并非同时存在):
1)当链路正常时,S ⇒ R1 ⇒ D,为最短路径树,负责进行流量转发;
2)当链路故障时,拓扑重新计算,S ⇒ N ⇒ R1 ⇒ D,再进行流量转发;
当开启 FRR 特性后,如果满足 Distance_opt(N,D) < Distance_opt(N,S) + Distance_opt(S,D) 链路保护公式,则将提前进行 S ⇒ N ⇒ R1 ⇒ D 的拓扑计算,以保证当 S ⇒ R1 故障后可将流量直接切换到 S ⇒ N 链路,而无需等待拓扑计算完成后才开始转发数据;
理解链路保护公式 | 为什么要满足链路保护公式?如何理解链路保护公式?
针对该拓扑,FRR 将在 S 上启用,然后 S 将提前完成备用链路的计算。当具有备份链路之后,如果 S 发现主链路故障,S 不需要重新收敛(计算路径),直接将流量通过备用链路转发到 N 设备。
轮到 N 设备处理流量时,我们期望 N ⇒ D 的流量转发路径是 N ⇒ R1 ⇒ D 而非 N ⇒ S ⇒ R1 ⇒ D 路径,否则就失去 FRR 的意义,所以我们才要保证 N->D 的流量不会再经过 S,即 Cost(N->S->R1->D) > Cost(N->R1->D),也就是我们的链路保护公式。
节点链路双保护

流量从 S 到 D 进行转发,当网络 Cost 满足节点链路保护公式时,才可保证当主链路故障后,S 将流量切换到备份链路 S ⇒ N 后可以[……]

READ MORE

「OSPF」- DD | Database Description

用途:OSPF_Header.Type = 2,描述本地 LSDB 摘要信息,其他设备将使用该摘要信息来选择要同步的数据(为了避免全量同步);
在 ExStart 中,主从协商的 DD 报文(First DD):

Open Shortest Path First
OSPF Header
OSPF DB Description
Interface MTU: 0
Options: 0x02, (E) External Routing
0… …. = DN: Not set
.0.. …. = O: Not set
..0. …. = (DC) Demand Circuits: Not supported
…0 …. = (L) LLS Data block: Not Present
…. 0… = (N) NSSA: Not supported
…. .0.. = (MC) Multicast: Not capable
…. ..1. = (E) External Routing: Capable
…. …0 = (MT) Multi-Topology Routing: No
DB Description: 0x07, (I) Init, (M) More, (MS) Master
…. 0… = (R) OOBResync: Not set
…. .1.. = (I) Init: Set
…. ..1. = (M) More: Set
…. …1 = (MS) Master: Yes
DD Sequence: 52

在 Exchange 中,包含数据摘要的 DD 报文:

Open Shortest Path First
OSPF Header
OSPF DB Description
Interface MTU: 0
Options: 0x02, (E) External Routing
0… …. = DN: Not set
.0.. …. = O: Not set
..0. …. = (DC) Demand Circuits: Not supported
…0 …. = (L) LLS Data block: Not Present
…. 0… = (N) NSSA: Not supported
…. .0.. = (MC) Multicast: Not capable
…. ..1. = (E) External Routing: Capable
…. …0 =[……]

READ MORE

「OSPF」- LSA,Link-state Advertisement

LSA-TYPE=1 ⇒ Router LSA

LSA Header
Link State ID:自身的 Router ID;
Advertising Router:自生的 Router ID;
LSA Payload
V(Virtual Link):如果产生此 LSA 的路由器是虚连接的端点,则置为 1;
E(External):如果产生此 LSA 的路由器是 ASBR,则置为 1;
B(Border):如果产生此 LSA 的路由器是 ABR,则置为 1;
Links:在 LSA 中 Link(链路)数量。Router LSA 使用 Link 来承载路由器直连接口的信息。
<Link Entry>:在 Links 后,是多个 Link 条目,每个包含 Link ID、Link Data、Link Type、TOS、Metric 部分;

Link Type
Link ID
Link Data
Description

P2P
邻居路由器的 Router ID
宣告该 LSA 的接口的网络地址
接口其自身信息;
描述从本路由器到邻居路由器间的 P2P 链路,属于设备信息;

StubNet
宣告该 LSA 的接口网络地址
该 Stub 网络的网络掩码
接口其所连网段信息;
描述从本路由器到 Stub 网段(例如 Loopback 接口)的连接,属于网络信息;

TransNet
DR 的接口网络地址
宣告该 LSA 的接口的网络地址
接口其所连网段信息;
描述从本路由器到 Transit 网段(例如MA或者NBMA网段)的连接,属于设备信息;

LSA-TYPE=2 ⇒ Network LSA

LSA Header
Link State ID:DR 的接口 IP-ADDR;
Advertising Router:DR 的 Router ID;
LSA Payload
Network Mask:当前 MA Network 的子网掩码。
Attached Router:连接到该 MA Network 的路由器的 Router ID(与该 DR 建立邻接关系的 Router-ID,及 DR 自身 Router-ID)。如果有多台路由器接入该 MA网络,则使用多个字段描述。
补充说明
1)需要 Network LSA 与 Router LSA(TransNet) 结合,才能完成网络的完整描述;
2)在同个区域内,仅存在 Network LSA[……]

READ MORE

「OSPF」- 外部路由:通告、计算,External Route (LSA 4, LSA 5)

问题描述
在网络中,部分链路未开启 OSPF 协议,例如:
1)路由器连接外部网络,且外部网络使用 Static Routing 或 BGP 协议等等其他路由协议;
2)服务器的直连链路,其未开启 OSPF 协议;

解决方案
我们需要将这些路由引入到 OSPF Area 中,这些被引入的路由则是 External Route(外部路由,即 AS 外的路由),其以 AS-External LSA(5 类 LSA)的形式存在
泛洪范围:在整个 OSPF 网络内(所有区域);
针对引入路由的设备,其被称为 ASBR(只要 OSPF 设备引入外部路由,则其为 ASBR 设备。若 ABR 引入外部路由,则该 ABR 也为 ASBR)。
图示 R1 将外部路由引入到 Area 0 中,所以 R1 亦为 ASBR 设备:
域内路由(LSA TYPE 5: AS-External LSA)

R1 引入路由
R1与 Server 直连网段为 192.168.1.0/24
在 R1 上,通过路由引入,R1 会向 OSPF 注入用于描述 192.168.1.0/24 路由的 AS-External LSA,该 LSA 将在整个 OSPF 域内泛洪;
在通告的过程中,LSA 信息不会发生变化;
R3 计算路由
当发送 R3 设备后,R3 开始路由计算:
1)对于外部路由信息,在 R3 的 OSPF Tree 上,将以叶子节点形式挂载在 R1 上;
2)根据 AS-External LSA 的 Advertising Router,R3 能判断到达外部路由需要先经过 R1 设备;
3)R3 经过区域内 SPF 计算,已将 R1 添加到 SPF Tree,并将到达外部路由的下一跳设置为 R1;
域间路由(LSA TYPE 4: ASBR-Summery LSA)
问题描述
R3 与 ASBR R1 同处同个区域,所以它知道 R1 的存在,因此 R3 能够根据区域内所泛洪的 Router LSA 及 Network LSA 计算出到达 ASBR 的路由。
但是 R5 和 R1 不在同一区域,导致 R5 无法找到 AS-External LSA 中的 Advertising Rotuer 设备;
解决方案
所以,在 OSPF 中,引入 ASBR-Summary LSA(4 类 LSA) 以解决该问题。即 R3 需要同时向 R5 发送 LSA Type 4 与 LSA Type 5 报文;

LSA Type 4 由 ABR 产生,发往非骨干区,即 R2 及 R3 各自产生 ASBR-Summary LSA 报文,并分别通告到 Area 1 及 Area 2;
当发送 R5 设备后,R5 开始路由计算:[……]

READ MORE

「OSPF」- 区域类型,Types of OSPF Areas

问题描述
OSPF Area 分为两种类型:
1)传输区域(Transit Area):例如 Area 0 区域;除承载本区域发起的流量和访问本区域的流量外,还承载源目地址都不属于本区域的流量(穿越型流量);
2)末端区域(Stub Area):例如 Area 1 和 Area 2 区域;仅承载本区域发起的流量和访问本区域的流量;

针对 区域内、区域间、外部路由 计算,OSPF Router 需要依靠网络中的 LSA 报文来完成。当网络规模变大时,设备的 LSDB 规模也变大,设备的路由计算变得更加吃力,造成设备性能浪费。
虽然划分区域能够减少 LSA 数量,但是传递到末端设备的流量依旧会超过设备的承载能力。我们还需要进一步减少 LSA 的数量,以实现在不影响 IP 可达性的情况下,减少 LSA 的数量。
解决方案
我们的目的是减少 LSA 的数量,所以 OSPF 引入特殊区域来控制 LSA 的传递:
1)Stub Area & Totally Stub Area
2)NSSA Area & Totally NSSA Area(LSA TYPE 7)[……]

READ MORE

「OSPF」- 特殊区域:Stub Area & Totally Stub Area

Stub Area
特性特征
针对 Stub Area 的 ABR 设备:
1)仅允许 LSA Type 3 进入;
2)不允许 LSA Type 4 进入,即不向 Stub Area 传播其接收到的 AS-External Route;
3)不允许 LSA Type 5 进入(鉴于没有 LSA TYPE 4 进入该区域,那么也无需 LSA TYPE 5 进入);
同时,为保证 Stub Area 能够到达区域外部,Stub Area 的 ABR 将生成缺省路由(其以 Network Summary LSA 存在);

此时在 Stub Area 中路由器的 LSDB、路由表规模都会大大减小;
配置方法
当配置 Stub Area 时,需要注意下列几点:
1)Area 0 不能被配置为 Stub Area;
2)在 Stub Area 中,所有 Router 必须将该区域配置为 Stub 类型([Huawei-OSPF-Area] stub);
3)在 Stub Area 内,不能引入也不接收 AS-External Route,即无法进行外部路由引入;
4)Virtual Link 不能穿越 Stub Area(如果 Stub Area 存在虚链路,那它应该属于 Transit Area 而非 Stub Area,相矛盾);
Totally Stub Area
特性特征
1)不允许 LSA Type 3 进入(即不向 Stub Area 传播其接收到的 Network-Summary Route);
2)不允许 LSA Type 4 进入(即不向 Stub Area 传播其接收到的 AS-External Route);
3)不允许 LSA Type 5 进入(鉴于没有 LSA TYPE 4 进入该区域,那么也无需 LSA TYPE 5 进入);
同时,为保证 Totally Stub Area 能够到达区域外部,需要 Stub Area 的 ABR 来生成缺省路由(其以 Network Summary LSA 存在);

配置方法
当配置 Totally Stub 区域时,需要注意:
1)类似配置 Stub Area,但仅需要在 ABR 的 OSPF 上需要追加 no-summary 关键字([Huawei-OSPF-Area] stub no-summary);
2)针对其他非 ABR 设备不产生 Network-Summary LSA 信息,所以无需 no-summary 参数,仅配置 stub 即可;
查看路由表,将仅能看到 Router-LSA、Network-LSA、Network-Summary-LSA(Default Route):

WI[……]

READ MORE

「OSPF」- Virtual Link,虚链路,虚连接

问题描述
某些特殊场景(糟糕的网络设计),导致部分区域无法接入骨干区域。鉴于 OSPF 的防环机制,ABR 从非骨干区接收到的 Net-Sum LSA 不会用于区域间路由计算;
解决方案
OSPF 要求骨干区域必须是连续的,但是并不要求物理上连续,能够通过 Virtual Link 使骨干区域在逻辑上连续;
OSPF Virtual Link 是种虚拟的、逻辑的链路,被部署在两台 OSPF 路由器之间,它穿越某个非骨干区域,用于实现另一个非骨干区域与 Area0 的连接;
原理简述

Virtual Link 能够在任意两个 ABR 上建立,但是要求这两个 ABR 都有端口连接到同个非骨干区域;
此时,可以将 R2 理解为桥接设备 —— 通过 R2 将 Area 2 桥接到 Area 0,此时 R3 为 ABR;
特性特征
Virtual-Link 属于 Area-0;
注意事项
1)创建虚连接使 OSPF 可通过非骨干区域通信,违背 OSPF Area 间的防环规则,在某些场景下会导致路由环路的产生,所以不建议部署 OSPF 虚连接;
2)Virtual Link 应该始终作为一种临时的技术手段来解决非骨干区域没有与 Area0 直接相连的情况;
应用场景

// 通过虚链路,将 Area2 接入 Area0
Area0 <==> Area1 <==> Area2

// 通过虚链路,连接两个 Area0
Area0 <==> Area1 <==> Area0

// Virtual Link 属于 Area 0
// 在 Area1 与 Area3 间创建 Virtual Link
Area1 <==> Area2 <==> Area3[……]

READ MORE

「OSPF」- 协议交互过程概述

设备直连,运行 OSPF 协议,大致交互过程如下:
1)彼此发现:设备开始相互发送 Hello 报文,组播 224.0.0.5 地址,发现彼此 ⇒ 建立邻居关系(无路由交互的关系);
2)协商主从:邻居间协商主从,用于确定数据同步的 DD 报文起始序列号;此时 DD 为 First DD 报文;
3)数据选择:通过 DD 报文,相互描述各自的 LSDB 信息,仅包含数据的摘要信息,以供对方选择数据条目;
4)数据同步:请求 LSA 信息,响应 LSA 信息,汇总收到的 LSA 信息后,形成 LSDB 信息 ⇒ 建立邻接关系(有路由交互的关系);
3)路由计算:路由器利用 LSDB 信息,并使用 SPF 算法,来生成最短路径树,以形成路由表;每个路由器都有自己的树;[……]

READ MORE

「OSPF」-

DR and BDR
在 Multi-Access(MA、NBMA) Networking 中,如果多个 Router 间需要建立邻接关系:

导致网络存在过多的 OSPF 邻接关系,造成增加设备负担,增加 OSPF 报文数量;
当拓扑发生变化时,网络内将出现大量 LSA 泛洪,造成带宽的浪费和资源的损耗;
同时,重复的 LSA 泛洪,造成造成资源浪费;
需要建立 n*(n−1)/2 个邻接关系,造成管理复杂;

注意:在解释 DR 和 BDR 之前,需要先了解 OSPF 的网路类型;
针对该问题,提出概念:DR(Designated Router)、BDR(Backup Designated Router)、DR Other

在 MA 中,DR 负责建立和维护邻接关系并负责 LSA 的同步;
DR/BDR 与 DR Other 建立邻接关系,并交换链路状态信息;
DR Other 间不直接交换链路状态信息;

在 MA/NBMA 中,选举 DR/BDR 的过程
选举(Election)依旧是其本质:

DR 基于端口的 Router Priority 进行选举(高胜出),然后在根据 Router ID 选举(高胜出);
非抢占式:当原始 DR 恢复后,不会抢占 DR 角色(不可抢占,即高优先级接入,并不会发生拓扑变化);
在 Tow-Way State 中,选举 DR/BDR 需要 40s 时间;

路由器交互 Hello 报文,来选举 DR 与 BDR 角色;
在 MA 或 NBMA 上,DR 和 BDR 的选举过程如下:
1)接口 UP 后,发送 Hello 报文,同时进入到 Waiting 状态。在该状态下会有个 WaitingTimer,该计时器的长度与 DeadTimer 是一样的。默认值为 40s,用户不可自行调整;
2)在 WaitingTimer 触发前,发送的 Hello 报文是没有 DR 和 BDR 字段的。在 Waiting 阶段,如果收到 Hello 报文中有 DR 和 BDR,那么直接承认网络中的 DR 和 BDR,而不会触发选举。直接离开 Waiting 状态,开始邻居同步;
3)假设网络中已经存在一个 DR 和一个 BDR,这时新加入网络中的路由器,不论它的 Router ID 或 DR 优先级有多大,都会承认现网中已有的 DR 和 BDR;
4)当 DR 因为故障 Down 掉之后,BDR 会继承 DR 的位置,剩下的优先级大于 0 的路由器会竞争成为新的 BDR;
5)只有当不同 Router ID,或者配置不同 DR 优先级的路由器同时起来,在同一时刻进行 DR 选举,才会应用 DR 选举规则产生 DR;[……]

READ MORE

「OSPF」- LSU | Link State Update

解释说明
OSPF_Header.Type = 4;其是针对 LSR 的响应,其包含对方 LSR 要求的 LSA 数据;
结构概览

注:该图示并不严谨,并没有表示出 Number of LSA 字段;
Number of LSAs
Number of LSAs:LSA 的数量;
图示未展示出 Number of LSAs 字段,然后才是多个 LSA Header + Payload 结构;
请结合报文示例部分显示的报文结构进行查看;
LSA Header
LS Age(链路状态老化时间):此字段表示 LSA 已经生存的时间,单位是秒。当 LSA 被始发时,该字段为 0,随着 LSA 在网络中被泛洪,该时间逐渐累加,当到达 MaxAge(缺省值为 3600s)时,LSA 不再用于路由计算(当然,路由器默认每 1800s 会重发该 LSA 报文,以刷新数据);
Options(可选项):每个 bit 都对应 OSPF 所支持的某种特性;
LS Type(链路状态类型):指示该 LSA 的类型,即决定 Payload 部分的数据内容。对于不同的 LSA 类型,具有不同的作用;
Link State ID(链路状态标识):不同的 LSA,对该字段的定义不同;
Advertising Router(通告路由器):产生该 LSA 的路由器的 Router ID;
LS Sequence Number(链路状态序列号):当 LSA 每次有新的实例产生时,序列号就会增加。该字段用于判断 LSA 的新旧或是否存在重复的实例。序列号范围是 0x80000001-0x7FFFFFFF,路由器始发一个 LSA,序列号为 0x80000001,而后每次更新序列号 +1,当 LSA 达到最大序列号时,重新产生该 LSA,并且把序列号设置为 0x80000001;
LS Checksum(校验和):用于保证数据的完整性和准确性;
Length(长度):== LSA Header + Payload
LSA 存在于 LSU 中;当然也存在于 DD 中,但是 DD 仅包含 LSA Header 部分;
LS Type、Link State ID、Advertising Router,能够唯一表示一个 LSA 条目;
LS Age、LS Sequence Number、Checksum,能够判断 LSA 的新旧;
LSA Payload
参考 LSA Payload 笔记,获取 LSA 相关的内容;[……]

READ MORE

「OSPF」- LSA 处理流程

通过交互 LSA 信息,OSPF 实现链路状态数据库同步
当 Router 收到 LSA 后,按照以下原则处理:
1)如果收到的 LSA 本地没有,则更新 LSDB 并泛洪该 LSA;
2)如果本地 LSDB 已存在该 LSA,但是收到的更新,则更新 LSDB 并泛洪该 LSA;
3)如果收到的 LSA 和 LSDB 中相同,则忽略,并终止泛洪;
4)如果收到的 LSA 损坏(例如 Checksum 错误),则不接收该 LSA;

Max Age = 3600,是用来进行路由撤销;[……]

READ MORE

「OSPF」- 特殊区域:NSSA Area & Totally NSSA Area

问题描述
Stub Area、Totally Stub Area 解决末端区域(Stub Area)维护过大 LSDB 带来的问题,这样可以避免大量外部路由引入造成设备资源消耗;
但对于某些特定场景,它们并不是最佳解决方案:鉴于 OSPF 规定 Stub Area 是不能引入外部路由的,但是,我们“既需要引入外部路由,又要避免外部路由带来的资源消耗”的场景,此时 Stub 和 Totally Stub Area 则无法满足需求;
此时需要 NSSA 与 Totally NSSA 来解决该问题;
Stub Area,不引入也不接受 AS-External LSA,但是在某些场景下,我们需要在 Stub-Area 中引入外部路由;
解决方案
NSSA(No So Stub Area),它是改良的 Stub Area —— 能够(从特定方向)引入外部路由;
NSSA Area
特性特征
针对 NSSA 特性:
1)具有 Stub Area 特性,但默认路由存在差异,ABR(R3)会产生 Default-Route(以 LSA TYPE 7 存在);
2)能够引入外部路由(但仅限于本区域引入的外部路由),以 NSSA LSA(LSA TYPE 7)存在;同时,又不会学习其它区域引入的 AS-External Router;
路由传递

如图所示:
1)R3 不会将外部路由引入 NSSA Area,但是 R5 能够引入本区内的外部路由(192.168.3.0/24):
2)当路由在区域间传递时,ABR 会将 LSA TYPE 7 转为 LSA TYPE 5 进行传递
3)R2 向 Area-1 传递 LSA-TYPE-5,也伴随着 LSA TYPE 4 产生;
配置案例

查看信息:

<R5>display ospf lsdb

OSPF Process 1 with Router ID 10.0.5.5 Area: 0.0.0.2

Type LinkStateID AdvRouter Metric
NSSA 192.168.3.0 10.0.5.5 1
NSSA 0.0.0.0 10.0.3.3 1
Sum-Net 10.0.13.0 10.0.3.3 1
Sum-Net 10.0.24.0 10.0.3.3 3

Totally NSSA Area
特性特征
针对 NSSA 特性:
1)具有 Totally Stub Area 特性,但默认路由存在差异:ABR(R3)会产生两条 Default-Route(LSA TYPE 7 与 LSA TYPE 3);
2)能够引入外部路由(但仅限于本区域引入的外部路由),以 NSSA LSA(LSA TYPE[……]

READ MORE

「OSPF」- Hello 报文 | IP.OSPF-Header.Type = 1

报文的主要作用:
1)邻居发现:自动发现邻居路由器;
2)邻居建立:完成 Hello 报文中的参数协商,建立邻居关系;
3)邻居保持:通过周期性发送和接收,检测邻居运行状态;
在以太网链路上,路由器通常以组播形式来发送 Hello 报文:
1)224.0.0.5 的组播地址为 OSPF 设备的预留 IP 组播地址。
2)224.0.0.6 的组播地址为 OSPF DR/BDR 的预留 IP 组播地址。
3)对于不支持组播的链路,OSPF 支持采用 Unicast 的方式发送 Hello 报文。

Network Mask:发送 Hello 报文的接口的网络掩码。某些厂商的设备要求网段相同,否则无法建立邻居关系;
Hello Interval:发送 Hello 报文的时间间隔;在以太网中,为 10s 时间;
Options:
1)E:是否支持外部路由;两端需要同时支持才能建立邻居关系;例如错误配置导致两端没有同时配置 Stub Area,进而导致该选项不一致而无法建立邻居关系;
2)MC:是否支持转发组播数据包;
3)N/P:是否为 NSSA 区域;
Router Priority:default=1,用于选举 DR(指定路由器),BDR(备份指定路由器)
Router Dead Interval:通常为 Hello Interval * 4 时间;如果该时间未收到 Hello 则认为邻居关系解除,关系进入 Down 状态;
Designated Router:default=0,经过优先级选举之后,该字段才会有值,其为接口地址;
Backup Designated Router:default=0,经过优先级选举之后,才会有值,为接口地址;
Active Neighbor:邻居,以 Router ID 标识;[……]

READ MORE

「OSPF」- 路由控制:LSA Filter(LSA 过滤)

对发送的 LSA 进行过滤(filter-lsa-out)
当两台路由器间存在多条链路时,可以在某些链路上通过对发送的 LSA 进行过滤,减少不必要的重传,节省带宽资源;
通过对 OSPF Outbound 的 LSA 进行过滤,能够避免向邻居发送无用的 LSA,从而减少邻居 LSDB 的大小,提高网络收敛速度;
配置案例
配置对 OSPF 接口出方向的 LSA 进行过滤:

[Huawei-GigabitEthernet0/0/1] ospf filter-lsa-out { all | { summary [ acl xxx ] | ase [ acl xxx ] | nssa [ acl xxx ] } }

all:对除 Grace LSA 外的所有 LSA 进行过滤;
summary:对 Network Summary LSA(Type3 LSA)进行过滤;
ase:对 AS External LSA(LSA Type 5)进行过滤;
nssa:对 NSSA LSA(Type7 LSA)进行过滤;
acl xxx:指定 ACL 编号(或名称),以引用 ACL 进行过滤;

// 补充说明:
// 1)对于已经发送的 LSA,要到 3600 秒才能达到老化时间,所以并不会直接看到效果;

针对 ABR LSA-TYPE-3 进行过滤(filter)
对区域内出、入方向 ABR Type3 LSA(Summary LSA)设置过滤条件,只有通过过滤的 LSA 才能被发布和接收;
通过对区域内的 LSA 进行过滤,能够避免向邻居发送无用的 LSA,从而减少 LSDB 的大小,提高网络收敛速度;
配置对区域内出方向的 Type3 LSA 进行过滤:

[Huawei-ospf-1-area-0.0.0.1] filter { acl-number | acl-name acl-name | ip-prefix name | route-policy name } export
acl-number:指定基本访问控制列表号。整数形式,取值范围是 2000~2999;

配置对区域内入方向的 Type3 LSA 进行过滤

[Huawei-ospf-1-area-0.0.0.1] filter { acl-number | acl-name acl-nam[……]

READ MORE

「OSPF」- 特性:认证

解决方案
OSPF 支持报文认证功能,只有通过认证的 OSPF 报文才能被接收;
原理简述
注意,Authentication 字段在 OSPF.Header 中,所以不管接口认证还是区域认证,仅是范围不同,而认证机制是完全相同的。
路由器支持两种 OSPF 报文认证方式,当两种认证方式都存在时,优先使用接口认证方式:
1)区域认证方式:一个 OSPF 区域中所有的路由器在该区域下的认证模式和口令必须一致;
2)接口认证方式:相邻路由器直连接口下的认证模式和口令必须一致;
两种认证方式能够混合使用,因为区域认证方式只是对区域内所有接口(链路)进行认证;
应用场景
配置案例
配置接口认证:

[Huawei] interface GE 0/0/0
[Interface] ospf authentication-mode md5 1 huawei # 在 MA 中,所有路由器都需要进行配置

配置区域认证:

[R2]ospf
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]authentication-mode simple cipher Huawei[……]

READ MORE

「OSPF」- 部分路由计算,PRC, Partial Route Calculation(针对路由变化场景)

问题描述
SPF:负责进行完整的拓扑计算;
I-SPF(增量的 SPF 计算):针对发生变化的网络拓扑(例如新增路由节点),来进行部分 SPF 计算。例如 当网络拓扑发生变化,会产生 LSA-T1 与 LSA-T2 消息,将触发 I-SPF 计算。
但是,在某些场景下,仅是路由发生变化(例如增加新的网段),而未增加新的网络设备。
解决方案
PRC(Partial Route Caculation,部分路由计算),该技术用于实现 OSPF 收敛速度,仅针对与网络路由的变化(在拓扑未发生变化的场景中使用,所以不需要进行 SPF 与 I-SPF 计算)。
原理简述
当网络上路由发生变化的时候,根据 SPF 算法算出来的最短路径树来更新路由。
即 PRC 只对发生变化的路由进行重新计算,而不计算节点路径。
特性特征
加快路由的计算:当 OSPF 网络新增网段时,只关注发生变化的路由。再次强调,PRC 是用于处理路由变化的。
场景介绍

该网络运行 OSPF 协议,并完成网络收敛后,图中是以 R1 为根的最短路径树。
此时,当 R1 访问 R5 时,通过 R1 下行链路的出接口,R3 上行链路接口的 IP-ADDR 到达该目的地。
当 R5.Loopback0 开启 OSPF 后,即 OSPF 网络内有新增网段,此时 PRC 计算如下:
1)R5 全网泛洪新增 LSA;
2)R1 收到该 LSA 后会创建新的路由,继承原有访问节点 R5 的路径及下一跳,即最短路径树不变,只在节点 R5 上新增叶子;
3)所以 R1 访问 R5.Loopback0 时,通过 R1 下行链路的出接口,R3 上行链路接口的IP地址到达该目的地。
在路由计算中,节点则代表路由器,叶子代表路由,PRC只处理变化的叶子信息。
配置方法
在华为设备上,OSPF 的 PRC 功能默认开启。[……]

READ MORE

「OSPF」- 特性:静默端口

通过 Silent-Interface 的配置,增强 OSPF 的组网适应能力,减少系统资源的消耗;
Silent-Interface 有以下特性:
1)Silent-Interface 不会接收和发送 OSPF 报文;
2)Silent-Interface 的直连路由仍可以发布出去;

[R1]ospf
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 192.168.4.0 0.0.0.255
[R1-ospf-1]silent-interface GigabitEthernet 0/0/1[……]

READ MORE

「OSPF」- 缺省路由通告(Default Route Injection)

问题描述
在 OSPF Networking 中,区域边界和自治系统边界通常都是由多个路由器组成的多出口冗余备份或者负载分担;
解决方案
通过配置缺省路由(default route),能够减少路由表的容量,并保证网络的高可用性(缺省路由屏蔽网络抖动带来的重新收敛,所以提高可靠性);
应用场景
针对 OSPF Default Route 特性,通常应用于下面两种情况:
1)由 ABR 发布 LSA-TYPE-3 Default Route,用来指导区域内路由器进行区域之间报文的转发;
2)由 ASBR 发布 LSA-TYPE-5 Default Route 或 LSA-TYPE-7 Default Route,用来指导 OSPF 路由域内路由器进行域外报文的转发;
由于 OSPF 路由的分级管理,缺省路由的优先级:Type3 > Type5/Type7;
区域类型 and 缺省路由
关系概览

普通区域
缺省情况,普通 OSPF 区域内的 OSPF Router 是不会产生缺省路由的,即使它有缺省路由;
当该 Router 需要向 OSPF Area 中发布缺省路由时,需要手工执行 default-route-advertise 命令;
当配置完成后,路由器会产生一个缺省 ASE-LSA(LSA-TYPE-5),并且通告到整个 OSPF 自治系统中;
Stub Area
在 Stub Area 中,不允许 LSA-TYPE-5 传播,但允许 LSA-TYPE-3 传播;
但是,在 Stub Area 内的路由器只能通过 ABR 学到自治系统外部的路由,否则无法进行通信;
在 Stub Area 中:
1)ABR 会自动产生一条缺省的 LSA-TYPE-3 通告到整个 Stub Area;
2)通过该缺省路由,ABR 将到达 AS 外部的流量吸引到自己这里,然后通过该 ABR 转发出去;
Totally Stub Area
在 Totally Stub Area 中,既不允许 LSA-TYPE-5 在区域内传播,也不允许 LSA-TYPE-3 在区域内传播;
但是,在 Totally Stub Area 内的路由器只能通过 ABR 学到自治系统外部和其他区域的路由;
在 Totally Stub Area 中:
1)ABR 会自动产生一条缺省的 LSA-TYPE-3 通告到整个 Totally Stub Area;
2)通过该缺省路由,ABR 将到达 AS 外部的流量吸引到自己这里,然后通过该 ABR 转发出去;
NSSA
在 NSSA 中,如果希望通过 NSSA/ASBR 到达 AS-External-Route,而其它外部路由通过其它区域出去:
1[……]

READ MORE

「OSPF」- 多进程(OSPF Multiple Process)

OSPF 支持多进程,在同一台路由器上可以运行多个不同的 OSPF 进程;
特性特征
多个进程间,互不影响,彼此独立。
在不同 OSPF 进程间,路由交互相当于不同路由协议之间的路由交互;
针对路由器,某个接口只能属于某个 OSPF 进程。
应用场景
MPLS VPN
OSPF Multiple Process 的典型应用就是在 VPN 场景。
当创建 OSPF 进程时,如果指定 VPN-Instance,那么该 OSPF Process 属于此实例,否则属于全局实例。
如图,同台 PE 设备连接了两个不同的 VPN 客户,并且 PE 和 CE 间均部署 OSPF,所以需要通过在 PE 上部署多进程实现 VPN 客户间的隔离。[……]

READ MORE

「OSPF」- Open Shortest Path First | OSPF version 2 | for IPv4

认识
RIP 是种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题。所以需要发明新的路由协议,以解决 RIP 路由协议的问题。
OSPF(Open Shortest Path First,开放式最短路径优先)是 IETF 定义的一种基于链路状态的内部网关路由协议。具有扩展性强,收敛速度快等特点,作为优秀的内部网关协议被广泛使用。
针对 IPv4 协议,使用 OSPF version 2,RFC2328 版本;。这里我们主要探讨 OSPF version 2,RFC2328 版本,是 TCP/IP 协议栈的;
分类:内部网关路由协议、链路状态路由协议
组成
1)运行 OSPF 的路由器间,交互 LS(Link State)信息,而不是直接交互路由条目。LS 信息是 OSPF 能够正常进行拓扑及路由计算的关键信息,通过 LA 信息,路由器能够还原出网络拓扑。所以我们经常说:在 OSPF 中,路由器宣告拓扑(链路状态)。
2)OSPF Router 将收集到的 LS 信息保存在 LSDB 中。通过 LS 信息,路由器将清楚区域内的网络拓扑结构,这有助于计算无环路路径;
3)每台 OSPF Router 都采用 SPF 算法,计算到达目的地的最短路径,并将这些路径加载到路由表中;
性质

累计开销:基于 SPF 算法,以“累计链路开销”作为选路参考值;
组播报文:采用组播形式收发部分协议报文,优于单播(路由器过多,会给发送端带来压力)、广播(所有设备都会收到报文);
区域划分:以减小数据库规模;以减小影响规模;以对不同区域进行不同的管理;使 OSPF 能够支持更大规模的网络;
负载分担:支持对等价路由进行负载分担;
支持认证:支持报文认证:对设备进行认证检查;
无环路:使用 SPF 算法,来创建树形结构;
支持 VLSM、支持手工路由汇总:
收敛更快:快于 RIP 协议;

应用
在大型企业网络中,通常部署 OSPF 实现各个网络间的路由可达:

核心层和汇聚层,部署在 OSPF 骨干区域;
接入层和汇聚层,部署在 OSPF 非骨干区域;

园区网络:在核心交换机和汇聚交换机中,运行 OSPF 协议,实现园区网络的路由可达;
企业内部网络、区域网络(运营商通常使用 IS-IS 协议,因为路由较多,且大规模场景的 ISIS 收敛快)
改进
针对 IPv6 协议,使用 OSPF version 3,RFC2740 版本;
参考
Open Shortest Path First – Wikipedia[……]

READ MORE

「OSPF」- 与 BFD 联动(BFD Association)

问题描述
当网络的链路故障或拓扑变化时,都会导致设备重新进行路由计算,所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的;
随着科技的发展,语音、视频及其它点播业务应用广泛,而这些业务对于丢包和延时非常敏感,当数据达到吉比特速率级时,较长的检测时间会导致大量数据丢失,无法满足电信级网络高可靠性的需求;
在默认情况下,OSPF 链路故障检测时间由协议 Hello 机制决定,默认秒级,40s,所以检测到故障所需时间比较长;
解决方案
为了解决上述问题,配置 OSPF 的指定进程(或指定接口)的 OSPF 与 BFD 联动功能,能够快速检测链路的状态,故障检测时间可以达到毫秒级,提高链路状态变化时 OSPF 的收敛速度;
OSPF 与 BFD 联动就是将 BFD 和 OSPF 关联起来,一旦与邻居之间的链路出现故障,BFD 对链路故障的快速感应能够加快 OSPF 对于网络拓扑变化的响应;
原理简述

当开启 OSPF 并与 BFD 联动后:
1)三台设备(R1、R2、R3)间建立 OSPF 邻居关系,当邻居状态到达 Full 时,通知 BFD 以建立 BFD 会话(自动建立,无需手动配置信息);
2)当链路 R1 到 S1 出现故障时,BFD 首先感知到,并通知 R1,当 R1 处理 BFD 会话 Down 事件,重新进行路由计算,新的路径为:R1-R3-R2;
详细说明
BFD 与 OSPF 联动就是将 BFD 和 OSPF 协议关联起来, BFD 将链路故障的快速检测结果告知 OSPF 协议:

1)OSPF 通过自己的 Hello 机制发现邻居并建立连接;
2)OSPF 在建立新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给 BFD;
3)BFD 根据收到的邻居信息建立会话,会话建立以后,BFD 开始检测链路故障;
4)正常情况下,R1 根据 OSPF 路径开销大小选择经过 R2 到达 R4;
5)当 R1 和 R2 之间链路出现故障,BFD 首先快速检测到链路故障,BFD 会话状态变为 Down 并通知 R1;
6)R1 处理邻居 Down 事件,通知本地 OSPF 进程邻居不可达,重新进行路由计算,选择通过 R3 到达 R4;
补充说明:在 BFD 通知 OSPF 后,OSPF 将进行快速 Hello 检测,以防止 BFD 误报。所以,单纯的 ACL 屏蔽 BFD 并不能结束 OSPF 邻居关系;
配置案例
常用命令

配置前提:
如果需要使用 BFD 功能快速检测链路故障,则必须在系统视图下执行 bfd 命令,开启全局 BFD 功能。

接口配置的 BFD 特性优先级高于进程配置的 BFD 特性优先级。如果打开了接口的 BFD 开关,则按照接口上 BFD 参数建[……]

READ MORE

「OSPF」- 等价路由设置

问题描述
等价路由:在路由表中,当存在到达相同目的地址,且同种路由协议发现的多条路由时,若这些路由的开销值也相同,那么这些路由就是等价路由;
此时,设备可以实现负载分担:按照不同负载分担的方式,将从多条等价路由发送报文到同个目的地址;
解决方案
设置进行负载分担的等价路由的最大数量:

// number:等价路由的最大数量。设备型号不同,取值范围不同,具体请参考相应设备的产品文档;
[Huawei-ospf-1] maximum load-balancing number

关于这里讨论的”等价路由“:
1)其是指 OSPF 协议路由表里出现的等价路由,并非全局路由表中的等价路由;
2)并且 maximum load-balancing 是在设置从 OSPF 进入全局路由表的等价路由数量,而非控制全局路由表的等价路由数量;
配置举例

[R1] ospf
[R1-ospf-1] maximum load-balancing 2
[R1]display ip routing-table
Route Flags: R – relay, D – download to fib
——————————————————————————————-

Destination/Mask Proto Pre Cost Flags NextHop Interface
10.1.3.3/32 OSPF 10 10 D 10.1.13.3 GigabitEthernet0/0/0
OSPF 10 10 D 10.1.12.2 GigabitEthernet0/0/1[……]

READ MORE

「OSPF」- Forwarding Address(避免次优路径)

问题描述

在 Area-0 中,环境信息如下:
1)R2、R3、R4 运行 OSPF 协议;
2)R2 和 R3 的 GE0/0/1 接口都激活 OSPF,并建立邻接关系;
3)R2/R3 与 R1 并不建立 OSPF 邻接关系;
1)R2 配置到达 10.1.1.1/32 的静态路由,下一跳为 R1.GE0/0/1(10.1.123.1);
2)R2 将静态路由引入 OSPF,产生 LSA-Type-5 在区域内泛洪。
3)R3 接收到 R2 产生的 LSA-Type-5,计算出到达 10.1.1.1/32 的外部路由,并且将路由的下一跳指定为 R2(10.1.123.2)。
子 OSPF Area 内的路由器如 R4 到达 10.1.1.1/32 的路径是 R4-R3-R2-R1,该路径是次优路径。
解决方案
在 OSPF 中,LSA-T5 和 LSA-T7 中包含一个特别的字段 FA(Forwarding Address,转发地址),参考其报文格式。
FA 的引入,使得 OSPF 在某些特殊的场景下可以避免次优路径问题。
原理简述
当 ASBR 引入外部路由时:
1)如果 FA==0.0.0.0,那么数据包将被转发到始 发路由的 ASBR 上,即 Router 认为到达目的网段的数据包应该发往自己,通过自己进行转发;
2)如果 FA!=0.0.0.0,那么针对到达所通告的目的网络的数据包,应该被转发到 FA 地址;即表示 Router 认为到达目的网段的数据包应该发往这个 FA 所标识的设备;
注意,FA 是针对 LSA-T5 和 LSA-T7 才存在的,即针对外部路由时才会出现该特征;

当 R2 向 OSPF Area 内通告到达 10.1.1.1/32 的外部路由时,为对应的 LSA-T5.FA==10.1.123.1(即为其自己到达该外部路由的下一跳);
当 R3 收到该 LSA 后,计算到达 10.1.1.1/32 的路由时,发现 FA!=0.0.0.0,所以它认为到达目标网络 10.1.1.1/32 的下一跳为 FA 所指定的地址(10.1.123.1);
FA 的取值
当以下条件全部满足时,FA 才可以被设置为非 0:
1)ASBR 在其连接外部网络的接口(外部路由的出接口)上激活 OSPF(示例 R2.GE0/0/1);
2)该接口没有被配置为 Silent-Interface;
3)该接口的 OSPF Network Type 为 Broadcast 或 NBMA;(鉴于该次优路径问题出现在 MA 网络,而 P2P 不会出现该问题)
4)该接口的 IP-ADDR 在 OSPF 配置的 network 命令指定的网段范围内(并进行通告)[……]

READ MORE

「OSPF」- 数据库超限:Database Overflow(限制非缺省外部路由数量)

问题描述
OSPF 要求同个区域中的路由器保存相同的LSDB。随着网络上路由数量不断增加,一些路由器由于系统资源有限,不能再承载如此多的路由信息,这种状态就被称为数据库超限(OSPF Database Overflow)。
对于路由信息不断增加导致路由器系统资源耗尽而失效的问题,虽然通过配置 Stub Area 或 NSSA 来解决,但 Stub 或 NSSA 的方案不能解决动态路由增长导致的数据库超限问题。
简而言之,当 OSPF 引入的外部路由(Type5 LSA和Type7 LSA)数量超过允许的范围,会导致超出的外部路由无法得到正常处理,丢失引入的路由。
解决方案
为了解决数据库超限引发的问题,通过设置 OSPF LSDB 的 External LSA 的最大条目数,可以动态限制链路数据库的规模,保证引入的外部路由在一个合理的范围内,调整和优化OSPF网络。
原理简述
在 OSPF Network 中,所有路由器都配置相同的上限值,只要路由器上外部路由的数量达到该上限,路由器就进入 Overflow 状态,并同时启动 Overflow 状态定时器(默认超时时间为5秒),路由器在定时器超过5秒后自动退出Overflow状态。

进入 Overflow 状态:
1)路由器删除所有自己产生的非缺省外部路由;
2)启动 Overflow 状态定时器;
处于 Overflow 状态:
1)不产生非缺省外部路由;丢弃新收到的非缺省外部路由,不回复确认报文;
2)当 Overflow 状态定时器超时,检查外部路由数量是否仍然超过上限:N,退出Overflow状态;Y:重启Overflow定时器;
退出 Overflow 状态:
1)删除 Overflow 状态定时器;
2)产生非缺省外部路由;接收新收到的非缺省外部路由,回复确认报文;
3)准备下一次进入 Overflow 状态;
特性特征
该技术主要针对非缺省外部路由(Type5 LSA和Type7 LSA);
配置案例
设置OSPF的LSDB中External LSA的最大条目数

[Huawei-ospf-1] lsdb-overflow-limit <number>
number:指定 LSDB 中 External LSA 的最大条目数。整数形式,1~1000000;[……]

READ MORE

「OSPF」- 智能定时器(Intelligent Timer)

解决方案
Intelligent Timer(智能定时器)是在 进行 SPF 计算 和 产生 LSA 信息 的时候用到的一种定时器。
所谓智能定时器,是能够根据时间调整倒计时时长的定时器,而非时长固定的定时器。当某个事件发生时,智能定时器将创建用于倒计时的时钟,并设置超时时间(首次超时时间是个固定的时间)。如果在定时器超时前,再有触发定时器的事件发生,则该定时器下次的超时时间会增加。
原理简述
控制 LSA 的发送接收
当网络发生变化时,OSPF 将产生 LSA 来通知邻居拓扑的变化。如果网络频繁变化,将不断的产生 LSA 信息,将占用大量设备资源与网络宽带;
针对网络连接或路由频繁动荡引起的过多占用设备资源,OSPF 通过如下两个规定来避免该情况:
1)发送:OSPF 协议规定 LSA 的更新时间间隔 5 秒(是为了防止网络连接或者路由频繁动荡引起的过多占用网络带宽和设备资源);
2)接收:OSPF 规定 LSA 接收的时间间隔为 1 秒(是为了防止网络连接或者路由频繁动荡引起的过多占用设备资源的情况);
针对在网络相对稳定、对路由收敛时间要求较高的组网环境中:
1)我们完全通过 Intelligent Timer 指定 LSA 的更新时间间隔为 0 来取消 LSA 的更新时间间隔,使得拓扑或者路由的变化可以立即通过 LSA 发布到网络中,或立即被感知到,从而加快网络中路由的收敛速度。
控制 SPF 的路由计算
当网络发生变化时,OSPF LSDB 会发生改变,需要重新计算最短路径。如果网络频繁变化,将不断的计算最短路径,会占用大量系统资源,影响设备的效率。
针对网络连接或路由频繁动荡引起的过多占用设备资源:
1)通过配置合理的 SPF 计算的间隔时间,可以避免占用过多的路由器内存和带宽资源。
注意事项:
1)如果触发路由计算的时间间隔较长,同样会影响网络的收敛速度。
特性特征
既能对少量的外界突发事件进行快速响应,又能避免过度的占用 CPU 资源。
配置方法
智能定时器首次超时时间是一个固定的时间。如果在定时器超时前,又有触发定时器的事件发生,则该定时器下一次的超时时间会增加。
lsa-originate-interval
设置 OSPF LSA 发送的时间间隔:

[Huawei-ospf-1] lsa-originate-interval { 0 | { intelligent-timer max-interval start-interval hold-interval | other-type interval } * }

0:指定 LSA 更新的[……]

READ MORE

「Groovy」- 找到调用该方法的类

问题描述
该笔记将记录:在 Groovy 中,如何找到方法的调用者,以及相关问题的处理方法。
解决方案
方法一、强行试探(不可行)
通过观察栈,找到方法所在的位置:

class Log {

public void printCaller() {
println Thread.currentThread().getStackTrace()[10].getMethodName()
}
}

class Func {
Log log = new Log()

public void doSomeStuff() {
log.printCaller()
}

public void doSomeStuff2() {
log.printCaller()
doSomeStuff()
}
}

// new Func().doSomeStuff()

new Func().doSomeStuff2()

方法二、投机取巧
既然我们使用 Groovy 脚本,那么栈中的 Groovy 脚本便能组成我们的调用栈:

class Log {

public void printCaller() {
def stack = Thread.currentThread().getStackTrace().findAll{it.getFileName() && it.getFileName().endsWith(“.groovy”)}
String methodName = stack[1].getMethodName()
String className = stack[1].getClassName()
println “${className}.${methodName}”
}
}

class Func {
Log log = new Log()

public void doSomeStuff() {
log.printCaller()
}

public void doSomeStuff2() {
log.printCaller()
doSomeStuff()
}
}

new Func().doSomeStuff()
println “—————”
new Func().doSomeStuff2()

在命令中,我们测试该方式是有效的,但是还没有在 Jenkins Pipeline 中试过。
参考文献
java – Get method name of my method’s caller – Stack Overflow[……]

READ MORE

「HOMELAB」- 家庭实验室架构 | Version 1.0 | 实现远程访问家庭网络

问题
# 04/08/2018 为了能从办公室访问家里的网络(我们没有出口路由的控制权),而且是任意访问(我们希望直接访问 80 端口,但是受限于网络环境,80 端口默认被运营商屏蔽);
注 1:该部分笔记是对以往笔记的梳理,目的是完善我们的笔记知库;
注 2:相关事件的详细时间已无从考究,我们只能从以往的购置订单中推测大致时间。例如 04/08/2018 是我们购置腾讯云服务器的时间;
分析
所以,我们通过部署 L2TP VPN 解决,我们实现远程访问家庭网络服务的方法;
混合云(Hybrid Cloud)与「MicroServer Gen10」的关系不大。实际上也不是真正的「混合云」,我们只不过是把各个机器上运行了「L2TP LAC」服务,然后各个机器连接到一台「云主机」上,夸网络组成了一个虚拟局域网,还是属于 VPN 的简单应用;
但是遇到不少的疑问和问题:
1)xl2tp – can not connect」- 在家用宽带里,多台主机无法同时连接「LNS」,但是换个宽带就没有问题;
2)xl2tpd – network thread select timeout」- 在 xl2tdp 的日志中,有一个 select timeout with max retries 错误提示;
3)Networking Solutions」- 混合云的网络解决方案;
方案
网络实现

1)通过云服务器部署 LNS 服务(xl2tpd),家里的路由器和笔记都作为 LAC 拨号到 LNS,形成二层网络;
2)通过配置静态路由,实现 Laptop 与 NAS 互通,我们便能通过内网地址直接访问家里的服务;
关于网络三层互通:通过配置静态路由,实现 Laptop 与 NAS 的通信;
存储服务
HPE ProLiant MicroServer Gen10
计算服务
该版本的 Homelab 环境中,还未引入虚拟化技术,所以也不存在相关的计算服务;[……]

READ MORE

「APACHE-GROOVY」- Formation and Governance

方案
Groovy Console | the Groovy Swing console
The Groovy Swing Console allows a user to enter and run Groovy scripts. This page documents the features of this user interface.
通过 Groovy Console 工具,我们能够直接测试脚本。[……]

READ MORE