什么是OSPF?
开放式最短路径优先OSPF,在大型网络结构当中路由器对IP的路由需要使用到RIP或者OSPF协议实现对链路的收敛,使得路由器能够准确的将IP数据包路由到准确的下一跳地址,接下来介绍一下OSPF实现链路收敛的原理方式。
OSPF相较于rip的优势
- RIP使用跳点数量作为路径的评判标准,未考虑到链路带宽等其他因素。 OSPF使用cost(标准(指定)带宽/实际带宽)作为链路的评判标准,更加具有合理性。
- RIP最大记录长度为15跳,在大型网络拓扑当中具有局限性。OSPF使用LSDB数据库的记录形式,没有跳点长度限制。
- RIP更新次数频繁,每三十秒就对链路发送更新消息,占用网络资源。 OSPF只在路由发生变化或者三十分钟进行一次更新。
- 收敛速度慢。 OSPF收敛速度快。
OSPF关系的组成
在OSPF当中有以下几种概念:DR BDR 邻接 邻居 Router ID 接下来我将具体讲解不同概念在OSPF当中的作用。
DR
同一个网段当中只能有一个组长、副组长
DR一个OSPF域当中的组长,用于负责对域内路由器LSA信息更新的发生以及给新接入的路由器进行数据同步等操作。
BDR
BDR指ospf域当中的副组长,始终与组长保持数据同步当组长出现故障后会顶替组长进行域内路由条目管理。
邻居
邻居关系是指两个相互连接的路由互为邻居关系。 路由器通过发送HELLO数据包来获取邻居信息。
邻接
邻接关系指DR、BDR与域内成员建立的邻居关系成为邻接关系,只有邻接关系才能实现LSA传输
Router ID
当一个路由器加入到OSPF域内后都会拥有一个RouterID用于在域内做唯一身份标识。这是一个4x8二进制数与IP相同,如果不由人员指定就会自动获取一个接口的IP作为该RouterID。
通常情况下会使用最大的本机回环地址作为RouterID,其次考虑使用最大的接口IP地址作为RouterID。
LSDB、LSA
LSDB指链路状态数据库,其中存放的是LSA,LSA指链路状态公告,路由器可以通过LSA获取整个域内的所有链路cost信息。从而实现选取最优路径。
cost
cost指路径开销,通常值为指定带宽/实际带宽,路径开销的值1越小,该路径的优先级越大,用户可以自己选择配置cost值,实现指定路径。
数据同步与常规LSA泛洪
两个组播地址
组播地址用于组员与组长有路由变更时发送组播让组员和组长实现LSDB更新
224.0.0.5 组员监听
224.0.0.6 组长监听
数据同步
当路由器接入一个OSPF域当中之后,会首先通过HELLO数据包发现域内的DR。
- 在邻居关系建立后,路由器会与DR进行LSA数据库同步。这一过程称为数据库描述(DBD)交换。
- 路由器通过DBD报文交换其持有的LSA摘要信息。此时,如果路由器发现自己缺少某些LSA,它会通过发送**链路状态请求(LSR, Link State Request)**报文来请求特定的LSA。
- DR会根据请求,将缺少的LSA发送给请求的路由器,使用**链路状态更新(LSU, Link State Update)**报文来进行传输。
LSA泛洪
LSA泛洪用于实现当域内某一台路由出现路由更新的情况,会首先在此路由本地生成LSA条目再发送给DR,DR接收到该条目后不会立即进行LSA泛洪会等待一段时间确认是否会再次接收到其他LSA条目,再进行泛洪以节省开销。
DR、BDR的确认
为什么要选取DR与BDR?
在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息。网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。
为解决这一问题,OSPF定义了DR。通过选举产生DR后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去。
为了防止DR发生故障,重新选举DR时会造成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
DR和BDR的选举是基于以下两个主要因素进行的:
- 路由器优先级:OSPF路由器接口上配置的优先级(Priority)值。优先级的范围是0到255,数值越大,优先级越高。默认值通常为1。
- 路由器ID(Router ID):在优先级相同的情况下,使用路由器ID作为次要决策因素。路由器ID是OSPF路由器的唯一标识,通常是路由器上配置的最高IP地址,或手动指定的一个32位值。
五个重要的报文
HELLO报文
HELLO报文用于发现和维持邻居关系
BDB
DBD指发送的LSDB信息摘要,成员路由接收后通过查看摘要确定自己需要的路由LSA。
LSR
成员路由确定所需要的LSA后发送LSR请求需要的LSA信息
LSV
一个LSV包含了多个LSA
LSAck
LSAck表示确认收到了信息。