OSPF,开放式最段路径优先(Open Shortest Patch First,OSPF)是由Internet工程组(IETF)开发的路由选择协议,使用的是SPF算法。作为链路状态路由协议,启用OSPF的路由器发送的是LSA而不是具体的路由信息。宣告OSPF的路由器从所有启动OSPF协议的接口上发出HELLO报文,如果两台路由器能够相互协商它们各自的HELLO报文中所指定的某些参数,那么他们就可以成为邻居。建立邻居的路由器有可能建立邻接关系,建立邻接关系的路由器之间会发送链路状态通告(LSA)。OSPF是靠HELLO报文来发现邻居的,同样也是靠HELLO报文来保持邻居,邻居之间交换的HELLO报文叫做keepalive报文,每隔30分钟发送一次更新。一台OSPF路由器使用一个路由器的ID号作为OSPF的标识,router Id一般使用所有回环口中数值最高的IP地址作为ID号,如果路由器上没有配置回环口的话就会使用物理接口中最高的IP地址作为路由器的ID。同样也可以手工指定ROUTER ID。
HELLO报文不匹配的情况下,OSPF是建立不起来邻居的,在CISCO路由器中,缺省的HELLO报文的时间是10S一次,在NBMA的情况下是30秒一次,注意跟EIGRP不同的是,OSPF在小于T1的链路上同样是10秒发送一次更新,如果在无效时间间隔内还没收到来自邻居的HELLO报文,那么邻居将会被宣告无效,CISCO路由器中,缺省的无效时间是HELLO时间的4倍。
OSPF定义了以下5种网络类型:
点到点网络,广播网络,非广播多路访问网络(NBMA),点到多点广播,虚电路,点到多点非广播。
1.点到点的网络,网络上的有效邻居总是形成邻接关系的。在这些网络上的OSPF报文的目的地址也总是保留的D类地址224.0.0.5。
2.广播型网络,会选举出一个DR和一个BDR,所有的路由器会跟DR和BDR建立邻接关系,相互之间并不建立邻接关系,DR和BDR使用组播地址224.0.0.5来发送HELLO报文,其他路由器将使用224.0.0.6来发送HELLO报文
3.非广播多路访问(NBMA)同样会选举DR和BDR,不同的是,NBMA是不支持广播的,所以是使用单播地址发送更新。
4.点到多点的网络,可以看作一个点到点的网络的集合,使用组播地址发送更新。
另外,除了以上的5种网络类型外,应该注意的是,所有的网络也都可以归纳到下面两种更普通的网络类型之:传送网络和末节网络
传送网络:和两台或两台以上的路由器相连;
末梢网络:仅仅和一台路由器相连。
指定路由器和备份指定路由器(DR和BDR),在多路访问的网络上,为了避免网络上LSA泛洪的混乱,OSPF会在多路访问的网络上选举一个DR和BDR,所有的路由器将会与DR和BDR建立邻接关系。DR和BDR将会收集所有的LSA然后将LSA发送到网络中其余的路由器。而非DR和BDR的路由器相互是不会发送LSA的。如果一个DR失效了BDR会成为DR,然后从新选出一个BDR,所以DR和BDR之间也将相互形成邻接关系。DR的选举是通过接口上的优先级决定的,默认的情况下为1,为0的时候代表不参与选举。如果一个网络上只有一台路由器成为了DR而没有BDR路由器的话,其他所有路由器只和这个DR路由器建立邻接关系。
OSPF的几种区域:
末节区域:一个学习到外部路由器信息的ASBR路由器将通过在整个OSPF自主系统中泛洪自主系统外部LSA来通告那些外部的目的路由信息。末节网络是一个不允许AS外部LSA通告在其内部进行泛洪的区域。也就是说阻止了类型5的LSA。
完全末节区域:具有末节区域的特性,另外还阻止了类型3和类型4的LSA,在完全末节区域的路由器将使用一条缺省路由到达这个区域的外部。
nssa区域:具有末节区域的特性,不同的是在NSSA内部允许类型7的LSA泛洪,从NSSA区域通过ABR看到的路由都会标记为N2的路
由。
OSPF是支持验证的,可以在OSPF中配置区域验证和接口验证,区域验证就是在每个接口上开启了验证,但是必须在接口上配置验证的关键字,否则就会是空验证,OSPF验证支持MD5验证。
 
OSPF--7种类型LSA摘要
由于OSPF协议定义了多种路由器的类型,因而定义多种LSA通告的类型也是必要的。
例如:一台DR路由器必须通告多路访问链路和所有与这条链路相连的路由器,而其他类型的路由器将不需要通告这种类型的信息。

OSPF的七种类型LSA:
1、路由器LSA (Router LSA)
由区域内所有路由器产生,并且只能在本个区域内泛洪广播。

这些最基本的LSA通告列出了路由器所有的链路和接口,并 指明了它们的状态和沿每条链路方向出站的代价。

2、网络LSA (Network LSA)
由区域内的DR或BDR路由器产生,报文包括DR和BDR连接的路由器的链路信息。

网络LSA也仅仅在产生这条网络LSA的区域内部进行泛洪。

3、网络汇总LSA (Network summary LSA)
由ABR产生,可以通知本区域内的路由器通往区域外的路由信息。

在一个区域外部但是仍然在一个OSPF自治系统内部的缺省路由也可以通过这种LSA来通告。

如果一台ABR路由器经过骨干区域从其他的ABR路由器收到多条网络汇总LSA,那么这台始发的ABR路由器将会选择这些LSA通告中代价最低的LSA,并且将这个LSA的最低代价通告给与它相连的非骨干区域。

4、ASBR汇总LSA (ASBR summary LSA)
也是由ABR产生,但是它是一条主机路由,指向ASBR路由器地址的路由。

5、自治系统外部LSA (Autonomous system external LSA)
由ASBR产生,告诉相同自治区的路由器通往外部自治区的路径。

自治系统外部LSA是惟一不和具体的区域相关联的LSA通告,将在整个自治系统中进行泛洪。

6、组成员LSA (Group membership LSA)     * 目前不支持组播OSPF (MOSPF协议)



7、NSSA外部LSA (NSSA External LSA)
由ASBR产生,几乎和LSA 5通告是相同的,但NSSA外部LSA通告仅仅在始发这个NSSA外部LSA通告的非纯末梢区域内部进行泛洪。
在NSSA区域中,当有一个路由器是ASBR时,不得不产生LSA 5报文,但是NSSA中不能有LSA 5报文,所有ASBR产生LSA 7报文,发给本区域的路由器。


* 只有一个例外,每台ABR路由器上利用一个类型3来通告缺省路由。每一种区域内允许泛洪的LSA类型

区域类型              1&2         3&4           5            7
骨干区域              允许        允许        允许         不允许
非骨干(非末梢)        允许        允许        允许         不允许
末梢                  允许        允许        允许         不允许
完全末梢              允许        不允许      不允许       不允许
NAAS                  允许        允许        不允许       允许

* 只有一个例外,每台ABR路由器上利用一个类型3来通告缺省路由。

1 末梢区域:(Stub Area)
       不允许AS外部通告(LSA 5)在其内部进行泛洪。在末梢区域边界的ABR路由器使用网络汇总LSA (LSA 3)向这个区域通告缺省路由,而且这条缺省路由不会被通告到这个区域的外部去。
     Router(config-route)area 1 stub      //将Area 1设置成末梢区域


2. 完全末梢区域:(Totally stub)
      使用缺省路由到达OSPF自治系统外部的目的地址,而且使用缺省路由到达这个区域外部的所有目的地址,完全末梢区域的ABR路由器不仅阻塞LSA 5,也阻塞所有的汇总LSA――除了通告缺省路由的那一条类型3。
     Router(config-route)#area 1 stub no-summary     //将Area 1设置成完全末梢区域,此时会将类型3用默认路由代替,NO-summary的作用是将类型3、4用默认路由简化

3 非纯末梢区域(Not-so-stubby-area)
     允许外部路由通告到OSPF自治系统内部,而同时保留自治系统的其余部分的末梢区域特征,ASBR将始发类型7的LSA来通告那些外部网络,这些NAAS外部LSA将在整个NAAS区域中泛洪,在ABR上被阻塞。ABR会将类型7的转化为类型5通告到其他区域中。