本文分析了OSPF路由器在邻居发现和邻接过程中所经历的状态,详细研究了OSPF的各个状态,包括:Down、Attempt、Init、2-way、Exstart、Exchange、Loading和Full。
1. OSPF 邻居状态
当 OSPF 与邻居形成邻接时,在路由器完全邻接状态之前,连接会经历几个状态,本节将详细描述每个状态。
Down
[!CAUTION]
邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文。
Down状态是第一个 OSPF 邻居状态,表示未收到来自邻居的Hello 数据包(4 x Hello Interval 计时器)到期时,OSPF 状态将从Full或2-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 状态完成后,将选举出DR和DBR路由器,因为它们位于广播或NBMA 网络上。
Exstart
[!CAUTION]
在此状态下,路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容,只包含一些标志位)来决定发送时的主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。
交换第一个DD,选择主从,根据Routher-ID大小,大的为主。
排错:
确保双方MTU值(最大传输单元)保持一致。如果主发了5个包,从只能回了2个包,双方交换时,顺序就会错乱。
此状态表明已选出DR和BDR,并确定了主从关系。还选择了用于形成邻接关系的初始序列号。具有最高路由器 ID的路由器将成为主路由器并开始交换链路状态数据。只有主路由器才能增加序列号。
Exchange
[!CAUTION]
路由器将本地的LSDB用DD报文来描述,并发给邻居。
主先发送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 媒体,路由器将仅与其DR和BDR路由器实现Full,而对于点对点和点对多点网络,路由器应该与每个相邻路由器处于Full State。
2. OSPF 邻居状态切换
-
OSPF各个邻居状态的之间的切换
-
OSPF 路由器在发现并建立其 OSPF 邻居时将经历的不同状态
-
OSPF邻居关系的建立,及过程中的数据交换示意图
发表评论