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

五种报文 HELLO报文(类型1 ):用来建立和维护邻接关系,选举DR以及BDR 数据库描述报文(类型2 ):也就是DD 报文,用来描述自己的LSDB,还有空的DD报文,用来确定MSTER和SLAVE关系 链路-状态请求报文(类型3 ):也就是LSR报文,用来向对方请求所需的LSA。内容包括所需要的LSA 链路-状态更新报文(类型4 ):也就是LSU报文,用来向对端路由发送所需要的LSA,内容是多格LSA集合 链路-状态应答报文(类型5 );LSACK报文,用来对接收到的LSU报文进行确认 OSPF有七种类型LSA,详细介绍如下: 1、路由器LSA (Router LSA) 由区域内所有路由器产生,并且只能在本个区域内泛洪广播。 这些最基本的LSA通告列出了路由器所有的链路和接口,并指明了它们的状态和沿每条链路方向出站的代价。 2、网络LSA (Network LSA) 由区域内的DR或BDR路由器产生,报文包括DR和BDR连接的路由器的链路信息。 网络LSA也仅仅在产生这条网络LSA的区域内部进行泛洪。 3、网络汇总LSA (Network summary LSA) 由ABR产生,可以通知本区域内的路由器通往区域外的路由信息。 在一个区域外部但是仍然在一个OSPF自治系统内部的缺省路由也可以通过这种LSA来通告。 如果一台ABR路由器经过骨干区域从其他的ABR路由器收到多条网络汇总LSA,那么这台始发的ABR路由器将会选择这些LSA通告中代价最低的LSA,并且将这个LSA的最低代价通告给它相连的非骨干区域。 4、ASBR汇总LSA (ASBR summary LSA) 也是由ABR产生,但是它是一条主机路由,指向ASBR路由器地址的路由。 5、自治系统外部LSA (Autonomous system external LSA) 由ASBR产生,告诉相同自治区的路由器通往外部自治区的路径。 自治系统外部LSA是惟一不和具体的区域相关联的LSA通告,将在整个自治系统中进行泛洪。 6、组成员LSA (Group membership LSA) * 目前不支持组播OSPF (MOSPF协议) 7、NSSA外部LSA (NSSA External LSA) 由ASBR产生,几乎和LSA 5通告是相同的,但NSSA外部LSA通告仅仅在始发这个NSSA外部LSA通告的非纯末梢区域内部进行泛洪。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值