ospf协议(动态路由协议)

ospf基本概念

定义

OSPF 是典型的链路状态路由协议,是目前业内使用非常广泛的 IGP 协议之一。
目前针对 IPv4 协议使用的是 OSPF Version 2 RFC2328 );针对 IPv6 协议使用 OSPF Version 3 RFC2740 )。
运行 OSPF 路由器之间交互的是 LS Link State ,链路状态)信息,而不是直接交互路由。 LSA 信息是 OSPF 能够正常进行拓扑及路由计算的关键信息。
OSPF 路由器将网络中的 LSA 信息收集起来,存储在 LSDB 中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
每台 OSPF 路由器都采用 SPF 算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
OSPF 支持 VLSM Variable Length Subnet Mask ,可变长子网掩码),支持手工路由汇总。
多区域的设计使得 OSPF 能够支持更大规模的网络。

ospf基础术语-区域

OSPF Area 用于标识一个 OSPF的区域,使用十进制数或类似于IP地址方式,但是没有IP地址的意义。
区域是从逻辑上将设备划分为不同的组,每个组用区域号( Area ID )来标识。
两种区域类型
  • 骨干区域:区域0 存在并且唯一
  • 非骨干区域:非0区域
注意:
  • 区域的划分是基于接口的,不是基于路由器的,一个路由器可以属于不同的区域。
  • 非骨干区域必须与骨干区域相连接。

ospf基础术语-router-id

Router-ID Router Identifier ,路由器标识符),用于在一个 OSPF 域中唯一地标识一台路由器
Router-ID 的设定可以通过手工配置的方式,或使用系统自动配置的方式

Router-ID的选举规则:

  1. 手工配置最优;
  2. 选用路由器全局Router-ID:
    1.  最先配置的IP地址;
    2.  如果最先配置的IP地址被删除或修改,则优选最大的虚拟地址(loopback地址),再优选最大的物理地址
  3. ospf router-id不具备抢占特性,除非设备重启或重置ospf进程

ospf基础术语-度量值

OSPF使用Cost(开销)作为路由的度量值。 每一个激活了 OSPF 的接口都会维护一个接口 Cost 值,缺省时 接口 Cost = 100  Mbit / s除以 接口带宽。 其中100 Mbit/sOSPF 指定的缺省参考值,该值是可配置的
笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。

ospf路由器角色

区域内路由器(Internal Router-IR)-区域内路由器是 OSPF 自治系统中的基本路由器类型之一。它的所有接口都被分配到同一个 OSPF 区域内。通常情况下,这些路由器在网络拓扑中处于较低的层次,负责局部的路由选择和转发任务。

区域边界路由器(Area Border Router - ABR)-区域边界路由器连接了骨干区域和非骨干区域,因此它在 OSPF AS 中扮演着关键的角色。ABR 可以通过物理连接或逻辑连接连接到骨干区域。

骨干路由器(Backbone Router-BR)-骨干路由器在 OSPF AS 中扮演着核心的角色,负责连接整个自治系统并提供路由信息的交换。它至少一个接口必须连接到骨干区域,可以同时连接到其他区域。

自治系统边界路由器(Autonomous System Boundary Router - ASBR)-ASBR 负责将来自其他自治系统的路由信息引入本自治系统,并将本自治系统的路由信息传递到其他自治系统。它可能位于自治系统的边界,也可能位于自治系统内部。

链路状态路由协议的运算过程

链路状态路由协议有四个步骤
  • 第一步是建立相邻路由器之间的邻居关系。
  • 第二步是邻居之间交互链路状态信息和同步LSDB
  • 第三步是进行优选路径计算。
  • 第四步是根据最短路径树生成路由表项加载到路由表。

ospf中的三大表项

邻居表

对于OSPF的邻居表,需要了解:

  • OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
  • OSPF的邻居关系通过交互Hello报文建立。
  • OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。

链路状态数据库-LSDB

对于OSPF的LSDB表,需要了解:

  • LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1LSDB包含了三条LSA
  • Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
  • 使用命令行display ospf lsdb查看LSDB表。

ospf路由表

对于OSPF路由表,需要了解:

  • OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。
  • OSPF路由表包含DestinationCostNextHop等指导转发的信息。
  • 使用命令display ospf routing查看OSPF路由表。

ospf的网络类型

  • 在学习DRBDR的概念之前,需要首先了解OSPF的网络类型。

  • OSPF网络类型是一个非常重要的接口变量,这个变量将影响OSPF在接口上的操作,例如采用什么方式发送OSPF协议报文,以及是否需要选举DRBDR等。

  • 接口默认的OSPF网络类型取决于接口所使用的数据链路层封装。

  • 如图所示,OSPF的有四种网络类型,BroadcastNBMAP2MPP2P

一般情况下,链路两端的OSPF接口网络类型必须一致,否则双方无法建立邻居关系

OSPF网络类型可以在接口下通过命令手动修改以适应不同网络场景,例如可以将BMA网络类型修改为P2P

BMA(Broadcast Multiple Access,广播式多路访问)

  • BMA也被称为Broadcast,指的是一个允许多台设备接入的、支持广播的环境。
  • 典型的例子是Ethernet(以太网)。当接口采用Ethernet封装时,OSPF在该接口上采用的缺省网络类型为BMA

NBMA(Non-Broadcast Multiple Access,非广播式多路访问)

  • NBMA指的是一个允许多台网络设备接入且不支持广播的环境。
  • 典型的例子是帧中继(Frame-Relay)网络。

P2P(Point-to-Point,点对点)

  • P2P指的是在一段链路上只能连接两台网络设备的环境。
  • 典型的例子是PPP链路。当接口采用PPP封装时,OSPF在该接口上采用的缺省网络类型为P2P

P2MP(Point to Multi-Point,点到多点)

  • P2MP相当于将多条P2P链路的一端进行捆绑得到的网络。
  • 没有一种链路层协议会被缺省的认为是P2MP网络类型。该类型必须由其他网络类型手动更改。
  • 常用做法是将非全连通的NBMA改为点到多点的网络。

DR和BDR

MAMulti-Access)多路访问网络有两种类型:广播型多路访问网络(BMA)非广播型多路访问网络(NBMA)。以太网(Ethernet)是一种典型的广播型多路访问网络。

MA网络中,如果每台OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF报文数量

当拓扑出现变更,网络中的LSA泛洪可能会造成带宽的浪费和设备资源的损耗

为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,DRDesignated Router,指定路由器)、BDRBackup Designated Router,备用指定路由器)和DRother路由器。

只允许DR、BDR与其他OSPF路由器建立邻接关系。DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。

BDR会监控DR的状态,并在当前DR发生故障时接替其角色。

DR和BDR的选举规则:

  • OSPF DR优先级值大的接口成为该MADR,第二大的成为BDR。
  • 如果优先级值相等(默认为1),则具有更大的OSPF Router-ID的路由器(的接口)被选举成DR,第二大的成为BDR,并且DR具有非抢占性。

注意:

  1. 只有在广播和NBMA 的链路上才会选举DR和BDR,在P2P 和P2MP 的链路上不会选举DR和BDR。
  2. DR 是针对一个网段内的设备选举的,对于一台路由器来说,可能它在某个接口上是DR,在其它接口上是BDR、DROther,或者因为是P2P 的链路而不参加DR 的选举。
  3. 在广播的网络上必须存在DR 才能够正常工作,但BDR 不是必需的。
  4. 一个网段中即使只有一台路由器,也要选举DR。
  5. 由于“终身制”的原因,网段中的DR 不一定是priority 最高的,但通常是“来的早”的路由器。

ospf协议的报文类型

OSPF使用5种不同的报文类型。每种类型用于支持不同的,专门的网络功能:

  • Hello报文:发现和维护邻居关系。
  • DD报文(数据库描述):交互链路状态数据库摘要。
  • LSR(链路状态请求):请求特定的链路状态信息。
  • LSU(链路状态更新):发送详细的链路状态信息。
  • LSACK(链路状态确认):对链路状态信息进行确认。

ospf的状态机

(1)邻居建立状态变化过程

1、Down状态:这是邻居的初始状态,表示没有从邻居收到任何信息。

启用了OSPF功能的链路默认成为down状态,并开始向外发送Hello报文(基于网络类型的不同发送方式也会不同,广播类型Hello为组播发送)。

注意:OSPF的每条链路都会经历状态机,每条OSPF链路的状态机互不影响。

启用OSPF的链路从Down状态开始,向外发送Hello报文。

2、Init状态:在此状态下,路由器已经从邻居收到了Hello报文。

在Init状态下的链路,如果接收到传来的Hello包中含有自己的router-id,则表示对端已经发现了自己,此时链路就能成为2-way状态了。

3、Attempt状态(NBMA)

该状态仅发生在NBMA网络中,表明该链路在发送Hello报文之后,到达了失效时间(dead interval)仍然没有收到对端回复Hello报文。如果Router Dead Interval间隔内未收到邻居的Hello报文,则转为Down状态。

处于该状态下的链路仍然会向对端发送Hello报文。

4、2-way状态:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。

(2)邻接建立状态变化过程

5、ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文,主从关系是在此状态下形成的。初始DD序列号是在此状态下决定的,在此状态下发送的DD报文不包含链路状态描述。

6、Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。

7、Loading:相互发送LSRequest报文请求LSA,发送LSUpdate通告LSA。

8、Full:两台路由器的LSDB已经同步。

OSPF的3种稳定状态:

什么是稳定的状态?即链路状态会长时间所处的状态机。

在OSPF状态机中,有三个稳定的状态机状态:Down、2-way、Full

  • Down:启用OSPF功能的链路默认所处状态机或者邻居失效后的状态。
  • 2-way:在交互了Hello报文建立邻居之后所处的状态,DR-Other与DR-Other之间所处的状态。
  • Full:在邻接建立成功之后的状态,也是OSPF的最终状态。

ospf邻接关系建立过程

OSPF完成邻接关系的建立有四个步骤,即建立邻居关系、协商主/从、交互LSDB信息,同步LSDB

建立邻居关系

当一台 OSPF 路由器收到其他路由器发来的首个 Hello 报文时会从初始 Down 状态切换为 Init 状态。
OSPF 路由器收到的 Hello 报文中的邻居字段包含自己的 Router ID 时,从 Init 切换 2-way 状态。

协商主/从、交互LSDB信息

邻居状态机从 2-way 转为 Exstart 状态后开始主从关系选举:
R1 R2 发送的第一个 DD 报文内容为空,其 Seq 序列号假设为 X
R2 也向 R1 发出第一个 DD 报文,其 Seq 序列号假设为 Y
选举主从关系的规则是比较Router ID,越大越优 R2 Router ID R1 大, 因此 R2 成为真正的主设备。主从关系比较结束后, R1 状态从 Exstart 转变为 Exchange
R1 邻居状态变为 Exchange 后, R1 发送一个新的 DD 报文,包含自己 LSDB 的描述信息,其序列号采用主设备 R2 的序列号。 R2 收到后邻居状态从 Exstart 转变为 Exchange
R2 R1 发送一个新的 DD 报文,包含自己 LSDB 的描述信息,序列号为 Y+1
R1 作为从路由器需要对主路由 R2 发送的每个 DD 报文进行确认,回复报文的序列号与主路由 R2 一致。
发送完最后一个 DD 报文后, R1 将邻居状态切换为 Loading

同步LSDB

邻居状态转变为 Loading 后, R1 R2 发送 LSR 报文,请求那些在 Exchange 状态下通过 DD 报文发现的,但是在本地 LSDB 中没有的 LSA
R2 收到后向 R1 回复 LSU 。在 LSU 报文中包含被请求的 LSA 的详细信息。
R1 收到 LSU 报文后,向 R2 回复 LS ACK 报文,确认已接收到,确保信息传输的可靠性。
此过程中 R2 也会向 R1 发送 LSA 请求。当两端 LSDB 完全一致时,邻居状态变为 Full ,表示成功建立邻接关系。

虚链路

为了避免区域间的环路,OSPF规定不允许直接在两个非骨干区域之间发布路由信息只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。因此,每个非骨干区域都必须连接到骨干区域,同时骨干区域也必须连续
        但由于网络设计、升级、合并、改造等因素,从而造成不规范区域架构,最终导致路由学习不完整,解决方法就是使用虚链路

ospf支持一种名叫虚链路(virtual link)的特性,当非骨干区域与骨干区域之间没法建立物理连接的情况下,可利用该特性来建立逻辑连接,虚链路的用途如下:

  • 当非骨干区域与骨干区域之间无法通过物理链路直连时,可让两者之间通过这种逻辑链路互连。
  • 可用来防止骨干区域的“分裂”,或可用来把发生“分裂”的骨干区域合并。

虚链路使用场景:

场景一:

在上图中,区域2只能与区域1直连,而无法与骨干区域直连,在这种情况下,由于area 2没有与骨干区域直连,最终导致area 2无法学习到其他区域的路由信息,在这种情况下,需要通过OSPF虚链路将骨干区域的范围扩展到相邻的区域1,如下图:

在进行OSPF虚链路扩展后,区域1被虚拟成了骨干区域,而这时的R3等同于连接骨干区域和区域2的ABR(因为有一个virtual接口在区域0,因此变成了ABR),所以可以将自己所有的LSA发进区域2。在扩展OSPF虚链路时,是通过连接R2(ABR)与R3(ABR)的Router-ID 来建立的。

场景二:

因为OSPF虚链路(Virtual Link)能将骨干区域扩展到相邻的常规区域,从而将常规区域虚拟为骨干区域,所以在某些情况下,如公司合并,或者为了备份骨干区域,可能出现骨干区域被常规区域所隔离,如下图:

图中骨干区域被区域1分割为两部分,将使得骨干区域自己的路由无法相互传递,在使用OSPF虚链路后,可以将区域1也扩展为骨干区域,如下图:

在经过OSPF虚链路将区域1也扩展为骨干区域后,可见所有的区域都变成了骨干区域,从而使网络中骨干区域能够收到另外一边被分割的骨干区域的路由,并且最后骨干区域自己的路由都为Intra-Area Route。

参考:OSPF虚链路技术原理与注意点-CSDN博客

ospf各类LSA介绍

OSPF LSA 链路状态通告( Link status announcement),作用于向其它邻接OSPF路由器传递拓扑信息路由信息

OSPF路由器通过不同类型的LSA组建成LSDB数据库(链路状态数据库)再通过SPF算法计算出最优的OSPF路由加入到路由表中。

常见的LSA有:

  • 1类 Router-LSA:描述设备的直连拓扑信息、路由信息,该LSA只能在接口所属的区域内泛洪。
  • 2类 Network-LSA:网络LSA,该2类LSA只会在广播类型网络中出现,由DR产生,描述DR所在的MA网络中所有与之形成邻接关系的路由器,以及DR自己。
  • 3类 Summary-Network-LSA:网络汇总LSA,由ABR设备产生,描述区域内的路由信息。因为1类、2类LSA只能在区域内传递。故其它区域需要学习到另一个区域的1类2类就需要有新的LSA来统一描述1类2类的拓扑、路由信息。这个LSA就是3类LSA。
  • 4类 ASBR-summary-LSA:ASBR汇总LSA,由ABR产生,描述到ASBR的路由,服务于5类LSA。通告给除ASBR所在区域的其它区域。
  • 5类 AS-external-LSA:AS外部LSA,由ASBR产生,描述到OSPF域外的路由。OSPF引入的路由,如引入RIP、ISIS、BGP等路由,引入的路由就属于外部路。外部路由用5类LSA进行通告。
  • 7类 NSSA-LSA:用于特殊区域 NSSA 中的LSA。由ASBR产生,用于描述到达OSPF域外的路由。NSSA7类与5类功能一样,但泛洪范围不同。

各类LSA详解请参考:路由 OSPF LSA介绍、1~7类LSA详细介绍_ospf lsa类型详解-CSDN博客

ospf特殊区域

特殊区域类型:

  • Stub Area 末梢区域
  • Totally  Stub Area  完全末梢区域
  • NSSA(Not So Stub  Area)
  • Totally  NSSA 完全NSSA

各区域详情请参考:OSPF 特殊区域介绍、Stub、Totally Stub、NSSA、Totally NSSA-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/927933.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【热门主题】000072 分布式数据库:开启数据管理新纪元

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

Python 3 教程第33篇(MySQL - mysql-connector 驱动)

Python MySQL - mysql-connector 驱动 MySQL 是最流行的关系型数据库管理系统,如果你不熟悉 MySQL,可以阅读我们的 MySQL 教程。 本章节我们为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql-connector 是 MySQL 官方提供的驱动器。…

ENSP IPV6-over-IPV4

IPv6是网络层协议的第二代标准协议,一个IPv6地址同样可以分为网络前缀和主机ID两个部分。 可以将IPV4的网络看成IPV6的承载网,只有IPv4网络是连通的,则IPv6网络才有可能连通。所以配置的时候需要先配置IPv4网络的路由功能,再配IP…

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿,数据挖掘的小伙伴们!今天我要给你们介绍一本超级实用的书——《数据挖掘:概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作,由该领域的知名专家编写,系统性地介绍了在高维数据空间中分析和提取大量…

53 基于单片机的8路抢答器加记分

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 首先有三个按键 分别为开始 暂停 复位,然后八个选手按键,开机显示四条杠,然后按一号选手按键,数码管显示30,这…

从零开始写游戏之斗地主-网络通信

在确定了数据结构后,原本是打算直接开始写斗地主的游戏运行逻辑的。但是突然想到我本地写出来之后,也测试不了啊,所以还是先写通信模块了。 基本框架 在Java语言中搞网络通信,那么就得请出Netty这个老演员了。 主要分为两个端&…

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计) 逻辑回归(Logistic Regression,LR)逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…

数据类型.

数据类型分类 数值类型 tinyint类型 以tinyint为例所有数值类型默认都是有符号的,无符号的需要在后面加unsignedtinyint的范围在-128~127之间无符号的范围在0~255之间(类比char) create database test_db; use test_db;建表时一定要跟着写上属性 mysql> creat…

IDEA使用HotSwapHelper进行热部署

目录 前言JDK1.8特殊准备DECVM安装插件安装与配置参考文档相关下载 前言 碰到了一个项目,用jrebel启动项目时一直报错,不用jrebel时又没问题,找不到原因,又不想放弃热部署功能 因此思考能否通过其他方式进行热部署,找…

机器学习算法(六)---逻辑回归

常见的十大机器学习算法: 机器学习算法(一)—决策树 机器学习算法(二)—支持向量机SVM 机器学习算法(三)—K近邻 机器学习算法(四)—集成算法 机器学习算法(五…

【Electron学习笔记(四)】进程通信(IPC)

进程通信(IPC) 进程通信(IPC)前言正文1、渲染进程→主进程(单向)2、渲染进程⇌主进程(双向)3、主进程→渲染进程 进程通信(IPC) 前言 在Electron框架中&…

GateWay使用手册

好的&#xff0c;下面是优化后的版本。为了提高可读性和规范性&#xff0c;我对内容进行了结构化、简化了部分代码&#xff0c;同时增加了注释说明&#xff0c;便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependencies><!-- Spring Cloud Gate…

【Go 基础】channel

Go 基础 channel 什么是channel&#xff0c;为什么它可以做到线程安全 Go 的设计思想就是&#xff1a;不要通过共享内存来通信&#xff0c;而是通过通信来共享内存。 前者就是传统的加锁&#xff0c;后者就是 channel。也即&#xff0c;channel 的主要目的就是在多任务间传递…

C# 解决【托管调试助手 “ContextSwitchDeadlock“:……】问题

文章目录 一、遇到问题二、解决办法 一、遇到问题 托管调试助手 “ContextSwitchDeadlock”:“CLR 无法从 COM 上下文 0x56e81e70 转换为 COM 上下文 0x56e81d48&#xff0c;这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows …

Spring AI 框架介绍

Spring AI是一个面向人工智能工程的应用框架。它的目标是将Spring生态系统的设计原则&#xff08;如可移植性和模块化设计&#xff09;应用于AI领域&#xff0c;并推广使用pojo作为AI领域应用的构建模块。 概述 Spring AI 现在(2024/12)已经支持语言&#xff0c;图像&#xf…

使用Grafana K6来测测你的系统负载能力

背景 近期我们有个号称会有很高很高并发的系统要上线&#xff0c;为了测试一下自己开发的系统的负载能力&#xff0c;准备了点海克斯科技&#xff0c;来看看抗不抗的住。 之前笔者写过用Apache JMeter进行压力测试的文章&#xff08;传送门&#x1f449;&#xff1a;https://…

32 从前序与中序遍历序列构造二叉树

32 从前序与中序遍历序列构造二叉树 32.1 从前序与中序遍历序列构造二叉树解决方案 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildTreeHelper(preorder, inorder, 0, 0, inorder.size() - 1)…

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…

Flutter如何适配RTL

阿拉伯语和希伯来语等是使用的从右到左书写的文字系统。世界上估计有4.22亿人以阿拉伯语做为母语。使用从右至左的人口可以说是更多了。所以对于出海项目来说&#xff0c;是不能忽视的一部分。 RTL可以说是本地化适配中比较麻烦的一项&#xff0c;并没有多语言适配来的简单。RT…

【Django-xadmin】

时间长不用,会忘的系列 1、Django-xadmin后台字段显示处理 主要是修改每个模块下adminx.py文件 代码解释&#xff1a;第1行控制表单字段显示第2行控制列表字段显示第3行控制搜索条件第4行控制过滤条件第5行支持单个或多个字段信息修改第6行列表分页&#xff0c;每页显示多少行…