OSPF基础(1)

news/2025/2/6 14:59:58 标签: 网络, 智能路由器, 服务器, 运维, 网络协议

 一、OSPF基础

1、技术背景(RIP中存在的问题)

RIP中存在最大跳数为15的限制,不能适应大规模组网

周期性发送全部路由信息,占用大量的带宽资源

以路由收敛速度慢

存在路由环路可能性

每隔30秒更新

2、OSPF协议特点

没有跳数限制,适合大规模组网

 使用组播更新变化的路由和网络信息

路由收敛快

以COST作为度量值

采用SPF算法有效避免环路

每隔30分钟更新

在互联网上大量使用,是运用最广泛的路由协议

注意:OSPF传递的是拓扑信息和路由信息,RIP传递的是路由表

3、OSPF三张表

邻居表:记录邻居状态和关系

拓扑表:链路状态数据库(LSDB)

路由表:记录由SPF算法计算的路由,存放在OSPF路由表中

4、OSPF数据包(可抓包)

OSPF报文直接封装在IP报文中,协议号89

头部数据包内容:

版本(Version):对于OSPFv2,该字段值恒为2(使用在IPV4中。对于OSPFv3,该字段值恒为3:使用在IPV6中)

类型(Type):该OSPF报文的类型。该字段的值与报文类型的对应关系是:1-Hello;2-DD;3-LSR;4-LSU;5-LSAck。

报文长度(Packet Length):整个OSPF 报文的长度(字节数)。

路由器ID (Router Identification):路由器的OSPF Router-ID。

区域ID (Area Identification):该报文所属的区域ID,这是一个32bit 的数值。

校验和(Checksum):用于校验报文有效性的字段。

认证类型(Authentication Type):指示该报文使用的认证类型。

认证数据(Authentication Data):用于报文认证的内容。

(1)hello:hello包携带自己的router ID、被发现的邻居标识,用来周期保活的,发现,建立邻居关系。

  • 网络掩码(Network Mask):一旦路由器的某个接口激活了OSPF,该接口即开始发送Hello报文,该字段填充的是该接口的网络掩码。两台OSPF 路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码,否则影响邻居关系建立。
  • Hello间隔(Hello Interval):接口周期性发送报文的时间间隔(单位为s)。两台直连路由器要建立OSPF邻居关系,需确保接口的Hello Interval相同,否则邻居关系无法正常建立。
  • 可选项(Options):该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF 特性。Options字段中的某些比特位会被检查,这有可能会直接影响到OSPF邻接关系的建立。(特殊区域的标记)。
  • 路由器优先级(Router Priority):路由器优先级,范围:0-255,默认是1,数字越大,代表路由优先级越高,也叫DR优先级,该字段用于DR、BDR 的选举。
  • 路由器失效时间(Router Dead Interval):在邻居路由器被视为无效前,需等待收到对方Hello报文的时间(单位为s)。两台直连路由器要建立OSPF 邻居关系,需确保双方直连接口的Router Dead Interval相同,否则邻居关系无法正常建立。缺省情况下,OSPF路由器接口的Router Dead Interval为该接口的Hello Interval的4倍。
  • 指定路由器(Designated Router):网络中DR的接口IP地址。如果该字段值为0.0.0.0,则表示没有DR,或者DR尚未选举出来。
  • 备份指定路由器(Backup Designated Router):网络中 BDR的接口IP地址。如果该字段值为0.0.0.0,则表示网络中没有BDR,或者BDR尚未选举出来。
  • 邻居(Neighbor)。在直连链路上发现的有效邻居,此处填充的是邻居的Router-iD,如果发现了多个邻居,则包含多个邻居字段。

(2)DBD(数据库描述报文):仅包含LSA摘要

接口最大传输单元(Interface Maximum Transmission Unit):接口的MTU。

可选项(Options):路由器支持的OSPF可选项。

DD报文置位符:

I:init位,I=1,这是第一个DD报文

M:more位,M=1表示后续还有DD报文

MS:master位,MS=1,表示本端为主

DD序列号( Sequence Number): DD报文的序列号,在报文交互的过程中,DD序列号被逐次加1,用于确保DD报文传输的有序和可靠性。值得注意的是,DD序列号必须是由Master路由器来决定的,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。(route id大的设备会成为master)

LSA头部( Header):当路由器使用DD报文来描述自己的LSDB时,的头部信息被包含在此处。一个DD报文可能包含一条或多条LSA的头部。

(3)LSR:请求自己没有的或则比自己更新的链路状态详细信息

链路状态类型,链路状态ID,通告路由器 ---- “LSA三元组” --- 通过着三个参数可以唯一的标识出一条LSA

(4)LSU:链路状态更新信息

一个LSU报文可以包含多个LSA

当路由器感知到网络发生变化时,也可以触发LSU报文的泛洪,以便将该变化通知给网络中的其他OSPF 路由器。

在MA网络中,非 DR、BDR路由器向224.0.0.6这个组播地址发送LSU报文,而DR及 BDR会侦听这个组播地址,DR在接收LSU报文后向224.0.0.5发送LSU报文,从而将更新信息泛洪到整个OSPF区域,所有的OSPF 路由器都会侦听224.0.0.5这个组播地址。

总结:

224.0.0.5所有运行OSPF的接口会监听

224.0.0.6所有DR\BDR的接口会监听

(5)LSAck:对LSU的确认

报文中包含着路由器所确认的LSA的头部(每个LSA头部的长度为20byte)

5、OSPF工作过程

邻居:双方通过hello报文,相互认识

邻接:邻居关系建立好后,进行一系列报文交互,当两台路由器LSDB同步完成,开始独立计算路由时,这两台路由器形成了邻接关系

(1)确认可达性,建立邻居

router ID :标明的是路由器身份

手工配置:IPV4地址格式

自动选举:

环回口:IP地址大的优先

物理口:IP地址大的优先

2-way前,确认DR/BDR

选举原因:广播网络中使路由信息交换更加高速有序,可以降低需要维护的邻接关系数量

选举范围:每个网段都需要选出一个DR和BDR(0-255)

选举规则:1.优先级大的优先,默认优先级是1;2.router-id大的优先

DR/BDR的选举没有抢占性

关系状态:DRother与DR建立邻接关系;

                  DRother与BDR建立邻接关系;

                  DR /BDR建立邻接关系;

                  DRother之间保持邻居关系

(2)摘要同步,开始建立邻接关系

1.向邻接路由器发送DBD报文,通告 地LSDB中所有LSA的摘要信息

2.收到DBD报文后,与本地LSDB对比,向对方发送LSR报文,请求发送本地所需要的LSA的完整信息

3.收到LSR后,把对方所需的LSA的完整信息打包为一条LSU报文,发送至对方

4.收到LSU后,向对方回复LSAck报文,进行确认

邻接建立过程:

(3)完整信息同步,完全邻接关系建立

完全邻接关系建立,LSDB表与路由表形成

6、OSPF的状态机

(1)down:关闭状态(稳定状态),这种情况处于手动指定邻居的情况下,发送hello包之后进入下一个状态

(2)INIT:初始化状态,收到对方的hello报文,但没有收到对方的hello确认报文

(3)Attempt:一般不会出现,只出现在NBMA网络中,发出hello,但收不到对方的hello包

(4)2-way(稳定状态):双方互相发现,邻居状态稳定,并确认了DR/BDR的角色;

当选举完毕后,就算出现一台优先级更高的路由器,也不会替换成新的DR\BDR;

需要原DR\BDR失效,或重置OSPF进程才会成为新的DR\BDR;

<R1>reset ospf process

2-way的前提:

  •       Router-id无冲突,修改router-id需要重置ospf进程使生效;
  •       掩码长度一致(MA网络中);
  •       区域ID一致;
  •       验证密码一致;
  •       hello-time一致;
  •       dead-time一致;
  •       特殊区域类型一致;

(5)Exstart:交换开始状态;发送第一个DD报文,但不发送LSA摘要,仅用于确定LSDB协商的主从,ROUTER-ID大的成为master

(6)Exchange:交换状态;发送后续DD报文,用于通告LSDB摘要

(7)Loading:读取状态,进行LSA的请求(LSR)、加入(LSU)和确认(LSACK)

(8)Full:邻接状态(稳定状态),两端同步LSDB;

              FULL的前提:两端MTU一致,否则可能卡在EXSTART\Exchange状态

              能够计算路由的前提:两端网络类型一致,否则邻居状态full,但无法学习路由

7、LSDB的更新(了解)

注:广播网络中的更新:只由DR发起

二、OSPF的区域划分

1、区域产生背景

  1. 路由器在同一个区域中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。
  • OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题。

2、分区好处

  • 减少LSA泛洪范围;
  • 提高网络扩展性,有利于组建大规模的网络

3、区域类型

骨干区域:area 0

非骨干区域:area 1

特殊区域:减少邻居关系

邻居关系过多缺点:

(1)大量产生hello包,消耗CPU性能

(2)产生重复路由通告,消耗CPU性能

(3)任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源

多区互连原则:

非骨干区域与非骨干区域不能直接相连

所有非骨干区域必须与骨干区域相连

此设计是为防止区域间环路

4、OSPF的路由器类型

区域内路由器(IR):所有接口在同一区域

骨干路由器(BR):所有接口都在骨干区域

区域边界路由器(ABR):连接骨干区域和非骨干区域

自治系统边界路由器(ASBR):连接外部自治系统并引入外部路由


http://www.niftyadmin.cn/n/5843100.html

相关文章

Spring 核心技术解析【纯干货版】- IX:Spring 数据访问模块 Spring-Jdbc 模块精讲

在现代企业级应用中&#xff0c;数据访问层的稳定性和高效性至关重要。为了简化和优化数据库操作&#xff0c;Spring Framework 提供了 Spring-JDBC 模块&#xff0c;旨在通过高度封装的 JDBC 操作&#xff0c;简化开发者的编码负担&#xff0c;减少冗余代码&#xff0c;同时提…

第四章-SUSE- Rancher-容器高可用与容灾测试-RKE2-数据库(Mysql主备倒换容灾)

系列文章目录 第一章-SUSE- Rancher-容器高可用与容灾测试-RKE2-外置数据库&#xff08;Mysql主备集群搭建&#xff09; 第二章-SUSE- Rancher-容器高可用与容灾测试-RKE2-集群搭建&#xff08;使用Mysql&#xff09;-CSDN博客 第三章-SUSE- Rancher-容器高可用与容灾测试-Ra…

React中为每个列表项显示多个DOM节点的解决方案

React中为每个列表项显示多个DOM节点的解决方案 问题背景&#xff1a;Fragment的简写形式的限制解决方案&#xff1a;使用显式的<Fragment>组件实现步骤 其他替代方案方法一&#xff1a;使用<div>包裹节点方法二&#xff1a;使用React.createElement创建Fragment 为…

WordPressAI自动生成发布文章免费插件,SEO,定时任务,生成长尾关键词、根据网站主题内容全自动化后台生成发布文章

一款可以自动发布文章的WordPress插件 wordpress 自动生成文章发布插件下载地址: 点击下载 插件基础功能免费无限制 1、插件后台可输入想要的文章主题或文章构成思路 2、ai自动生成并发布 3、可自定义发布后的文章状态和分类 4、可根据已有的长尾关键词生成文章 5、可对a…

【戒抖音系列】短视频戒除-1-对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面&#xff0c;尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨&#xff0c;慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…

oracle 基础语法复习记录

Oracle SQL基础 学习范围 学习SQL基础语法 掌握SELECT、INSERT、UPDATE、DELETE等基本操作。 熟悉WHERE、GROUP BY、ORDER BY、HAVING等子句。 理解表连接&#xff1a; 学习INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN等连接方式。 掌握聚合函数&#xff1a; 熟悉…

如何在页面中弹出菜单

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了Sliver综合示例相关的内容&#xff0c;本章回中将介绍PopupMenuButton组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧&#xff0c;…

Java进阶笔记(中级)

-----接Java进阶笔记&#xff08;初级&#xff09;----- 目录 集合多线程 集合 ArrayList 可以通过List来接收ArrayList对象&#xff08;因为ArrayList实现了List接口&#xff09; 方法&#xff1a;接口名 柄名 new 实现了接口的类(); PS: List list new ArrayList();遍历…