OSPF是一个链路状态路由协议,使用IP协议号89。链路状态路由协议对于距离矢量路由来说,链路状态路由协议的路由信息是根据网络的链路状态,通过算法自己计算出来的;距离矢量路由的路由信息是依靠从邻居学习来的。
OSPF的管理距离是110,OSPF只支持等价负载均衡,最多6条执行负载均衡。
OSPF支持CIDR 和VLSM。
OSPF支持认证,并且支持明文和MD5认证。
OSPF采用增量更新,即只有在路由有变化时,才会发送路由,并且发送的是有变化的路由信息。
OSPF路由的定期更新周期默认为30分钟。
一台路由器可以运行多个不同的OSPF进程,不同的OSPF进程间要相互获取路由信息,则需要进行路由重分布。
OSPF术语
1、
Router id
用于在OSPF中标识各个路由器,router id的选举规则如下:手工指定ROUTER ID、如果没有手工指定,则选择LOOPBACK地址最大的、如果没有配置LOOPBACK地址,则选择物理接口IP地址最大的。
2、
COST
OSPF使用接口带宽来计算metric,100M/接口带宽,单位为bit/s;COST值也可以通过手动指定,手动指定的COST优先于自动计算的COST
3、
OSPF区域
OSPF采用分区域的方式来计算路由;OSPF区域要求所有的分支区域必须与骨干区域相连,因为它们需要通过骨干区域来传递不同区域的路由信息;OSPF区域是基于接口划分的,所以一台路由器可以同时属于多个区域
4、
ABR/ASBR
ABR是连接两个不同OSPF区域的路由器;ASBR是连接OSPF区域与外部路由协议的路由器
OSPF路由表
1、
路由的表示
如果是同区域的路由,用O来表示
如果是不同区域的路由,用O IA表示
如果是由外部路由协议重分布进的路由,则用O E1或者O E2表示
2、
路由的优先级
O----O IA-----O E1-----O E2
OSPF邻居
要想在OSPF路由器间相互交换LSA,必须先建立OSPF邻居。OSPF邻居是靠发送HELLO包来建立和维护,OSPF路由器会在接口上周期性的发送HELLO包,如果一台路由器超过4倍的HELLO时间没有收到HELLO包,邻居关系将会断开。
OSPF邻居建立的4个条件:
1、
区域ID必须相同
2、
HELLO和INTERVAL 时间间隔必须相同
3、
路由器必须同处于一个末节区域内
4、
如果存在认证,认证必须通过
OSPF路由器只能使用primary 地址建立邻居
DR/BDR
在多路访问网络中,例如以太网,为了减少LSA传播数量,需要在多路访问网络中选择出一台DR,所有的非DR路由器与DR相互建立邻接关系,从而减少LSA的传播数量。网络中除了选择DR外,还要选择出一台DR的备份路由器,称为BDR。
DR和BDR的选择是在多路由访问网段中才会出现的,而且DR和BDR是在一个二层网段内选举的,如果一个区域内存在多个二层网段,则会选择多个DR和BDR
DR和BDR的选举规则:
1、
比较接口优先级,优先级最高的为DR,次之为BDR;优先级范围是0-255,默认为1;如果优先级为0,则表示该路由器没有资格选择DR和BDR
2、
比较ROUTER ID大小,如果优先级相同,则选择ROUTER ID最大的为DR,次之为BDR,数字越大优先级越高
DR失效后,会重新选举DR和BDR,而BDR失效后,只会重新选举BDR。
所有运行OSPF的路由器使用组播地址224.0.0.5表示,DR和BDR则使用组播地址224.0.0.6表示。
OSPF的数据包
1、
HELLO
OSPF使用HELLO包建立和维护邻居关系
2、
DBD
当邻居建立后,OSPF路由器会使用DBD描述自己的链路数据库概述信息并将其发送给自己的邻居
3、
LSR
当路由器需要邻居链路状态数据库的具体描述信息时,会向邻居发送LSR请求
4、
LSU
当邻居收到LSR请求信息,会以LSU信息回复,即发送邻居请求的LSR信息
5、
LSACK—LSDB
当邻居收到LSU信息后,会发送一个LSACK作为确认回复。经过反复的LSR/LSU发送
,最终双方路由器形成相同的链路状态数据库,OSPF路由器会依据些链路状态数据库计算出到达各个目的地的最佳路径并存入路由表。
OSPF启动过程
路由器从运行OSPF进程开始,直到根据链路状态数据库计算出路由表,共需要经历8个不同的过程,分别是:
DOWN----ATTEMPT----INIT----TWO-WAY----EXSTART----EXCHANGE----LOADING----FULL
DOWN:路由器刚刚启动OSPF进程,还没有从任何路由器处收到任何数据包,这时路由器可以发送HELLO包,以试图发现邻居
ATTEMPT:OSPF使用组播来发送数据包,如果在组播不能发送的网络中,例如帧中继网络,则需要指定OSPF使用单播向邻居发送HELLO包,试图建立邻居关系,在这种状态下,称为ATTEMPT状态。
INIT:只是路由器一方收到了HELLO包
TWO-WAY:双方已经相互交换了HELLO包,表示邻居关系已经建立完毕,如果需要选举DR和BDR的网络,此时也已经选择完毕,但并不表示它们会交换LSA,如果不需要交换LSA的路由器,例如DROTHER间,则一直停留在此状态。
EXSTART:OSPF邻居在交换完整的LSA前,会先发送DBD,邻居间是谁先发送,谁后发送,是需要在EXSTART状态下确立的事情
EXCHANGE:OSPF路由器邻居双方相互交换DBD的过程
LOADING:邻居根据收到的LSR,向对方回复LSU
FULL:双方交换完整的LSA信息,进行路由表的计算