OSPF路由协议是用于网际协议(IP)网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议(IGP),在单一自治系统(AS)内部工作。适用于IPv4的OSPFv2协议定义于RFC 2328 [1] ,RFC 5340 [2] 定义了适用于IPv6的OSPFv3。
一、OSPF邻居关系建立
1.邻居发现:
OSPF通过HELLO报文发现和维持邻居关系。OSPF在所有启用OSPF进程的接口上发送HELLO报文;在广播和点到点网络中,HELLO是每10S发送一次,在NBMA和P2MP网络中每30S发送一次。在广播、点到点和点到多点的网络中,OSPF通过组播的HELLO报文自动发现邻居,组播目的地址是224.0.0.5。在NBMA网络中,需要手动指定邻居。
在建立邻居关系时,路由器会对收到HELLO报文进行对比,HELLO/DEAD发送时间间隔,区域ID,区域类型,只有这些参数一致OSPF邻居关系才能建立。
2.邻居关系建立过程:
DOWN状态:邻居的初始状态
INIT状态:路由器收到HELLO报文时,若该报文中ACTIVE NEIGHBOR字域中有没有自己的Router ID,则将该接口邻居置为INIT。
2-way状态:路由器收到HELLO报文时,若该报文中ACTIVE NEIGHBOR字域中有自己的Router ID,则将该接口邻居置为2-way。
OSPF邻居表中邻居处于INIT状态仅代表单项邻居建立起来,2-way状态代表双向邻居已建立起来。
3.邻接关系建立过程:
邻接关系是邻居路由器之间为了完成LSDB同步而发送的LSA交互过程,也是邻居路由器间初次通告LSA、快速同步的过程。
EXStart:在这一状态下,本地路由器和邻居路由器之间互相传递空的DD报文。目的是在广播/NBMA网络中确定主/从关系,确定DD的初始序列号,比较接口MTU。
EXchange:可靠的DD报文交互,完成快速交换LSA头。
Loading:本地路由器通过对比DD报文中的LSA头信息,向邻居发送LSR,以请求本地LSDB中没有的LSA,收到没有问题的LSU后发送LSAck确认该LAU。一份LSAck可以确认多份LSU。
FULL:在该状态下,邻居路由器之间已经完成同步过程,建立起完全邻接关系。
在广播和NBMA网络中,邻居接口IP和掩码会进行检查,如果网络不一致则无法建立邻居关系;而在P2P和P2MP网中则没有次限制。邻居接口的MTU值要一致,不一致可能导致停留在EXStart/EXChange状态。
二、OSPF网络类型
OSPF接口根据链路类型分为以下4中网络类型:
广播类型:
当链路层协议是Ethernet时,缺省情况下,OSPF认为网络类型是BROADCAST。在该类型的网络中,通常以组播发送HELLO报文、LSU报文和LSAck报文。其中224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6为DR/BDR的预留IP组播地址。以单播发送DD报文和LSR报文。
NBMA类型:
当链路层协议是帧中继、ATM时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。
P2MP类型:
该类型必须是从其他网络类型人为进行强制更改,常用做法是将非全互通的NBMA改为点到多点的网络类型。在该类型网络中,以组播(224.0.0.5)发送HELLO报文,以单播形式发送其他协议报文。
P2P类型:
当链路层协议是PPP、HDLC时,缺省情况下OSPF认为网络类型是点到点。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文。
OSPF不通网络类型互联:
网络类型组合 | 邻居建立 | 邻接同步 | 路由计算 |
NBMA+其他 | 不可以 | —— | —— |
P2MP+Broadcast | 调整间隔(hello和dead)后可以 | 可以 | 无法计算出对方路由 |
P2MP+P2P | 调整间隔后可以 | 可以 | 可以 |
Broadcast+P2P | 可以 | 可以 | 无法计算出对方路由 |
三、OSPF报文
HELLO报文:
周期性发送,用来发现和维持OSPF邻居关系。
DD报文:
描述了本地LSDB的摘要信息,用于两台路由器进行数据库同步。
LSR报文:
向对方请求所需的LSA,只有在双方成功开始交换DD报文后才会向对方发送LSR报文。
LSU报文:
向对方发送其所需的LSA或者泛洪自己更新的LSA。
LSAck报文:
用来对收到的LSA进行确认。Ospf工作在IP层,是个可靠的协议,协议内部包含确认机制,不需要确认的报文有HELLO和LSAck。
四、常用LSA类型
在AS内的每台路由器,根据路由器的分类产生一种或多种LSA。收到的LSA的集合形成了LSDB。OSPF中对路由信息的描述都是封装在LSA中发布出去的。
Router-LSA(type 1):
每个路由器都会产生,描述了设备的链路状态和开销,仅在所属的区域内泛洪。
Network-LSA(type 2):
由DR产生,描述MA网络的链路状态,金在所属的区域内泛洪。(P2P网络类型的链路上没有)。
Network-Summary-LSA(type 3):
区域内某个网段的路由,由ABR产生向其他区域通告,LSA3在区域间传递路由,但该LSA3泛洪范围仅在一个区域内。
ASBR-Summary-LSA(type 4):
由ABR产生,描述到ASBR的距离,通告给除ASBR所在区域的其他相关区域,该LSA4的泛洪范围仅在一个区域。ABR会在区域边界为其他区域再产生LSA4并继续泛洪。
AS-external-LAS(type 5):
由ASBR产生,描述到AS外部的路由,可泛洪到所有的区域(除了STUB区域和NSSA区域)。
NSSA-LSA(type 7):
由ASBR产生,描述到AS外部的路由,仅在NSSA区域内泛洪。
五、OSPF区域结构
骨干区域(area0):
骨干区域有且只有一个,所有其他区域必须通骨干区域相连,如果没有连接到骨干区域,将不会学到其他区域路由,OSPF中所有区域间路由必须经骨干区域传递(防止区域路由环路),其他区域若没有连接到骨干区域,要使用vlink连接到骨干区域。
普通区域:
Area号不等于0,承载vlink,是最普通的区域,它传输区域内路由、区域间路由和外部路由。
Stub区域:
Stub区域是一类特殊区域,这个区域不能接收LSA4/5。访问OSPF外部网络仅能通过ABR,所有的流量及路由通过ABR进入stub区域,不支持vlink。Totally stub 区域,比stub区域添加了对区域间LSA3的过滤。
NSSA区域:
NSSA区域可以有LSA7,可以有ASBR,访问任何外部OSPF区域可以通过本区域ASBR,也可以通过ABR访问。Totally nssa 在ABR上过滤区域间LSA3。
六、其他
Ospf认证
Spf路由计算
DR/BDR选举
OSPF选路规则,开销计算,多路径负载
Ospf路由控制
路由聚合,默认路由




