OSPF 路由计算过程原理

OSPF 路由计算

OSPF 协议通过构建网络图、计算最短路径树(SPF)和更新路由表三个步骤来实现路由计算。

1. 网络图构建:

  • 路由器根据链路状态数据库(LSDB)中的链路状态通告(LSA)构建网络图。这个图包括所有网络中的 “点”(路由器、共享网段)和 “边”(链路)。

  • 网络图的构建主要使用 LSA 类型 1(Point-to-Point)、LSA 类型 2(TransNet)和 LSA 类型 4(Vlink)来描述网络拓扑。

  • 所有路由器的 LSDB 内容相同,因此构建的网络图也相同,但每台路由器都以自己为起点构建图。

2. 最短路径树(SPF)计算:

  • 路由器以自己为树根,使用 Dijkstra 算法对图进行 SPF 计算,构建一棵从树根到图中每个节点的最短成本路径树。
  • 这棵树确保从树根到任何其他节点的成本最小。

3. 路由表更新:

  • 在 SPF 树的节点上添加网络信息,并计算从树根到这些网络的成本及下一跳。

  • 树根到网络的路由成本计算为:树根到网络节点的距离 + 网络节点到叶子节点的成本。

  • 叶子节点可以是 LSA 类型 1 中的 StubNet、LSA 类型 2 中的网络、LSA 类型 3 的网络、LSA 类型 5/7 的网络。

  • 网络类型不同,叶子节点挂载的位置也不同:Stub 网络挂在路由器节点上,LSA2 中的网络挂在虚节点上,LSA3 的网络挂在 ABR 节点上,LSA7 挂在 ASBR 节点上,而 LSA5 可能挂在 ASBR 或 ABR 上。

OSPF 优化方法

为了提高效率和降低计算负荷,特别是在大型网络中,OSPF 采用了两种优化方法。

iSPF(增量 SPF 计算):

  • 目的:iSPF 的目标是优化网络中的 SPF 计算过程,通过仅处理网络拓扑的变化部分来提高效率。

  • 实现方式:iSPF 通过重新组织链路状态信息,形成一个直接反映网络拓扑的 “图”。在这个图中,最短路径树被保存,以便快速响应网络变化。

  • 优点:这种方法减少了不必要的全网络计算,从而提高了路由器的计算性能和降低了 CPU 负荷。

PRC(部分路由计算):

  • 目的:PRC 是在 iSPF 计算出的最短路径树基础上,进一步计算叶子节点代表的路由。

  • 实现方式:当路由信息发生变化时,PRC 直接识别出变化的位置,并仅对受影响的路由进行计算和更新,避免了对整个网络的全面重新计算。

  • 优点:PRC 确保了路由计算的精确性和及时性,同时减少了计算资源的消耗。

这两种方法的共同作用提高了网络的收敛速度,确保了 OSPF 在大型网络中的高效运行,同时保持了快速的收敛和低资源消耗。通过这种方式,OSPF 能够适应网络的动态变化,同时优化了网络的性能和稳定性。

via: huawei


OSPF 区域间路由计算规则与实验

格洛米爱学习于 2020-12-23 00:31:49 发布

OSPF 区域间路由的计算过程:

主要通过 3 类 LSA 进行计算,3 类 LSA 内容如下:
在这里插入图片描述
Network-Summary-LSA(三类 LSA)中主要包括以下内容:

Ls id:目的网段地址
 
Adv rtr:ABR 的 Router ID
 
Net mask:目的网段的网络掩码
 
Metric:ABR 到达目的网段的开销值

实验,如下图所示:

在这里插入图片描述

R4 在区域 1 中,R1 在区域 0 中,R2 作为 ABR。当 R4 收到了三类 LSA,查具体的内容:

在这里插入图片描述
当 R4 得到了 R2 发送的 3 类 LSA,可以看一下里面有什么:有与 R1 相连两个网段的网络号,掩码,MED 值。

由于三类 LSA 本来就是路由信息,可以作为叶子信息直接挂在 ABR(R2)上,具体的 cost 值等于 ABR 上三类 LSA 携带的 cost 值加上 R4 到 R2 使用一类和二类 LSA 计算的 COST 值。

同时,3 类 LSA 路由的最初下一跳为 ARB(R2),通过区域内路由计算如果到达 ARB,在 R4 上迭代出直连的下一跳。

所以在 OSPF 在区域中是链路状态计算,区域间其实更像距离矢量的路由协议。因此,区域间的路由可能会出现环路,所以三类 LSA 的计算是需要遵循一点的规则的,也被称为水平分割原理(四类 LSA 同样遵守)。

三类 LSA 的负载分担:

在这里插入图片描述
ABR R2 上会向 Area 0 产生 cost=11 的 LSA3。

ABR R3 上回向 Area 0 产生 cost=21 的 LSA3。

R1 收到后加上自己接口的 Cost,从 R3\R4 去往 100.1.1.0 开销都是 31,所以在 R1 看到是负载均衡的。

ABR 的水平分割原理:

ABR, Area Border Router,区域边界路由器,从定义上,至少有一个接口连接 Area0,这样的区域间路由器被称为 ABR。这样做也是未了防止环路,如下图:
在这里插入图片描述
为了避免上述环路,限定 LSA3 路由的流动规则:不允许非 ABR 产生 LSA3。所以,R3、R4、R5 是非 ABR,无法在区域间相互传递路由。Area3、Area4 无法学到其他区域 Area0、Area 1 的路由,只能把 Area3 和 Area4 直接连接到 Area0 才可以。基于这样的 LSA3 的设计,路由只能通过图中的 R2 和 R6 在区域间传递。

处于区域边界路由器可能有多种情形:

  1. 处于多个非骨干区域之间,比如处于 Area 1 和 Area 2 之间,比如下图中的 R5,并不是 ABR。

  2. 处于骨干区域和非骨干区域之间,但在骨干区域里没有邻居,比如 ABR 在 Area0 有接口,但没有邻居,如图中的 AR3,并不是真正的 ABR。

  3. 处于骨干区域和非骨干区域之间,且在骨干区域里有邻居,这才是真正意义上的 ABR,比如图中的 AR4。

  • 通过 ABR1 进入非骨干区域的 LSA3 路 由,若 ABR2 在骨干区域有邻居,则该 LSA3 路由不进入 ABR2 路由表;
     
  • 若 ABR2 在骨干区域没有邻居,仅有一个网络出现在骨干区域,则 ABR1 通告的 LSA3 路由会进入 ABR2 路由表;
     
  • 没有出现在 ABR 路由表的 LSA3 路由是不会通告到其它区域的。

在这里插入图片描述

ABR 的定义及作用(RFC3509):

定义:ABR 处于区域边界间,限制 LSA 泛洪的范围。
作用:为本区域通告描述其他区域的网络,执行区域间路由通告、过滤、聚合等。

水平分割的规则:

  1. ABR1 和 ABR2 是骨干区域 Area 0 和普通区域 Area 1 间的两台 ABR,通过 ABR1 进入普通区域的 LSA3 路由,若 ABR2 在 Area0 有 OSPF 邻居,则该 LSA3 路由不进入 ABR2 的路由表 (即不会通过 Area1 再通告进入 Area0,ABR2 有该路由也只能通过 Area0 的 LSA1 或 LSA2 学到)。

  2. 若 ABR2 在骨干区域 Area 0 没有邻居,仅有一个网络出现在骨干区域,则 ABR1 所通告的 LSA3 可以进入 ABR2 的路由表。(因为 ARB 不是真正意义上的 ABR)

  3. 没有出现在 ABR 路由表的路由是不会通告给其他区域的,这是边界的矢量特性。

上述规则是为了避免区域间的环路(经过一个 ABR 进入普通区域的三类 LSA 再经过其他 ABR 进入其他区域),这就是区域间的水平分割规则。上述规则适用于 LSA3,LSA4,但不适用 LSA5。

在上图中,按照水平分割的规则,进行路由是否接收的判断:

  1. AR1 的 10.1.2.0/24 路由是否出现在 AR3 里?

    会,根据规则 2,10.1.2.0/24 可以出现在 AR3 里,因为 AR2 算不上真正的 ABR。

  2. AR2 的 10.1.3.0/24 路由是否出现在 AR2 和 AR4 里?

    都不会,根据规则 1,AR4 在骨干区域 Area 0 里有邻居,只会接受骨干区域的 LSA3,不会收非骨干区域 AR5 发的经过非骨干区域访问骨干区域的 LSA3 10.1.3.0/24 路由。

    AR2 里也没有该路由,根据规则 3 的矢量特性,AR4 没有该路由,作为 ABR 是不会通告给其他区域的。

  3. R5 路由器表中能否有对有 10.1.2.0/24 的路由条目?

    AR5 不是真正的 ABR,因此能收到其他区域的路由,但不会向其他区域通告路由。


来源:

02f,18aug03,agi added #include 02e,02jun03,agi removed #include "rwproto.h" 02d,02jun03,agi changed #include "rwos.h" to include "ospf_rwos.h" 02c,29may03,agi removed unused includes, added new includes 02c,08may03,asr Changes to make OSPF virtual stack compatible 02b,09may03,agi added #include , removed #include 02a,17feb02,ram SPR 81808 Added OSPF memory partition support 21,13october01,kc Dynamic configuration changes. 20,21september01,kc Removed unused raw socket specific declarations. 19,26september00,reshma Added WindRiver CopyRight 18,25september00,reshma RFC-1587 implementation for OSPF NSSA Option, also tested against ANVL. 17,20july00,reshma Unix compatibility related changes. 16,06july00,reshma Removed unnecessary header files and defines. 15,23february00,reshma Changes for ospf mib 14,23december99,reshma Compatibility with VxWorks-IP and VxWorks RTM-interface 13,13august99,jack compilation fixes no IP case 12,05august99,nishit Replaced including IP header files by the new ospf_ip_structures.h 11,17may99,jack Added new include file ospf_patricia_32_bits_key_prototypes.h 10,28december98,jack Compiled and added some comments 09,25november98,rajive Deleted socket include file 08,11november98,jack Config changes, linted and big endian changes 07,30october98,jack Incorporate changes for compilation on Vxworks 06,12february98,release engineer code style changes, feature enhancements, complete CISCO and BAY compaltibility. OSPF v4.2.0 05,10july97,cindy Pre-release v1.52b 04,10february97,cindy Release Version 1.52 03,22october97,cindy Release Version 1.50 02,05june96,cindy Including visnpstr.h as a kludge for the first beta release. 01,05june96,cindy First Beta Release
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值