OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。与RIP相对,OSPF是链路状态路由协议,而RIP是距离向量路由协议。
链路是路由器接口的另一种说法,因此OSPF也称为接口状态路由协议。OSPF通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,每个OSPF路由器使用这些最短路径构造路由表。
OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。
作为一种链路状态的路由协议,OSPF将链路状态广播数据包LSA(Link State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。
OSPF邻居关系
  邻接关系建立的4个阶段:
1.邻居发现阶段
2.双向通信阶段:Hello报文都列出了对方的RID,则BC完成.
3.数据库同步阶段:
4.完全邻接阶段: full adjacency
邻居关系的建立和维持都是靠Hello包完成的,在一般的网络类型中,Hello包是每经过1个HelloInterval发送一次,有1个例外:在NBMA网络中,路由器每经过一个PollInterval周期发送Hello包给状态为down的邻居(其他类型的网络是不会把Hello包发送给状态为down的路由器的).Cisco路由器上PollInterval默认60s Hello Packet以组播的方式发送给224.0.0.5,在NBMA类型,点到多点和虚链路类型网络,以单播发送给邻居路由器。邻居可以通过手工配置或者Inverse-ARP发现.
OSPF路由器在完全邻接之前,所经过的几个状态:
  1.Down: 初始化状态.
  2.Attempt: 只适于NBMA网络,在NBMA网络中邻居是手动指定的,在该状态下,路由器将使用HelloInterval取代PollInterval来发  送Hello包.
  3.Init: 表明在DeadInterval里收到了Hello包,但是2-Way通信仍然没有建立起来.
  4.two-way: 双向会话建立.
  5.ExStart: 信息交换初始状态,在这个状态下,本地路由器和邻居将建立Master/Slave关系,并确定DD Sequence Number,接口等级高的的成为Master.
  6.Exchange: 信息交换状态,本地路由器向邻居发送数据库描述包,并且会发送LSR用于请求新的LSA.
  7.Loading: 信息加载状态,本地路由器向邻居发送LSR用于请求新的LSA .
  8.Full: 完全邻接状态,这种邻接出现在Router LSA和Network LSA中.
 
OSPF泛洪
  Flooding采用2种报文
LSU Type 4---链路状态更新报文
LSA Type 5---链路状态确认报文
(补充下)
{
Hello                             Type 1 ---Hello协议报文
DD(Data Description)  Type 2----链路数据描述报文
LSR                                Type 3----链路状态请求报文
}
  在P-P网络,路由器是以组播方式将更新报文发送到组播地址224.0.0.5.
  在P-MP和虚链路网络,路由器以单播方式将更新报文发送至邻接邻居的接口地址.
  在广播型网络,DRother路由器只能和DR&BDR形成邻接关系,所以更新报文将发送到224.0.0.6,相应的DR以224.0.0.5泛洪LSA并且BDR只接收LSA,不会确认和泛洪这些更新,除非DR失效 在NBMA型网络,LSA以单播方式发送到DR BDR,并且DR以单播方式发送这些更新.
LSA通过序列号,校验和,和老化时间保证LSDB中的LSA是最新的,
Seq: 序列号(Seq)的范围是0x80000001到0x7fffffff.
Checksum: 校验和(Checksum)计算除了Age字段以外的所有字段,每5分钟校验1次.
Age: 范围是0到3600秒,16位长.当路由器发出1个LSA后,就把Age设置为0,当这个LSA经过1台路由器以后,Age就会增加1个LSA保存在LSDB中的时候,老化时间也会增加.
当收到相同的LSA的多个实例的时候,将通过下面的方法来确定哪个LSA是最新的:
  1. 比较LSA实例的序列号,越大的越新.
  2. 如果序列号相同,就比较校验和,越大越新.
  3. 如果校验和也相同,就比较老化时间,如果只有1个LSA拥有MaxAge(3600秒)的老化时间,它就是最新的.
  4. 如果LSA老化时间相差15分钟以上,(叫做MaxAgeDiff),老化时间越小的越新.
  5. 如果上述都无法区分,则认为这2个LSA是相同的.
OSPF区域
区域长度32位,可以用10进制,也可以类似于IP地址的点分十进制分3种通信量
1. Intra-Area Traffic:域内间通信量
2. Inter-Area Traffic:域间通信量
3. External Traffic:外部通信量

路由器类型
1. Internal Router:内部路由器
2. ABR(Area Border Router):区域边界路由器
3. Backbone Router(BR):骨干路由器
4. ASBR(Autonomous System Boundary Router):自治系统边界路由器.
虚链路(Virtual Link)
以下2中情况需要使用到虚链路:
1. 通过一个非骨干区域连接到一个骨干区域.
2. 通过一个非骨干区域连接一个分段的骨干区域两边的部分区域.
虚链接是一个逻辑的隧道(Tunnel),配置虚链接的一些规则:
1. 虚链接必须配置在2个ABR之间.
2. 虚链接所经过的区域叫Transit Area,它必须拥有完整的路由信息.
3. Transit Area不能是Stub Area.
4. 尽口的避免使用虚链接,它增加了网络的复杂程度和加大了排错的难度.
LSA类型
1.类型1:Router LSA:每个路由器都将产生Router LSA,这种LSA只在本区域内传播,描述了路由器所有的链路和接口,状态和开销.
2.类型2:Network LSA:在每个多路访问网络中,DR都会产生这种Network LSA,它只在产生这条Network LSA的区域泛洪描述了所有和它相连的路由器(包括DR本身).
3.类型3:Network Summary LSA :由ABR路由器始发,用于通告该区域外部的目的地址.当其他的路由器收到来自ABR的Network Summary LSA以后,它不会运行SPF算法,它只简单的加上到达那个ABR的开销和Network Summary LSA中包含的开销,通过ABR,到达目标地址的路由和开销一起被加进路由表里,这种依赖中间路由器来确定到达目标地址的完全路由(full route)实际上是距离矢量路由协议的行为
4.类型4:ASBR Summary LSA:由ABR发出,ASBR汇总LSA除了所通告的目的地是一个ASBR而不是一个网络外,其他同NetworkSummary LSA.
5.类型5:AS External LSA:发自ASBR路由器,用来通告到达OSPF自主系统外部的目的地,或者OSPF自主系统那个外部的缺省路由的LSA.这种LSA将在全AS内泛洪
6.类型6:Group Membership LSA
7.类型7:NSSA External LSA:来自非完全Stub区域(not-so-stubby area)内ASBR路由器始发的LSA通告它只在NSSA区域内泛洪,这是与LSA-Type5的区别.
8.类型8:External Attributes LSA
9.类型9:Opaque LSA(link-local scope,)
10.类型10:Opaque LSA(area-local scope)
11.类型11:Opaque LSA(AS scope)
OSPF末梢区域
由于并不是每个路由器都需要外部网络的信息,为了减少LSA泛洪量和路由表条目,就创建了末节区域,位于Stub边界的ABR将宣告一条默认路由到所有的Stub区域内的内部路由器.
Stub区域限制:
a) 所有位于stub area的路由器必须保持LSDB信息同步, 并且它们会在它的Hello包中设置一个值为0的E位(E-bit),因此这些路由器是不会接收E位为1的Hello包,也就是说在stub area里没有配置成stub router的路由器将不能和其他配置成stub router的路由器建立邻接关系.
b) 不能在stub area中配置虚链接(virtual link),并且虚链接不能穿越stub area.
c) stub area里的路由器不可以是ASBR.
d) stub area可以有多个ABR,但是由于默认路由的缘故,内部路由器无法判定哪个ABR才是到达ASBR的最佳选择.
e)NSSA允许外部路由被宣告OSPF域中来,同时保留Stub Area的特征,因此NSSA里可以有ASBR,ASBR将使用type7-LSA来宣告外部路由,但经过ABR,Type7被转换为Type5.7类LSA通过OSPF报头的一个P-bit作Tag,如果NSSA里的ABR收到P位设置为1的NSSA External LSA,它将把LSA类型7转换为LSA类型5.并把它洪泛到其他区域中;如果收到的是P位设置为0的NSSAExternal LSA,它将不会转换成类型5的LSA,并且这个类型7的LSA里的目标地址也不会被宣告到NSSA的外部NSSA在IOS11.2后支持.