OSPF开放式最短路径优先。工作在IP层之上,协议号为89,OSPF以组播方式发送协议包,使用SPF最短路径优先算法计算和选择路由。
工作过程可分为:建立邻居---同步链路状态---计算路由三个阶段。其中会有八种状态机的改变,五个报文的产生、十类LSA(这里我们只讲其中六个)以及五个不同区域。形成三张表(邻居表、拓扑表、路由表)。
LSDB:数据库,设备所有的链路信息集合,由LSA组成。
LSA:一条链路信息,多个可以组成LSDB数据库。
以两个直连路由器为例,两台路由器开始时他们的状态为Down,R1开始发送第一个带有自己信息的Hello包,当R2接收到R1的Hello包时发现没有自己的路由信息,此时R2的状态转变为Init,此时R2发送携带自己路由信息和R1信息的Hello包。R1接收到后发现上面有自己的路由,状态转变为2-way后再想R2发送最后一个Hello包,携带自己和R2的路由信息。当R2收到后也将自己的状态转换为2-way。
邻居建立完成后。状态从2-way转换为EX-start。开始发送DBD报文建立主从关系。RID大的为主否则为从。随后从的状态转变为exchange,向主发送一个携带拓扑描述信息的DBD报文,主收到后状态转换为exchange,并向从发送携带拓扑的DBD报文,从回复DBD做确认。
当同步链路状态最后一个DBD发送后。R1状态从exchange变为loading,发送LSR请求完整拓扑信息LSA,对方R2收到消息后状态也变为loading,并发送LSU携带LSA信息回应R1的请求。R1收到后回复确认,通过多个LSR和LSU的交换,两个路由器的LSDB数据库同步完毕。形成拓扑表,这个过程中使用SPF算法计算出路由表。
Down:邻居会话初始阶段,在邻居失效时间内未收到邻居路由的Hello数据包。
Attempt:没有收到邻居的任何信息,但是已经周期性向邻居发送报文,发送间隔HelloInterval
Init:从邻居收到hello报文,但报文中并没有自己的Router-id。
2-way:收到的Hello表中有自己的Router-id。
Exstart:开始协商主从关系,并确定DD的序列号。
Exchange:主从关系协商完成,交换DD报文(携带自己LSDB中的LSA)。
loading:使用LSR请求自己所需LSA信,LSU携带LSA信息对LSR做应答,LSack对LSU做确认。
普通区域:缺省情况下,OSPF区域被定为普通区域。普通区域包括标准区域和骨干区域。
STUB区域:不允许发布自治系统外部路由,只允许发送区域内路由和区域间路由。为了保证自治系统外路由可达,由该区域ABR发布Type3缺省路由传播到区域内。
Totally STUB区域:不允许发布自治系统外部路由和区域间路由,只允许发布区域间路由。为了保证自治系统和其他区域路由可达由该区域的ABR发布Type3缺省路由传播到区域内,所有自治系统外部和其他区域路由都必须经过ABR才能发布。
NSSA区域:允许引入自治系统外部路由。由ASBR发布Type7给本区域。Type7在ABR上转换为Type5并泛红到整个OSPF域中。所有域都必须通过ABR才能发布。
Totally NSSA区域:允许引入自治系统外部路由。由SABR发布Type7给本区域。在ABR上转换成Type5并泛洪到整个OSPF域。该区域的ABR发布Type3和Type7缺省路由传播到区域内。所有域间路由必须通过ABR才能发布。