8种OSPF邻居机状态不清楚?一张图给你搞定

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

晚上好,我的网工朋友。

OSPF作为一种动态的内部网关协议,以其快速的收敛速度、高度的灵活性和可扩展性在网络协议中占据着重要位置。
OSPF协议的核心之一是其邻居状态机。邻居状态机是OSPF协议中用于管理和维护路由器之间邻居关系的机制。
OSPF的邻居状态机是建立和维护路由器间通信的基础,通过理解每个状态的含义和转换条件,我们可以更有效地管理OSPF网络。
今天就来说说OSPF的8种邻居机状态,很多朋友不清楚这其中的联系和转换条件,咱做了一张图方便大家理解,结合更详细的描述,拿下这8种状态完全是小case。
d1161c9fa3ef91c3aaf22bf21fb042d5.jpeg

今日文章阅读福利:《 OSPF经典学习笔记(62页) 

私信我,发送暗号“学习笔记”,即可获得老网工珍藏的OSPF经典学习笔记一份。

01 OSPF概念

开放最短路径优先(OSPF)是一种基于链路状态的内部网关协议(IGP),主要用于单一自治系统内部进行路由信息的分发。

OSPF利用Dijkstra算法来计算最短路径,确保数据包能够以最优路径传输。OSPF的设计目标是实现快速计算、易于扩展和高度可靠。

OSPF通过维护一个链路状态数据库(LSDB)来存储网络的拓扑结构信息。每个运行OSPF的路由器都会维护一个完整的LSDB副本,包含网络中所有路由器的链路状态信息。OSPF利用这些信息构建一个最短路径树,从而确定数据传输的最佳路径。

OSPF的工作原理包括以下关键步骤:

  1. 发现邻居:通过发送和接收Hello包发现邻居路由器。

  2. 建立邻接关系:通过建立邻接关系来同步LSA信息。

  3. 交换LSA:通过洪泛机制交换LSA,确保每个路由器的LSDB都是最新的。

  4. 计算最短路径:利用Dijkstra算法计算从本路由器到所有其他路由器的最短路径。

02 邻居发现机制

在OSPF网络中,路由器首先需要发现并识别其邻居,即其他直接连接的OSPF路由器。这一过程是建立信任关系和交换路由信息的基础。

01 发现过程的步骤
  1. Hello包的发送:路由器定期在多播地址224.0.0.5上发送Hello包,以宣布其存在并发现同一网络上的其他OSPF路由器。

  2. 邻居列表的建立:收到Hello包的路由器将发送者添加到自己的邻居列表中,这是建立邻居关系的基础。

  3. 能力交换:路由器之间交换各自的能力,包括对不同OSPF特性的支持情况,如多区域配置、链路状态通告的过滤等。

02 Hello包和DD包
  • Hello包:用于发现邻居和维持邻居关系,包含路由器的优先级、Hello间隔和死接口等参数。

  • DD包(链路描述):在邻居发现后,路由器开始发送DD包以描述其链路状态数据库(LSDB)的内容,为后续的LSA交换做准备。

03 邻居发现过程的参数
  • Router Priority:路由器优先级,决定了在多接口网络中选举DR(指定路由器)和BDR(备份指定路由器)。

  • Hello Interval:Hello包的发送频率,用于维持邻居状态。

  • Dead Interval:如果在这个时间内没有收到邻居的Hello包,邻居关系将被认为是死亡的。

03 OSPF邻居状态机

OSPF的邻居状态机是OSPF协议中用于建立和维护路由器间通信的关键机制。

01 Down状态

这是OSPF邻居状态机的初始状态。在这种状态下,路由器尚未检测到任何邻居的存在,因此没有形成任何OSPF邻居关系。

  • 转换条件:当路由器接收到来自同一网络的其他路由器的Hello包时,如果满足条件(如相同的网络掩码和区域ID),则状态转换到Init。

02 Attempting状态 (非官方状态)

虽然这不是一个标准的OSPF状态,但我们可以将其视为从 Down 状态到 Init 状态转换期间,或从 Init 状态到 Two-Way 状态转换期间的一种尝试建立邻居关系的行为。

在这个阶段,路由器尝试通过发送Hello包来建立与邻居的连接,并等待邻居的响应来确认双向通信。

  • 转换条件:如果在Hello包中收到邻居的Router ID,并且邻居的Hello包中也包含自己的Router ID,这表明邻居已经看到了自己,从而完成尝试建立连接的过程,正式进入Two-Way状态。

03 Init状态

在Init状态,路由器已经检测到邻居的存在,但尚未建立起完整的双向通信。此时,路由器开始初始化与邻居的通信,并发送单向的Hello包。

  • 转换条件:当路由器在自己的Hello包中收到来自邻居的Hello响应,并且邻居的Hello包中包含了自己的Router ID,则认为邻居已经检测到自己,状态转换到Two-Way。

04 Two-Way状态

Two-Way状态表示路由器已经确认邻居的存在,并且双方都已经知道对方的存在。此时,双方可以开始尝试建立邻接关系。

  • 转换条件:当路由器收到邻居的Hello包,并且Hello包中包含自己的Router ID,同时路由器在发送的Hello包中也包含邻居的Router ID,状态转换到ExStart。

05 ExStart状态

ExStart状态是多步握手过程的开始,用于在两个路由器之间建立主从关系,这是建立邻接关系的必要步骤。

  • 转换条件:路由器选择自身作为主路由器或从路由器,并发送一个带有适当参数的DD包给邻居,如果收到邻居的DD包并确认参数一致,状态转换到Exchange。

06 Exchange状态

在Exchange状态,路由器开始与邻居交换链路状态信息。这一过程是建立完整邻接关系的关键部分,涉及到LSA的交换。

  • 转换条件:路由器收到邻居的完整DD包,并且所有必要的LSA已经被描述,此时开始发送LSAck包确认收到的LSA,状态转换到Loading。

07 Loading状态

Loading状态表示路由器正在加载那些在Exchange状态中收到的LSA。路由器将发送LSR(链路状态请求)包来请求那些尚未收到的LSA。

  • 转换条件:当路由器收到并加载完所有请求的LSA,并且所有LSA都已在本地LSDB中,状态转换到Full。

08 Full状态

Full状态是OSPF邻居关系完全建立的状态。在这种状态下,路由器与邻居之间已经交换了所有必要的链路状态信息,并且链路状态数据库是同步的。

  • 转换条件:维持Full状态需要持续的通信和Hello包的交换。如果在Dead Interval内没有收到邻居的Hello包,状态将回退到Down。

04 OSPF邻居状态的稳定性

01 稳定性的概念
  • 稳定状态:指的是OSPF邻居关系已经完全建立,并且路由器正在正常交换路由信息的状态。在这些状态下,路由器间的链路状态数据库(LSDB)是同步的,并且Hello包正在定期交换以维持关系。

  • 不稳定状态:指的是OSPF邻居关系正在建立过程中,或者存在某些条件尚未满足的状态。在这些状态下,路由器正在尝试建立或重新同步邻接关系。

02 稳定状态
  • Two-Way状态:虽然这是邻居关系建立过程的一个中间状态,但它表明了双向通信的存在,可以视为稳定的开始。

  • Full状态:这是最稳定的邻居关系状态,表示所有必要的LSA已经交换并同步,邻居路由器之间可以交换路由信息。

03 不稳定状态
  • DownInit状态:这些是初始状态,表示邻居关系尚未建立,因此被认为是不稳定的。

  • ExStart状态:在尝试建立邻接关系时,路由器进入此状态,这涉及到参数协商,可能因参数不匹配而不稳定。

  • Exchange状态:在LSA交换过程中,如果路由器正在发送或接收LSA描述或请求,这被认为是不稳定的,因为LSA尚未完全同步。

  • Loading状态:在这个阶段,路由器正在加载邻居提供的LSA,直到所有LSA都被接收和安装,这个状态被认为是不稳定的。

04 状态不稳定时的故障排查
  • 检查Hello包的交换,确保路由器间正在交换Hello包,并且参数一致。

  • 检查DD包和LSA的交换,监控DD包的发送和接收,确保LSA正在被正确交换。

  • 检查LSDB的同步状态,使用相关命令检查LSDB是否同步,以及是否存在缺失或不匹配的LSA。

原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 20:48:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 20:48:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 20:48:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 20:48:01       55 阅读

热门阅读

  1. 机器学习中的数据分析

    2024-07-22 20:48:01       15 阅读
  2. C++ STL标准数据库详解

    2024-07-22 20:48:01       18 阅读
  3. POI导入导出

    2024-07-22 20:48:01       15 阅读
  4. Python数据预处理和特征工程

    2024-07-22 20:48:01       16 阅读
  5. python函数基础详解

    2024-07-22 20:48:01       16 阅读
  6. AES加密/解密算法实现(C)

    2024-07-22 20:48:01       15 阅读
  7. 计数排序(桶排序思想)

    2024-07-22 20:48:01       12 阅读
  8. 分布式锁在AI大模型调用中的应用

    2024-07-22 20:48:01       19 阅读