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
信息,进行路由表的计算