1.2.3 SPF计算过程

SPF计算过程

 

概述

 

讲完了LSDB我们来看SPF计算过程。这个过程会比较复杂,大家可以去反复的练习,学习一下:

 

 

  • Phase 1:构建SPF树
  • 根据Router-LSA和Network-LSA中的拓普信息,构建SPF树干。

 

  • Phase 2:计算最优路由。
  • 基于SPF树干和Router-LSA、Network-LSA的路由信息,计算最优路由。

 

1、首先SPF算法我们要根据Router-LSA和Network-LSA中的拓扑信息来去构建一个SPT树干。也就是说现在我相当于要种一颗树,对于这棵树来说它的枝干是最重要的,我把枝干搭起来之后,我再在上面去长叶子。

 

什么是叶子呢?

 

对于OSPF来说,它的路由就是挂在树干上的叶子,也就是第二个步骤,计算一个最优的路由。

 

2、基于SPF树干和Router-LSA和Network-LSA中的路由信息,来去计算一个最优路由。

 

这是SPF算法的两个过程:

 

  • 首先计算拓扑信息,这个拓扑信息就类似于它的树干。
  • 第二个,有了树干我再把路由叶子挂在这个树干上,并且在计算完成之后我必须要保证这颗拓扑树是无环的拓扑树。

 

实例

 

我们来看一下具体是怎么去构建SPF树的:

 

 

在我们的网络中每一台路由器都有自己的拓扑树,每一台路由器都认为自身是树的根节点。

这里就以RTA为例,RTA的拓扑树就认为我是根的开始,那么RTA就会作为根节点。然后去查看我自己的LSDB,并且是我自己生成的1类LSA。然后我就会看到两个拓扑信息,最后一个是路由信息,我们先不看,先要构建树的话我们要看拓扑信息。

 

 

这里的两个拓扑信息,一个是广播多路访问网络,一个是点对点,我们先来看广播多路访问网络:

 

Link ID:

10.1.12.2,这个是我们DR的接口IP。

Data:

10.1.12.1。这个是我连接DR的接口IP地址。这个时候我就知道了,我有个DR的接口IP地址是10.1.12.1。

 

 

然后第二个是我们的点对点网络:

 

Link id:

3.3.3.3,这个很明显是一个拓扑信息,我有一个邻居它的Router-id是3.3.3.3。

data:

我连接这个邻居的接口IP地址是10.1.13.1,是我自己的接口IP地址,这是两个需要去注意的拓扑信息。

 

然后我们把它加入到候选列表中。这个时候我们就可以画出一个节点,这个节点是DR,DR的接口IP地址是10.1.12.1。

我们可以看到这个点对点的网络其实就结束了,它再往下展开也没有什么可以展开的了。但是这个广播多路访问网络或者是NBMA网络肯定是可以往下展开的,因为我们不知道他具体的拓扑信息。

 

我们这里只知道DR,那么DROther是谁呢,我们不知道,因此我们还需要去查看对应的2类LSA。

 

那么2类LSA由谁去生成呢?就是10.1.12.2去生成。

 

 

我们可以查看DR的LSDB【display ospf lsdb network 10.1.12.2】,去查看DR的接口IP地址生成的LSA。

 

 

在这里我们根据2类LSA,我们可以发现这个广播多路访问和非广播多路访问网络中,只有两台路由器:

 

  • 一条是RTB,2.2.2.2。
  • 另外一台是RTA,1.1.1.1。

 

那么我们就大概知道了这个拓扑信息。实际上它们两个是直连的。我们可以认为中间的黄色路由器是一个伪节点,即一个虚拟的节点,不需要去管它

此时RTA的拓扑信息我们都已经看完了,我们知道它有一个广播多路访问网络,或者是非广播多路访问网络。我们还知道它有一个点对点的邻居关系。

 

 

接着我们就要继续往下面去看,我们可以去看什么?

 

 

因为我们知道我有一个邻居是RTB,我们就可以【display ospf lsdb router 2.2.2.2】,这里就是去查看2.2.2.2这台路由器的router-LSA,即1类LSA。在这里我们可以看到有3条信息:

 

Link Type:

第一条信息是TransNet。

Link ID:

10.1.12.2。

Data:

10.1.12.2。

 

这里我们可以看到,我和DR相连的接口IP是相同的,证明2.2.2.2这个路由器就是DR

 

这个是一个小技巧的判断,如果Link ID和data是一致的,就说明我们这个路由器在本网络中就是一个DR的角色。

 

我们可以发现这个网段在之前是一个RTA和RTB的邻居关系,这个类型描述的就是RTA和RTB的邻居关系,我们已经看过了,不用再看了。

 

 

接着我们发现一个新的Link id和data都为10.1.235.2,可以看到link id和我的data完全一致:

Link id:

DR的接口IP地址。

Data:

我与DR相连的接口IP地址。

 

两个人完全一致说明RTB这个路由器是一个DR,但是只能判断自己是DR,具体这个DR连接哪一个BDR,连接哪一个DRother我也不清楚。

 

 

我们先知道这个信息。然后接着往后看:

 

Link id:

4.4.4.4。

Data:

10.1.24.2。

Link Type:

点对点。说明我有一个点对点的邻居关系。

Metric:

48。

 

那么我们把后面两个有用的信息再去加入到候选列表中:

 

在这里这个候选列表中,我们首先第一个节点是RTB这台DR,即10.1.235.2,这里我们要计算它的开销。

 

  • 这里从RTA到RTB的开销是1,再从RTB到MA网络的开销又是1,因此它的开销最后是等于2的。
  • 然后第二个,4.4.4.4也是一致的,我们从RTA到RTB,它的一个开销是1,此时RTB到另一个邻居的关系,即4.4.4.4也就是RTD。此时RTB到我的点对点邻居4.4.4.4的开销是48,总共为49.

 

我们可以看一下,假如我们还有一个路由器是48,此时RTB到达4.4.4.4的开销是48。再去换算的话就是累加的,RTA到达RTB的开销是1,RTB到4.4.4.4的开销是48,加起来就是49了。

 

这个是一个简单的带宽的叠加,我们可以注意一下。

 

 

接着往后看,在之前我们针对于RTB的查看中,我们可以发现RTB在另外的一个网段也是一个DR的角色。

这个网段是10.1.235.2的这个网段,现在我们就想看一下,具体10.1.235.2它的DR和BDR、DRother的邻居关系是什么样的呢?

 

 

一样的,我们【display ospf lsdb network 10.1.235.2】,在这里我们可以看到在这一个MA网段中我们可以看到有3个邻居,RTB、RTC和RTE这三个邻居关系。

因此我们可以把网络画出来,除了RTB在这个网络中还连接了两台路由器,RTC和RTE,即3.3.3.3和5.5.5.5。

 

此时再去计算RTA到RTC和RTE的Metric值,这个计算是很简单的:

 

RTA到达RTB的Metric值是1,然后RTB到达其他的RTC、RTE的Metric值也是1,那么两个叠加起来就等于2了,这个是非常简单的。

 

然后我们再去注意一下,在这个候选列表的过程中我们发现之前有一个点对点的邻居关系。我们可以回顾一下:

 

在最早最早开始的时候,我们去查看RTA上自己生成的1类LSA的时候,我们可以看到RTA和RTC有一个点对点的邻居关系Metric是48。

 

 

然后经过我们继续往下去遍历,去计算的时候,我们发现针对于这个RTC,我们还有另外的路径可以走,相当于有两条路:

 

  • 一种是通过P2P的路径去走。
  • 一种是通过MA网络的路走过去。

 

通过MA网络的路走到RTC,它的Metric值明显要小,只有2。而通过点对点的路径走过去,要48的开销,比较大。

 

因此我们把这个候选节点给它删掉,因为它并不是一个最优的路径

 

 

接着我们继续往后看,在RTB上面,其实我们已经把RTB所有的路由信息都看完了,接着就到了RTC,也就是3.3.3.3。

 

在RTC上我们继续来看一下:

 

  • 我们可以看到它有两个路由信息10.1.235.2,这个路由信息其实就是下面这一块,这块我们已经检查过了,不用再去检查。
  • 另外就是1.1.1.1,也就是RTC这个路由器,它和RTA之间还互连着。这个互连的邻居关系是点对点的。

 

其实这个链路类型的话,我们也在RTA的1类LSA中查看过了,也就是我们上面提到过的被删掉的候选路径。

 

 

接着我们来看RTE,最后一台路由器,为什么要看最后一台路由器呢?因为其实最开始的4.4.4.4我们已经有了相应的邻居关系,其实可以不用去查看了。

 

当然如果我们想去查看的话也可以查看一遍,当然去查看的话情况是和RTC一致的,我们会发现它里面的类型都已经在之前的遍历中已经描述过了,这是一个比较多余的动作,我们在这里因为时间关系省略了。

 

如果我们想去看一下RTD,即4.4.4.4的邻居的关系,包括网络的信息,也是可以的。

 

 

最后我们来看一下RTE,5.5.5.5这个路由器的1类LSA。

 

查看1类LSA:

 

  • 首先我们的TransNet网络我们已经看过了,就不用再看了。
  • 接着我们再来查看点对点网络,发现点对点网络有一个邻居关系是4.4.4.4。我们可以看到在图中可能是这样子,但是我们明显看到这已经是一个环路了。

 

我们之前就讲过了SPF树是一个无环的最短路径树,我们必须要保证它是没有环路的。

 

我们可以看一下,要保证没有环路是很简单的,我们选择从RTA到达4.4.4.4的最优路径就能保证无环了。

 

我们现在这里有两条路:

 

  • RTA->RTB->4.4.4.4。
  • RTA->RTB->5.5.5.5->4.4.4.4。

 

我们选择一个最优的路线走就可以了。通过这个图中很明显:

 

  • 从RTA到达4.4.4.4,经过RTA->RTB->4.4.4.4这条路线的话,它的Metric值是1+48,最后等于49。
  • 另外一条计算RTA->RTB->5.5.5.5->4.4.4.4,RTB到达多路访问网络,再通过5.5.5.5,再到4.4.4.4,这条路线的Metric的值明显是更大的。即1+1+48,很明显是等于50。

 

这里并不是一个最优的链路,因此我们就不去选它,最后我们把候选加入到总的列表的是,开销为49的路径。

 

 

 

 

计算最优路由

 

  • 从根节点开始一次添加各节点LSA中的路由信息。
  • 添加顺序为各节点加入SPF树的顺序。

 

 

最后我们从RTA出发,计算出了RTA自己的SPF树。然后根据这个SPF树,我们知道StubNet,我们把每一个StubNet都加入到树干上去,这个时候就相当于加入了不同的叶子。

 

然后我们再根据SPF树,去计算出到每一个叶子的Metric值,来进行一个累加和叠加,这个就是我们计算最优路径的一个过程。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值