当前位置: 首页 > news >正文

学习笔记——动态路由——OSPF(工作原理)

九、OSPF协议的工作原理

1、原理概要

               

(1)相邻路由器之间周期性发送HELLO报文,以便建立和维护邻居关系

(2)建立邻居关系后,给邻居路由器发送数据库描述报文(DD),也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器

(3)收到数据库描述报文后,若发现自己缺少其中某些链路状态项目,则会发送链路状态请求报文(LSR)

(4)对方收到链路状态请求报文后,则会将其所缺少的链路状态项目的详细信息封装在链路状态更新报文(LSU)中发送回去

(5)收到链路状态更新报文后,将这些信息添加到自己的链路状态数据库中,随后发回链路状态确认报文(LSAck)

(1)HELLO协议

1)发现邻居并监测与邻居链路的状态

OSPF路由器定期向所有邻居路由器发送HELLO报文。报文中包含了最近一段时间内发送过HELLO报文的邻居路由器。

发送周期为10秒40秒未收到来自邻居路由器的HELLO报文,则认为该邻居路由器不可达

如果路由器在邻居发送的HELLO报文中发现了自己的标识符,就表明这两个邻居路由器之间建立了双向通信链路。每个路由器都会建立一张邻居表。

HELLO协议在不同类型网络上的工作过程不同:

点到点网络、虚拟链路:路由器向对方发送HELLO报文;

点到多点网络:路由器仅向能直接通信的邻居发送HELLO报文;

广播网络:每台路由器定期组播发送HELLO报文;

NBMA网络:需要配置后HELLO协议才能正常工作。

2)DR/BDR的选举

广播网络或NBMA网络上每台路由器都清楚网络的链路状态。若每台路由器都发送网络的链路状态,会有很多重复发送。

OSPF协议规定:

在广播网络或NBMA网络上选举一个指定路由器(DR)和一个备份指定路由器(BDR)。

只有DR能代表该网络发送网络的链路状态,DR发生故障后,BDR就变成DR。

当路由器连接到广播网络或NBMA网络上的接口启动时,(下左图)检查该网络上是否已存在DR和BDR:存在就接受;否则,比较自己和其他路由器的优先级:

- 优先级最高的路由器成为DR;优先级次高的路由器成为BDR。优先级:0-255,默认值是1

- 若两个路由器的优先级相同,标识符(ID)更大的胜出。

DR和BDR一旦选定,即使OSPF区域内新增优先级更高的路由器,DR和BDR也不重新选举。(下右图)

(2)链路状态数据库同步

OSPF邻接路由器之间的链路状态数据库同步大体上可分为三步:

1)双方交换各自的链路状态数据库摘要

2)向对方请求链路状态并更新自己的数据库

3)若有链路的状态发生变化,更新自己的数据库,并通知对方

1)交换摘要

OSPF路由器定期与邻接路由器交换链路状态数据库摘要:

数据库摘要用一组数据库描述报文描述;

每个数据库描述报文包含一组链路状态通告(LSA)的首部;

LSA首部有其唯一标识及新旧标记。

2)同步信息

发送和接收数据库描述报文的过程称为“数据库交换过程”,其中:

路由器发现邻接路由器某些链路的状态更新,或自己没有,就向对方发送链路状态请求报文;

邻接路由器发送链路状态更新报文进行响应。

两个邻接路由器的链路状态数据库达同步后,称它们之间建立了完全邻接关系(fully adjacent)。

3)新情况下的同步

路由器监测其所有链路,若有链路的状态发生改变:

更新自己的链路状态数据库;

向邻接路由器发送链路状态更新报文,通知变化的链路状态。

4)洪泛机制

OSPF协议定义了一种可靠的洪泛(reliable flooding)机制,用于在OSPF路由域中快速扩散链路状态的变化。

可靠是指收到链路状态更新报文后要发送确认,收到重复的更新报文无需再次转发,但要发送一次确认。

路由器接收到链路状态更新报文后,逐个检查其中的LSA。若LSA的状态更新,或本地不存在,就用LSA更新自己的数据库;同时,在某些接口上继续发送该LSA,称为“洪泛”

注意:路由器并不是直接发送接收的链路状态更新报文,而是发送根据自己的数据库生成的链路状态更新报文。

通过各路由器洪泛发送封装有自己LSA的LSU报文,各路由器的LSDB最终达到一致。

使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各种到达其他各路由器的最短路径,即构建各自的路由表。

2、链路状态算法的路由计算过程(OSPF路由计算步骤)

OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径

1)OSPF的收敛过程,由链路状态公告(LSA)泛洪开始,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息。

2)收到LSA的路由器,都可以根据LSA提供的信息建立自己的链路状态数据库(LSDB),并在LSDB的基础上使用SPF算法进行运算建立起到达每个网络的最短路径树

3)最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中

(下图)所示为OSPF的路由计算过程,大致可以分为4个步骤。

1、邻接关系建立

相邻的运行链路状态路由协议的路由器之间建立一个协议的邻居关系。只有邻接关系建立好后,然后彼此之间开始交互LSA(链路状态通告)。

与距离矢量路由协议不同,链路状态路由协议,通告的是链路状态而不是路由表

链路状态通告(LSA):每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告

2、同步链路状态数据库(LSDB)

邻接关系建立好后,每个OSPF路由器会把自己的LSA通告给自己的邻居,同时接收邻居通告给自己的LSA,也会把自己知道的其他路由器的LSA通告给邻居。路由器将接收到的LSA放入自己的LSDB。路由器通过对LSDB中所存储的LSA进行解析,进而了解全网拓扑。(下左图)

链路状态数据库(LSDB):所有LSA的集合

3、SPF路由计算

LSDB同步后,每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的"树"。有了这棵"树",路由器就已经知道了到达网络各个角落的优选路径。(上右图)

最短路径算法(SPF)算的是开销--每台路由器基于LSDB,使用SPF算法进行计算。

SPF是OSPF路由协议的一个核心算法用来在一个复杂的网络中做出路由优选的决策

4、路由表生成

最后,根据SPF树,每台路由器都能计算出各自的路由信息,将计算出来的优选路径,加载进自己的路由表(Routing Table)。

链路状态路由协议总结

企业网络是由众多的路由器、交换机等网络设备之间互相连接组成的,类似一张地图。由于众多不同型号的路由器、不同类型的链路及其连接关系,造成了路由计算的复杂性。(下图)   

链路状态路由协议有四个步骤∶OSPF路由协议的工作步骤

Step 1:建立邻居关系        路由器之间发现并建立邻居关系。

Step 2:同步链路状态数据库 每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB的同步。

Step 3:计算最优路由       每台路由器基于LSDB通过SPF算法,计算得到一棵以自己为根的SPT,再以SPT为基础计算去往各邻居连接网络的最优路由,并形成路由表。

Step 4:加载路由表   根据最短路径树生成路由表项加载到路由表。


整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun    暗号:CSDN】

相关文章:

  • 安全与加密常识(0)安全与加密概述
  • Ubuntu20.04 有线网络图标消失解决方案
  • 知识图谱的构建与应用
  • JS面试题5——JS继承有哪些方式
  • Android studio Logcat 功能介绍
  • springboot中使用springboot cache
  • iOS端授权页添加自定义按钮
  • android 是Application类先运行还是AndroidManifest.xml中action先运行?Application类先运行
  • 计算机公共课面试常见问题:线性代数篇
  • 计算机视觉 | 基于图像处理和边缘检测算法的黄豆计数实验
  • TS_开发一个项目
  • 【51单片机】串口通信(发送与接收)
  • uniapp中实现瀑布流 短视频页面展示
  • python3递归目录删除N天前的文件(带有日志记录)
  • RabbitMQ中java实现队列和交换机的声明
  • 深入了解以太坊
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java读取Properties文件的六种方法
  • js递归,无限分级树形折叠菜单
  • js数组之filter
  • mysql_config not found
  • Netty源码解析1-Buffer
  • 阿里云前端周刊 - 第 26 期
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 分享几个不错的工具
  • 缓存与缓冲
  • 浅谈web中前端模板引擎的使用
  • 手机端车牌号码键盘的vue组件
  • 我从编程教室毕业
  • 线上 python http server profile 实践
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • (1) caustics\
  • (3) cmake编译多个cpp文件
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (九)One-Wire总线-DS18B20
  • (蓝桥杯每日一题)love
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (转)Mysql的优化设置
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .apk 成为历史!
  • .gitignore文件—git忽略文件
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net framework4与其client profile版本的区别
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .netcore如何运行环境安装到Linux服务器
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET命令行(CLI)常用命令
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @RequestMapping处理请求异常
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择