号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部
晚上好,我的网工朋友。
OSPF作为一种动态的内部网关协议,以其快速的收敛速度、高度的灵活性和可扩展性在网络协议中占据着重要位置。
OSPF协议的核心之一是其邻居状态机。邻居状态机是OSPF协议中用于管理和维护路由器之间邻居关系的机制。
OSPF的邻居状态机是建立和维护路由器间通信的基础,通过理解每个状态的含义和转换条件,我们可以更有效地管理OSPF网络。
今天就来说说OSPF的8种邻居机状态,很多朋友不清楚这其中的联系和转换条件,咱做了一张图方便大家理解,结合更详细的描述,拿下这8种状态完全是小case。
今日文章阅读福利:《 OSPF经典学习笔记(62页) 》
私信我,发送暗号“学习笔记”,即可获得老网工珍藏的OSPF经典学习笔记一份。
01 OSPF概念
开放最短路径优先(OSPF)是一种基于链路状态的内部网关协议(IGP),主要用于单一自治系统内部进行路由信息的分发。
OSPF利用Dijkstra算法来计算最短路径,确保数据包能够以最优路径传输。OSPF的设计目标是实现快速计算、易于扩展和高度可靠。
OSPF通过维护一个链路状态数据库(LSDB)来存储网络的拓扑结构信息。每个运行OSPF的路由器都会维护一个完整的LSDB副本,包含网络中所有路由器的链路状态信息。OSPF利用这些信息构建一个最短路径树,从而确定数据传输的最佳路径。
OSPF的工作原理包括以下关键步骤:
-
发现邻居:通过发送和接收Hello包发现邻居路由器。
-
建立邻接关系:通过建立邻接关系来同步LSA信息。
-
交换LSA:通过洪泛机制交换LSA,确保每个路由器的LSDB都是最新的。
-
计算最短路径:利用Dijkstra算法计算从本路由器到所有其他路由器的最短路径。
02 邻居发现机制
在OSPF网络中,路由器首先需要发现并识别其邻居,即其他直接连接的OSPF路由器。这一过程是建立信任关系和交换路由信息的基础。
01 发现过程的步骤
-
Hello包的发送:路由器定期在多播地址224.0.0.5上发送Hello包,以宣布其存在并发现同一网络上的其他OSPF路由器。
-
邻居列表的建立:收到Hello包的路由器将发送者添加到自己的邻居列表中,这是建立邻居关系的基础。
-
能力交换:路由器之间交换各自的能力,包括对不同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 不稳定状态
-
Down和Init状态:这些是初始状态,表示邻居关系尚未建立,因此被认为是不稳定的。
-
ExStart状态:在尝试建立邻接关系时,路由器进入此状态,这涉及到参数协商,可能因参数不匹配而不稳定。
-
Exchange状态:在LSA交换过程中,如果路由器正在发送或接收LSA描述或请求,这被认为是不稳定的,因为LSA尚未完全同步。
-
Loading状态:在这个阶段,路由器正在加载邻居提供的LSA,直到所有LSA都被接收和安装,这个状态被认为是不稳定的。
04 状态不稳定时的故障排查
-
检查Hello包的交换,确保路由器间正在交换Hello包,并且参数一致。
-
检查DD包和LSA的交换,监控DD包的发送和接收,确保LSA正在被正确交换。
-
检查LSDB的同步状态,使用相关命令检查LSDB是否同步,以及是否存在缺失或不匹配的LSA。
原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部