OSPF - Part 4:OSPF 邻居状态及邻居关系的建立

本文分析了OSPF路由器在邻居发现和邻接过程中所经历的状态,详细研究了OSPF的各个状态,包括:DownAttemptInit2-wayExstartExchangeLoadingFull

1. OSPF 邻居状态

当 OSPF 与邻居形成邻接时,在路由器完全邻接状态之前,连接会经历几个状态,本节将详细描述每个状态。

Down

[!CAUTION]

邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文。

Down状态是第一个 OSPF 邻居状态,表示未收到来自邻居的Hello 数据包4 x Hello Interval 计时器)到期时,OSPF 状态将从Full2-Way 状态转换为Down 状态,这意味着 OSPF 已与其邻居失去通信,现在被视为不可访问或已失效。

这是一种特殊状态,仅用于非广播多路访问( NBMA ) 网络中手动配置的邻居,它表示路由器正在通过单播向非广播多路访问( NBMA ) 环境中的邻居发送Hello数据包,但在死亡间隔(4 x Hello 间隔)内未收到回复。

NBMA 网络的一个示例是帧中继网络,其中没有内在的广播和多播功能。

Attempt

[!CAUTION]

只适用于NBMA类型的接口,处于本状态时,定期向那些手工配置的邻居发送Hello报文。

Down/Attempt

发送hello包,10s一次/40s超时,低速链路NBMA,30s一次/120s超时。

组播hello地址:224.0.0.5 收到hello结束

Init

[!CAUTION]

本状态表示已经收到了邻居的Hello报文,但是该报文中列出的邻居中没有包含我的Router ID(对方并没有收到我发的Hello报文)。

收到邻居hello,且nbr列表中没有本地RID。 收到邻居hello,且nbr列表中有本地RID,结束。

排错: 如果对方一直收不到你的hello包,有可能是把你过滤了,防火墙、acl,策略都有可能,就会一直处于init状态。

2-Way

[!CAUTION]

本状态表示双方互相收到了对端发送的Hello报文建立了邻居关系。在广播和NBMA类型的网络中,两个接口状态是DROther的路由器之间停留在此状态。其他情况状态机将继续转入高级状态。

邻居双方互相发现,邻居关系建立完成

MA网络中需要选择DR,P2P网络不需要选择DR。 DRother之间保持2-way状态不在继续下面的LSA交换。

排错:

MA网络中,如果双方优先级都设置成了0,那么都不是DR,那么就不行,一直保持2-way状态

此状态表示已从邻居路由器收到Hello数据包,但接收路由器的 ID 未在Hello数据包中列出。当路由器从邻居收到Hello数据包时,它应该列出发送者的路由器 ID,以确认它之前已收到有效的Hello数据包

此状态描述的是双向通信状态,双向意味着每个路由器都已接收到对方的Hello数据包,并且每个路由器都可以看到Hello数据包的邻居字段中包含的自己的路由器 ID 。

广播媒体(例如 LAN)和非广播多路访问( NBMA ) 网络(例如帧中继、ATM、X.25)上,路由器仅在与指定路由器( DR ) 和备份指定路由器( BDR ) 连接时才会进入Full State。但是,它将与所有其他邻居保持双向状态。

2-Way 状态完成后,将选举出DRDBR路由器,因为它们位于广播NBMA 网络上。

Exstart

[!CAUTION]

在此状态下,路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容,只包含一些标志位)来决定发送时的主/从关系。建立主/从关系主要是为了保证后续的DD报文交换中能够有序的发送

交换第一个DD,选择主从,根据Routher-ID大小,大的为主

排错:

确保双方MTU值(最大传输单元)保持一致。如果主发了5个包,从只能回了2个包,双方交换时,顺序就会错乱。

此状态表明已选出DRBDR,并确定了主从关系。还选择了用于形成邻接关系的初始序列号。具有最高路由器 ID的路由器将成为主路由器并开始交换链路状态数据。只有主路由器才能增加序列号。

Exchange

[!CAUTION]

路由器将本地的LSDBDD报文来描述,并发给邻居

主先发送DD,从向主确认。

排错:

确保双方MTU值(最大传输单元)保持一致

在此状态下,OSPF 路由器会交换数据库描述符( DBD ) 数据包。这些数据包包含描述整个链路状态数据库( LSD ) 内容的链路状态通告( LSA ) 标头。路由器收到的数据库描述符( DBD )的内容会与其自己的链路状态数据库( LSD ) 进行比较,以检查其邻居是否有可用的更改或其他链路状态信息。

Loading

[!CAUTION]

路由器发送LSR报文向邻居请求对方的DD报文

根据DD报文,向邻居发送LSR,请求LS(链路状态)。 邻居回复LSR,发送LSU,建立LSDB。 收到LSU后,回复LSACK。

排错:

如果一直卡在loading状态,问题可能是最大的LSA数量。 OSPF能够接受的LSA数量是有限的,如果管理员因为设备性能问题,对LSA的数量进行了限制,比如限制为只能收10个,那么到收到第11个的时候,就认为超限,一旦超限就有可能卡在loading状态加载不完。

在这种状态下,路由器根据邻居提供的数据库描述符( DBD ) 交换完整的链路状态信息,OSPF 路由器发送链路状态请求( LSR ) 并接收包含所有链路状态通告( LSA )链路状态更新( LSU )

链路状态更新( LSU) 实际上充当一个信封,其中包含所有链路状态通告( LSA ) – 这些通告已发送给邻居,以告知新的变化或了解到新的网络。

Full

[!CAUTION]

在此状态下,邻居路由器的LSDB中所以的LSA本路由器全都有了。即本路由器和邻居建立了邻接(adjacency)状态。

LSDB同步后,每30分钟,都会泛洪一次LSDB,保持数据库的同步

Full State是 OSPF 的正常运行状态,表示一切正常运行。在此状态下,路由器彼此完全相邻,所有路由器和网络链路状态通告( LSA ) 都已交换,路由器的数据库也已完全同步

对于广播NBMA 媒体,路由器将仅与其DRBDR路由器实现Full,而对于点对点点对多点网络,路由器应该与每个相邻路由器处于Full State

2. OSPF 邻居状态切换

  • OSPF各个邻居状态的之间的切换

  • OSPF 路由器在发现并建立其 OSPF 邻居时将经历的不同状态

  • OSPF邻居关系的建立,及过程中的数据交换示意图


OSPF - Part 4:OSPF 邻居状态及邻居关系的建立
https://blog.qzl-coding.top/2024/08/02/OSPF - Part 4:OSPF 邻居状态及邻居关系的建立/
作者
Long Chiu
发布于
2024年8月2日
许可协议