HCIP【OSPF 详解】

server/2025/4/2 5:52:22/

目录

OSPF%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%AE%80%E4%BB%8B-toc" name="tableOfContents" style="margin-left:0px">1 OSPF 基础知识简介

IP%E5%AD%98%E5%9C%A8%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%89-toc" name="tableOfContents" style="margin-left:40px">1.1 技术背景(为了补充RIP存在的问题)

OSPF%E7%89%B9%E7%82%B9-toc" name="tableOfContents" style="margin-left:40px">1.2 OSPF特点

OSPF%E7%9A%84%E4%B8%89%E5%BC%A0%E8%A1%A8-toc" name="tableOfContents" style="margin-left:40px">1.3 OSPF的三张表

1.3.1 邻居表

1.3.2 路由表

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

OSPF%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85-toc" name="tableOfContents" style="margin-left:40px">1.4 OSPF的数据包

1.4.1 头部数据包内容

OSPF%E6%95%B0%E6%8D%AE%E6%8A%A5%E6%96%87-toc" name="tableOfContents" style="margin-left:80px">1.4.2 OSPF数据报文

(1)hello 报文

(2)DBD报文

(3)LSR报文

(4)LSU报文

(5)LSAck 报文

OSPF%E5%B7%A5%E4%BD%9C%E8%BF%87%E7%A8%8B-toc" name="tableOfContents" style="margin-left:80px">1.4.3 OSPF工作过程

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

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

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

OSPF8%E7%A7%8D%E7%8A%B6%E6%80%81%E6%9C%BA-toc" name="tableOfContents" style="margin-left:80px">1.4.4 OSPF8种状态机

 (1)down状态

(2)init状态

(3)Attempt状态

(4)2-way状态

(5)Exstar状态

(6)Exchange状态

(7)Loading状态

(8)Full状态


OSPF%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%AE%80%E4%BB%8B" name="1%20OSPF%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%AE%80%E4%BB%8B">1 OSPF 基础知识简介

IP%E5%AD%98%E5%9C%A8%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%89" name="1.1%20%E6%8A%80%E6%9C%AF%E8%83%8C%E6%99%AF%EF%BC%88%E4%B8%BA%E4%BA%86%E8%A1%A5%E5%85%85RIP%E5%AD%98%E5%9C%A8%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%89">1.1 技术背景(为了补充RIP存在的问题)

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

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

(3)路由收敛速度慢

(4)以跳数作为度量值

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

(6)每隔30S更新

OSPF%E7%89%B9%E7%82%B9" name="1.2%20OSPF%E7%89%B9%E7%82%B9" style="background-color:transparent">1.2 OSPF特点

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

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

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

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

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

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

OSPF%E7%9A%84%E4%B8%89%E5%BC%A0%E8%A1%A8" name="1.3%20OSPF%E7%9A%84%E4%B8%89%E5%BC%A0%E8%A1%A8">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算法提供网络的完整拓扑信息,用于计算最优路由。

OSPF%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85" name="1.4%20OSPF%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85">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):用于报文认证的内容。 

OSPF%E6%95%B0%E6%8D%AE%E6%8A%A5%E6%96%87" name="1.4.2%20OSPF%E6%95%B0%E6%8D%AE%E6%8A%A5%E6%96%87">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)

OSPF%E5%B7%A5%E4%BD%9C%E8%BF%87%E7%A8%8B" name="1.4.3%20OSPF%E5%B7%A5%E4%BD%9C%E8%BF%87%E7%A8%8B">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与路由表形成

OSPF8%E7%A7%8D%E7%8A%B6%E6%80%81%E6%9C%BA" name="1.4.4%20OSPF8%E7%A7%8D%E7%8A%B6%E6%80%81%E6%9C%BA">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状态

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

未完待续~~~

 


http://www.ppmy.cn/server/180608.html

相关文章

如何防御TCP洪泛攻击

TCP洪泛攻击(TCP Flood Attack)是一种常见的分布式拒绝服务(DDoS)攻击手段,以下是其原理、攻击方式和危害的详细介绍: 定义与原理 TCP洪泛攻击利用了TCP协议的三次握手过程。在正常的TCP连接建立过程中&a…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架实现PWCNet光流估计

如果你对MindSpore感兴趣,可以关注昇思MindSpore社区 1 环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型,管理全周期AI工作流,选择下面的云平台以开始使用昇思MindSpore,可以在昇思教程中进入ModelArts官网 创建…

Java进阶——位运算

位运算直接操作二进制位,在处理底层数据、加密算法、图像处理等领域具有高效性能和效率。本文将深入探讨Java中的位运算。 本文目录 一、位运算简介1. 与运算2. 或运算异或运算取反运算左移运算右移运算无符号右移运算 二、位运算的实际应用1. 权限管理2. 交换两个变…

图解G1垃圾回收器

概述 G1 垃圾回收器在 Java 7 update 4 后引入。它是分代、增量、并行与并发的标记 - 复制回收器,旨在适应内存扩大、处理器增多的情况,降低暂停时间,兼顾吞吐量。 与 CMS 相比,G1 有这些不同: 内存连续性&#xff1…

Python:爬虫概念与分类

网络请求: https://www.baidu.com url——统一资源定位符 请求过程: 客户端,指web浏览器向服务器发送请求 请求:请求网址(request url);请求方法(request methods);请求头(request header)&…

xtuner微调大模型教程

1.构建虚拟环境 conda create --name xtuner-env python3.10 -y conda activate xtuner-en 拉取 XTuner,过程大约需要几分钟 git clone https://github.com/InternLM/xtuner.git 然后安装依赖的软件,这步需要的时间比较长。可以百度pip的清华源进行…

基于yolo11的水稻病虫害智能分析系统

基于yolo11的水稻病虫害智能分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】基于YOLO模型的水稻病虫害检测与分析功能 【技术栈】 ①:系统环境:Windows/Linux/MacOS ②:开发环境&#xff1…

SpringBoot 配置⽂件

1.配置文件的格式 Sping Boot配置文件有以下三种 1)application.properties 2)application.yml 3)application.yaml yml和yaml是一样的,都是缩写 当一个文件中properties和yml都存在的时候,properties的优先级更高 2.properties prop…