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.2.3 SPF计算过程相关推荐

  1. 动画版RNN、LSTM和GRU计算过程

    公众号关注 "视学算法" 设为"星标",第一时间知晓最新干货~ 编辑 | Python遇见机器学习 地址 | https://zhuanlan.zhihu.co ...

  2. python计算小数点后有几位_数学提高小数除法竖式计算过程

    除数是小数时:先把除数变成整数,除数扩大到原来的多少倍,被除数也要扩大到原来的多少倍(即小数点也向右移动几位,位数不够的用0补),然后按照除数是整数的除法进行计算.计算小数除法,除到被除数的末尾仍有余 ...

  3. 交叉熵损失(Cross Entropy Loss)计算过程

    交叉熵损失(Cross Entropy Loss)计算过程_藏知阁-CSDN博客_交叉熵计算公式

  4. 衡量计算机的平均无故障时间6,平均无故障时间MTBF测试及计算过程

    <平均无故障时间MTBF测试及计算过程>由会员分享,可在线阅读,更多相关<平均无故障时间MTBF测试及计算过程(4页珍藏版)>请在人人文库网上搜索. 1.一.寿命估算模型常温下 ...

  5. 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★

    文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...

  6. 【计算理论】图灵机 ( 非确定性图灵机 | 非确定性图灵机指令分析 | 计算过程 | 非确定性指令出现多个分支 | 非确定性图灵机转为计算树 | 计算树 )

    文章目录 一.非确定性图灵机 二.非确定性图灵机 指令 三.非确定性图灵机 计算示例 初始状态 四.计算步骤 1 五.计算步骤 2 六.计算步骤 3 ( 出现非确定性分支 ) 七.计算步骤 3-1 ( ...

  7. 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )

    文章目录 一.非确定性自动机 计算过程 ( 计算树 ) 二.判定 非确定性自动机 接受的字符串 三.自动机 设计要求 四.非确定性有限自动机设计 五.非确定性有限自动机 与 确定性 有限自动机 比较 ...

  8. 举例说明信息熵、互信息的计算过程

    举例说明信息熵.互信息的计算过程_tangxianyu的博客-CSDN博客_互信息计算

  9. linux主机load average的概念计算过程注意事项

    最近开发的一个模块需要根据机房各节点的负载情况(如网卡IO.load average等指标)做任务调度,刚开始对Linux机器load average这项指标不是很清楚,经过调研,终于搞清楚了其计算方 ...

  10. 栈在表达式计算过程中的应用

    栈在表达式计算过程中的应用 :建立操作数栈和运算符栈.运算符有优先级. 规则: 自左至右扫描表达式,凡是遇到操作数一律进操作数栈. 当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈.反 ...

最新文章

  1. R语言层次聚类:通过内平方和(Within Sum of Squares, WSS)选择最优的聚类K值、以内平方和(WSS)和K的关系并通过弯头法(elbow method)获得最优的聚类个数
  2. 云网融合 — 基于 SD-DCN 的云内网络融合
  3. hdu 6852Path6(最短路+最小割)
  4. java服务器发送邮件_服务器通过模板发送邮件java代码
  5. postman 测试excel下载_使用Postman轻松实现接口数据关联
  6. 微信小程序云开发教程-WXML入门-列表渲染
  7. IntelliJ IDEA使用技巧(三)——Debug 篇
  8. mysql 错误的字符串值_这次被坑惨了,MySQL的隐式转换导致了一个线上BUG
  9. WORD无法复制文件:无法读源文件或磁盘
  10. OEM、ODM、OBM分别是什么?
  11. 苹果itunes下载_苹果正在杀死iTunes,但不是在Windows上
  12. 华为鸿蒙2.0来了,挑战谷歌安卓APP成关键?
  13. R中两种常用并行方法——2. snowfall
  14. 解决:java.lang.IllegalStateExceptio:Underflow in restore - more restores than saves异常,Module闪退
  15. 【SSL1607】没有上司的晚会【树形DP】
  16. 如何将您的iPhone更新到最新的iOS版本
  17. mingw版本下qt与HTML,QT5.10开发(2) 在Windows 10下使用MinGW编译 静态Qt 5.10 release版 详细过程...
  18. 关于vs中出现lnk2019和lnk1120错误
  19. 地铁照明中的智能照明控制系统
  20. 物联网技术在智慧电网中的应用

热门文章

  1. linux的steam运行游戏,桌面应用|如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏...
  2. C / C++ function - rand
  3. 余承东说华为OS操作系统最快今秋面市,真的能承受之重吗??
  4. 手机传感器你知道多少个?
  5. android 实体 快捷键,as快捷键
  6. 摄影测量(tip1):空间前方交会与空间后方交会
  7. 七代处理器装win7_Intel7代处理器 win10重装win7后无法安装显卡声卡驱动的解决方案 | A小可私人狗窝...
  8. 宽带远程服务器无响应,宽带拨号上网服务器无响应是解决方法(图文)
  9. 微信小程序登录流程理解
  10. php中case的使用,php:switchcase语句的使用案例