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

OSPF协议详解1:从基础概念到区域划分与报文类型解析

在这里插入图片描述

本文详细介绍了开放式最短路径优先(OSPF)协议,一个用于自治系统内部的动态链路状态路由协议。文章首先对比了静态与动态路由协议、距离矢量与链路状态路由协议的特点,明确了OSPF的定位。接着,深入探讨了OSPF的区域概念,包括骨干区域与非骨干区域的结构、区域划分的优势、路由器角色(如ABR、ASBR)以及特殊区域类型(Stub、Totally Stub、NSSA等)。最后,文章详细解析了OSPF的五种报文类型:Hello、DBD、LSR、LSU和LSAck,逐一阐述了它们的用途、报文结构中的关键字段,并辅以Wireshark抓包示例,帮助读者全面理解OSPF协议的运作机制。

1. OSPF协议介绍

OSPF(Open Shortest Path First,开放式最短路径优先)协议是一个动态路由协议。它是开源、非厂商私有的,用于在一个自治系统(AS)内部,动态发现网络拓扑,计算最优路由,快速收敛。

1.1 静态 VS 动态路由协议

静态路由协议需要手动去配置路由。在网络发生变化的时候,需要手动更新静态路由。它配置简单,但是不够灵活,适合设备数量不多的小型网络。

动态路由协议可以自动计算出路由表。在有网络变动时,会自动更新路由表,整网的收敛速度快。它可以用于更复杂的大型网络。配置复杂,但提供了更好的拓展性,性能和适应性。

1.2 距离矢量 VS 链路状态

在这里插入图片描述

距离矢量型路由协议 基于距离度量来计算到目标的最优路径,譬如从邻居学到的到目标的跳数。

  • 设备只知道它直连的邻居以及到每个目标的距离度量。
  • 周期性更新,跟邻居周期性地交换整张路由表。
  • 使用 Bellman-Ford 算法,度量值比较简单,为跳数或是其他度量的加权(EIGRP)。
  • 收敛速度通常比链路状态型路由协议慢一些,适合不太复杂的网络。

链路状态路由协议 通过交换设备的链路及状态来计算出整网的拓扑。

  • 设备有整网的拓扑信息。
  • 设备间交换SLAs(Link-State Advertisements)来取得链路及其状态信息。每台设备的数据路都存有整网的链路及状态信息。
  • 使用 Dijkstra 算法,独立计算到每个目标的最短路径。
  • 收敛速度快,适合复杂的大型网络。

2. OSPF的区域

2.1 分区的基本特点

网络结构
OSPF要求网络分为两个层次的区域,区域0也叫做骨干区域和非0区域。非0区域必须和骨干区域相连,通常是物理相连,部分情况可以是逻辑接口相连。总得来说,OSPF是类似一种向日葵形状的网络结构。

区域标识
单个数字,譬如Area 0,Area 10。或是类似于IP地址的点分十进制,区域0为 0.0.0.0,其他区域为0.0.0.21。

分区的好处
LSA泛洪只在一个区域内进行。当网络发生变化时,SPF的重新计算被限制在本区域。此外,区域内路由器的路由表也会尽量小一些。

保持分区的规模
一个OSPF区域内推荐不超过50台路由器。对于边界路由器,推荐不超过连接超过3个区域。这样是平衡路由器的硬件资源和性能。对于现在的网络设备,CPU和内存基本不存在瓶颈。但是过大的区域会导致网络的不稳定,过于频繁的网络变化导致频繁的SPF计算。推荐阅读 ISR 4331 / Number of supported OSPF areas。

非连续区域
在特殊情况下,譬如地理的分割,导致非0区域无法可以直连骨干区域,而需要借道另一个非0区域来连接到骨干区域。
这时会在两个ABR R1和R2上建立跨Area 5的虚连接。
在这里插入图片描述

2.2 路由器的角色

在这里插入图片描述

  • 骨干区域路由器:譬如R1,它在Area 0内部。
  • 区域边界路由器 ASR:譬如R3和R4,他们一部分在Area 0里,一部分在其他其余区域里,是连接骨干区域和其他区域的桥梁。
  • 自治区域边界路由器 ASBR:譬如R2,它是可以是连接到Internet的路由器,确切地说它是连接OSPF进程和其他路由协议的连接点。譬如,OSPF和BGP,则在此处会有相互的路由重分发,用于和外部交换路由。
  • 路由器可以即是区域边界路由器,也是自治系统边界路由器。

2.3 特殊区域

为了节约路由表,有下列四种特殊区域。区别如下图,在介绍SLA的类型时会再讨论。

  • Stub Area 末节区域
  • Totally Stub Area 完全末节区域
  • NSSA 次末节区域
  • Totally 完全次末节区域

在这里插入图片描述

3. OSPF包类型

OSPF有如下5种类型的包。

在这里插入图片描述

3.1 OSPF包报头格式

  • Version版本:8比特长度,2为OSPFv2,3为OSPFv3。
  • Type类型:8比特长度,1-5,表示如上的5种类型。
  • Packet Length包长度:16比特长度,包括报头在内的OSPF包的长度,单位为字节。
  • Router ID路由器标识:32比特长度,发送此包的路由器的标识。
  • Area ID区域标识:32比特长度,发送此包的路由器所属的区域标识。
  • Checksum校验值:16比特长度,不包括认证字段在内的OSPF包的校验值。
  • Authentication Type认证类型:16比特长度,0为不认证,1为明文认证,2为密文认证。
  • Authentication认证信息:64比特长度,根据认证类型,包括的信息也不同。明文认证则为密码信息。密文认证包括加密密钥ID,MD5认证数据长度和序列号(用于防止重放攻击),消息摘要不包含在报头中。

在这里插入图片描述

3.2 Hello包

  • 用于建立和维持邻居关系。
  • 包括路由器标识,hello和dead间隔时间,多路访问网络的指定路由器DR和备份指定路由器BDR的地址,以及路由器的邻居列表。
  • 如果路由器没有dead间隔时间内没有收到邻居的hello包,则会认为邻居down了。
  • Network Mask网络掩码:指明发送这条Hello消息的接口的网络掩码。
  • Hello间隔在广播和P2P网络下默认是10秒,在NBMA网络下默认是30秒。而Dead间隔则通常为4倍的Hello间隔。
  • Router Priority路由器优先级:用于多路访问网络选举DR和BDR。默认值是1,取值区间为0-255,优先级最高的路由器成为DR。

在这里插入图片描述

WireShark抓包如下:

在这里插入图片描述

3.3 DBD包

DBD是Database Description Packet的缩写。

  • 用于总结链路状态数据库的内容,包括路由器SLA(链路状态通告)的描述及其报头。
  • 在两台路由器第一次交换链路状态信息的时候,双方会将各自数据库的内容描述给对方,双方根据现有数据库的内容来请求其缺失的或是需要更新的SLA。
  • Interface MTU:在不分片的情况下,接口可以发送DBD包的最大长度。
  • I & M标识:在多个连续的DBD包的情况下,如果是第一个DBD包,I设为1;如果是最后一个,M设为0。
  • M/S 主从标识:两台路由器在交换DBD包的时候,它们会协商成主从关系。如果设置为1,主路由器发送DBD包。
  • DBD Sequence Number:DBD包的序列号。主从使用需要序列号来确保传输的DBD包是正确的。
  • LSA Headers: 包含在DBD包里的SLA报头。

在这里插入图片描述

WireShark抓包如下:

在这里插入图片描述

3.4 LSR包

LSR是Link-State Request的缩写。

  • 用于从邻居处请求特定的LSA,包括请求的LSA的类型和ID。
  • 接收到DD包之后,路由器会确定缺失的或是过时的SLA,并从邻居处请求相应的SLA。
  • 一个包可以请求多条SLA。

在这里插入图片描述

WireShark抓包如下:

在这里插入图片描述

3.5 LSU包

LSU是Link-State Update的缩写。

  • 用于将SLA发送给邻居,包括一条或多条的SLA。
  • 它既可以是回应邻居的请求,也可以是将新的或是更新的LSA传播到网络中,确保所有的路由器都有最新和最准的网络拓扑。

在这里插入图片描述

WireShark抓包如下:

在这里插入图片描述

3.6 LSAck包

LSAck是Link-State Acknowledgement的缩写。

  • 用于确认从LSU包收到的SLA,防止不必要的重传。
  • 使用LSA的报头来进行确认。

在这里插入图片描述

WireShark抓包如下:

在这里插入图片描述
📚 延伸阅读

更多内容持续更新于我的博客:https://www.zenseek.site

http://www.dtcms.com/a/428380.html

相关文章:

  • 广州哪里做公司网站号一级造价工程师报考条件及科目
  • 数据结构算法学习:LeetCode热题100-普通数组篇(最大子数组和、合并区间、轮转数组、除自身以外数组的乘积、缺失的第一个正常数)
  • JAVA爬虫实战项目——OKX解析
  • 解除网站开发合同 首付款是否退长沙公司网站设计报价
  • DOM CSS:深入理解与高效运用
  • 闵行网站建设外包微信营销策略有哪些
  • 创建网站怎么赚钱的如何做一个好网站
  • Elasticsearch - Linux下使用Docker对Elasticsearch容器设置账号密码
  • 10. Spring AI + RAG
  • wordpress做自建站上海高品质网站建设公司
  • 网站开发如何找甲方网站后台维护费用
  • 智能化企业级CRM系统开发实战飞算JavaAI全流程体验
  • Matlab通过GUI实现点云的PCA配准(附最简版)
  • 10.17 上海 Google Meetup:从数据出发,解锁 AI 助力增长的新边界
  • 免费成品网站下载上海网站设计多少钱
  • 外管局网站上做预收登记制作公司网页图片
  • 【DockerFile+Nginx+DockerCompose】前后端分离式项目部署(docker容器化方式)
  • 快速傅里叶变换简介及python实现
  • 网站的实现怎么写重庆网站seo方法
  • 公司建设网站费用会计分录哈尔滨建筑工程招聘信息
  • 猫眼网站建设适合小县城开的加盟店
  • 网站开发 系统需求文档个性化定制网站
  • IDEA+SpringBoot实现远程DEBUG到本机
  • 网站建设与维护 目录开发公司前期手续流程
  • 物品奖励系统介绍
  • 广州站西手表公司彩页设计制作
  • sat4j中参数作用
  • 网站建设课程有哪些收获西安注册公司虚拟地址
  • 哪家做网站性价比高朋友圈自己做的网站
  • 建设网站需要掌握什么编程语言川菜餐馆网站建设模板美食餐厅企业建站php源码程序