OSPF之间在进行链路状态信息传播前必须进行OSPF会话。OSPF消息交互过程中状态变化分为3个阶段:第一阶段为邻居发现阶段,该阶段作用是自动发现有哪些邻居,确定通过何种网络类型连接这些邻居、到达这些邻居的代价是多大以及关键参数是否一致。第二阶段邻居之间的链路状态数据库同步,该阶段主要是彼此交换各自持有的链路状态数据库信息,使链路状态数据库同步。第三阶段邻居之间完成LSDB同步,彼此建立了稳定的邻居会话,并通过该会话相互通告网络中链路状态变换信息和路由信息,时刻保持网络上链路状态的一致性。整个会话建立过程中的状态转移如图2.1所示,状态描述如下。
图2.1 会话建立过程中的状态转移
(1)Down:OSPF第一个状态,该状态代表本地路由器尚未从邻居接收任何信息,但是可以主动向邻居发送Hello消息。
(2)Attempt:该状态代表路由器正在给邻居发送Hello消息(或已经发送),但未收到任何回复。OSPF采用周期发送Hello消息的方式进行邻居发现,这个定时器是Hello定时器。Hello定时器的定时一般为10s,会依据链路类型不同有所差异。同时Hello消息还被用于会话维持。如果在一定时间内没有收到邻居的Hello消息,则认为链路出现问题,需要关闭邻居会话,这个定时器称为Dead定时器,定时一般为40s。这两个定时器可以依据具体环境手工配置。
(3)Init:如果路由器收到了邻居发送的Hello消息,但是自己的RID并不在Hello消息中,则进入该状态。协议规定,如果收到邻居的Hello消息后,再发送Hello消息时,应该把邻居的RID添加到该Hello消息中,用以向对方确认。
(4)2-way:如果路由器从邻居路由器收到了Hello消息,Hello消息中有自己的RID且彼此的Hello和Dead定时器等参数一致,则进入该状态。
(5)Exstart:如果确定要进一步建立会话,则会进入该状态,双方便开始协商主从关系和数据库的初始序号。其中以拥有较高RID的路由器为主,并由主路由器控制序列号的增加。
(6)Exchange:在确定了主从关系后,会话双方便开始发送数据库概要描述(Database Description,DD)信息,该状态一直持续到双方的概要描述信息同步完毕。
(7)Loading:会话双方的信息同步完毕后进入该状态。该状态下,路由器通过比较自身链路状态数据库和从对方获取的数据库概要描述信息,确定本地缺少的链路状态信息;针对缺少的链路状态信息发送链路状态请求消息,对方在收到请求消息后,检索本地链路状态数据库,将对方缺失的链路状态信息通过链路状态通告LSA反馈。
(8)Full:当会话双方完成链路状态数据库同步后进入该状态。会话双方通过Hello消息进行会话的维持,并在Dead定时器超时后关闭会话。