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

HCIP【OSPF 详解】

目录

1 OSPF 基础知识简介

1.1 技术背景(为了补充RIP存在的问题)

1.2 OSPF特点

1.3 OSPF的三张表

1.3.1 邻居表

1.3.2 路由表

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

1.4 OSPF的数据包

1.4.1 头部数据包内容

1.4.2 OSPF数据报文

(1)hello 报文

(2)DBD报文

(3)LSR报文

(4)LSU报文

(5)LSAck 报文

1.4.3 OSPF工作过程

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

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

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

1.4.4 OSPF8种状态机

 (1)down状态

(2)init状态

(3)Attempt状态

(4)2-way状态

(5)Exstar状态

(6)Exchange状态

(7)Loading状态

(8)Full状态


1 OSPF 基础知识简介

1.1 技术背景(为了补充RIP存在的问题)

(1)RIP中存在最大跳数为15的限制,不适用于大规模组网

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

(3)路由收敛速度慢

(4)以跳数作为度量值

(5)存在路由环路的可能

(6)每隔30S更新

1.2 OSPF特点

OSPF传递的是拓扑信息和路由信息;RIP传递的时路由表

(1)没有跳数限制,适合大规模的组网

(2)使用组播(如224.0.0.5和224.0.0.6)更新变化的路由和网络信息,减少对网络带宽的占用

(3)路由收敛速度快,OSPF通过链路状态洪泛(LSA)快速传播网络变化信息,能够快速收敛,减少网络中的路由环路

(4)以COST作为度量值,COST可以根据链路带宽、延迟等参数进行配置,更精确地反映路径的实际成本

(5)默认每隔30分钟更新,确保网络信息的准确性

1.3 OSPF的三张表

1.3.1 邻居表

  • 作用:记录与相邻路由器的邻居关系及其状态。

  • 内容:包括邻居路由器的Router ID、接口地址、状态(如Down、Init、2-Way、Exchange、Loading、Full)等信息。

  • 意义:帮助路由器发现和维护与邻居的连接,是建立OSPF邻居关系的基础

1.3.2 路由表

  • 作用:记录SPF算法计算出的最优路由。

  • 内容:包括目的网络、下一跳地址、度量值(COST)等信息。

  • 意义:指导数据包的转发,确保数据能够沿着最优路径到达目的地。

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

  • 作用:存储整个OSPF网络的链路状态信息。

  • 内容:包括每个路由器的链路状态通告(LSA),如路由器LSA、网络LSA、ASBR Summary LSA等。

  • 意义:为SPF算法提供网络的完整拓扑信息,用于计算最优路由。

1.4 OSPF的数据包

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

1.4.1 头部数据包内容

版本(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.4.2 OSPF数据报文

(1)hello 报文

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

hello报文抓包详解

 网络掩码(Network Mask):一旦路由器的某一个接口激活了OSPF,那么这个接口就会开始发送hello报文;两台OSPF路由器如果是通过以太网接口直连的,就需要双方的直连接口配置相同的网络掩码,否则会影响邻居关系的建立

Hello 间隔(Hello Interval):接口周期性的发送Hello报文的时间间隔,两台直连路由器之阿金要确保接口的Hello 间隔时间相同,,否则会影响邻居关系的建立

可选项(Options):该字段有8bit,每一个比特位都用于指示该路由器的某个特定的OSPF功能特性,可用于特殊区域的标记

路由优先级(Router Priority):路由器优先级,范围:0-255;默认是1,数值越大代表优先级越高,可用于DR、BDR的选举

路由器失效时间(Router Dead Interval):在邻居路由器失效之前需要等待收到对方的Hello报文;直连路由器之间的路由失效时间(死亡时间)需要配置为相同,路由失效时间是Hello 间隔时间的4倍

指定路由器(Designated Router):网络中的DR的接口IP地址;如果该IP地址为0.0.0.0,则表示没有DR或者是DR没有选举出来

备份指定路由器(Backup Designated Router):网络中BDR的接口IP地址;如果该IP地址为0.0.0.0,则表示没有BDR或者是BDR没有选举出来

邻居(Neighbor):在直连链路上发现的有效邻居,此处填充的是邻居的Router-ID,如果发现了多个邻居则包含多个邻居字段

(2)DBD报文

数据库表述报文:仅包含LSA摘要

DBD抓包详解

 

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

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

DD报文置位符:(I)Init位,I=1,表示这是第一个DD报文

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

                           (MS)master位,MS=1,表示以本端路由器为主设备

DD序列号:(DD Sequence Number):DD报文的序列号,DD序列号被逐次加1,用于确保DD报文传输的有序性和可靠性;DD序列号必须有Master路由器来决定,Slave路由器只能使用Master发送的序列号来发送自己的DD报文,(Router-ID大的成为Master路由器)

DD报文交互的过程:

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

(3)LSR报文

请求自己没有的或者比自己更新的多的链路状态详细信息

LSR抓包详解

 

 LSA三元组:链路状态类型,链路状态ID,通告路由器

通过LSA三元组可以唯一的标识一条LSA

(4)LSU报文

链路状态更新信息

LSU抓包详解(一个LSU报文可以包含多个LSA报文)

 

(1)当路由器感知到网络的变化的时候,可以触发LSU报文的泛洪,以便将变化通知发送给网络中的其他OSPF路由器

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

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

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

(5)LSAck 报文

主要用于对LSU的确定

LSAck报文抓包详解

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

1.4.3 OSPF工作过程

通信双方的关系:

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

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

特性邻居关系(Neighbor)邻接关系(Adjacency)
建立条件只需Hello数据包匹配需要额外的LSA交换
信息交换仅交换Hello数据包交换完整的LSA信息
网络类型所有网络类型广播和非广播网络
数量多个邻居有限的邻接关系
状态变化Down → Init → 2-WayLoading → Exchange → Full
(1)确认可达性,建立邻居关系
 

建立邻居过程:

[1]发现邻居

  • Hello数据包:路由器定期发送Hello数据包(组播地址224.0.0.5),用于发现和维护邻居关系。

  • 接收Hello数据包:当路由器收到其他路由器发送的Hello数据包时,它会检查数据包中的参数,如Hello间隔、Dead间隔、网络类型等。

[2] 匹配参数

  • 参数检查:路由器检查收到的Hello数据包中的参数是否与自己的配置匹配。如果参数不匹配,邻居关系无法建立。

  • 匹配成功:如果参数匹配,路由器将对方的Router ID添加到自己的邻居列表中。

[3]建立双向通信

  • 状态变化:路由器发送Hello数据包后,如果收到对方的Hello数据包,并且发现自己的Router ID也在对方的Hello数据包中,邻居关系进入2-Way状态。

  • 双向确认:此时,双方路由器都知道彼此的存在,建立了双向通信。

[4]选举DR/BDR(仅适用于广播和非广播网络)

  • DR/BDR选举:在广播网络(如以太网)和非广播多访问网络(如帧中继)中,需要选举指定路由器(DR)和备份指定路由器(BDR);广播网络中使路由信息交换更加高速有序,可以降低需要维护的邻接关系数量;

  • 选举依据:每一个网段都需要选举出一个DR和BDR,选举依据包括优先级(Priority)和Router ID。优先级高的路由器更有可能被选为DR或BDR;如果优先级相同,则Router ID大的路由器获胜。

  • DR/BDR的选举没有抢占性;关系状态:DRother和DR建立邻接关系  ;DRother与BDR建立领接关系;DR与BDR建立邻接关系;DRother之间建立邻居关系  

[5] 维护邻居关系

  • 定期更新:路由器定期发送Hello数据包,以维护邻居关系。如果在Dead间隔内没有收到对方的Hello数据包,邻居关系将被标记为Down。

  • 动态调整:当网络拓扑发生变化时,路由器会重新计算路由,并更新LSDB。

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

 

[1] 发送DBD报文

  • DBD(Database Description):当邻接关系进入Exchange状态时,路由器会向邻接路由器发送DBD报文,通告本地LSDB中所有LSA的摘要信息。

  • 内容:DBD报文包含LSA的类型、LSA ID、广告路由器(Advertising Router)、序列号等信息。

  • 目的:通过DBD报文,路由器可以了解对方LSDB的内容,并判断哪些LSA是本地没有的或需要更新的。

[2]发送LSR报文

  • LSR(Link State Request):收到DBD报文后,路由器会将收到的LSA摘要信息与本地LSDB进行对比。如果发现本地LSDB中缺少某些LSA或LSA的序列号较旧,会向对方发送LSR报文。

  • 内容:LSR报文请求发送本地所需的LSA的完整信息。

  • 目的:通过LSR报文,路由器请求对方发送缺失或需要更新的LSA的完整信息。

[3]发送LSU报文

  • LSU(Link State Update):收到LSR报文后,路由器会将对方所需的LSA的完整信息打包为一条LSU报文,并发送给对方。

  • 内容:LSU报文包含完整的LSA信息,如LSA的类型、LSA ID、广告路由器、序列号、链路状态信息等。

  • 目的:通过LSU报文,路由器向对方发送缺失或需要更新的LSA的完整信息。

[4]发送LSAck报文

  • LSAck(Link State Acknowledgment):收到LSU报文后,路由器会向对方发送LSAck报文,确认已收到LSA的完整信息。

  • 内容:LSAck报文包含确认的LSA的序列号和LSA ID。

  • 目的:通过LSAck报文,路由器确认已收到LSA的完整信息,确保数据传输的可靠性。

[5]邻接关系进入Full状态

  • 状态变化:当LSDB同步完成后,邻接关系进入Full状态,表示邻接关系已完全建立。

  • 意义:此时,路由器的LSDB已与邻接路由器的LSDB完全一致,可以开始使用SPF算法计算最优路径。

 建邻过程:

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

此时邻接关系已经完全建立好了,LSDB与路由表形成

1.4.4 OSPF8种状态机

状态机流程图

 (1)down状态

关闭状态(处于稳定状态),邻居还没有收到Hello包,这种情况下发送Hello包之后便会进入下一个状态

(2)init状态

初始化状态,收到了对方的Hello报文,但是还没有收到对方的Hello确认报文,尚未建立双向通道

(3)Attempt状态

一般时不会出现的,只有在NBMA网络中,发出Hello报文但是收不到对方的Hello报文响应

(4)2-way状态

双方通信建立,邻居关系确认(稳定状态);并确定了DR\BDR的角色,在选举完成之后即使是出现了一台优先级更高的路由器,也是不会更替新的DR\BDR,需要原来的DR\BDR失效后,或者是重置OSPF进程才会重新选举新的DR\BDR

2-way的前提:

Router-ID无冲突,修改Router-ID需要重置OSPF进程;掩码长度一致(MA网络中);区域ID一致;验证密码一致;Hello时间、dead时间一致;特殊区域类型一致

(5)Exstar状态

开始交换数据库描述(DBD)数据包,确定主从关系;交换开始状态,发送第一个DBD报文,但是不发送LSA摘要,仅用于确定LSDB协商的主从,Router-ID大的为Master

(6)Exchange状态

交换状态,发送后续DBD报文,用于通告LSDB摘要,描述各自的链路状态数据库(LSDB)

(7)Loading状态

读取状态,进行LSA的请求(LSR)、加入(LSU)和确认(LSAck),即请求并接收所需的链路状态通告(LSA)

(8)Full状态

邻接状态(稳定状态),两段同步LSDB

Full状态的前提:两端的MTU一致,否则会卡在Exstar\Exchange状态

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

未完待续~~~

 

相关文章:

  • Spring的事务处理
  • Spring学习笔记07——SpringBoot常用注解记录
  • WEB安全--RCE--RCE的危险函数
  • Spring Boot 日志 配置 SLF4J 和 Logback
  • 在bootstrap下实现万年历
  • 分享一些新版GPT-4o使用方式!能多模态生图!
  • 【算法基础】递归与递推
  • DeepSeek学术写作过程中如何分析文献中的论证方法
  • Vue3 其它API customRef
  • 【STL】queue
  • Python 3 与 MySQL 数据库连接:mysql-connector 模块详解
  • 【王阳明代数讲义】识人用人之道与面相智慧
  • 【Java】Java核心知识点与相应面试技巧(八)——类与对象(三)
  • 无线局域网
  • Python数据可视化-第2章-使用matplotlib绘制简单图表
  • AI三大主义 和 深度学习三大主义
  • arthas之jvm相关命令
  • C++ utility头文件深度解析:从pair到移动语义的完全指南
  • 饿了么 bx-et 分析
  • 01_MySQL概述
  • 桂林旅游网站制作/seo需要懂代码吗
  • 汽配公司的网站要怎么做/企业网站优化技巧
  • wordpress博客类主题/手机优化大师
  • 2018年企业网站优化如何做/网站外链的优化方法
  • 建设项目环境影响评价公示网站/怎么自己弄一个平台
  • 做企业网站 需要用服务器吗/网站建设方案设计书