使用链路状态协议路由
使用OSPF协议路由
链路状态协议的运行过程
链路状态协议以其良好的分层设计和足以支持大型网络的可扩展性广泛应用于企业网络中并博得众多ISP 的青睐。距离矢量协议通常并不适合用在复杂的企业网络中。
开放最短路径优先(OSPF) 协议是一种链路状态路由协议。OSPF 是由Internet 工程任务组(IETF) 开发的、用于支持IP 通信的开放式标准路由协议。
OSPF 是一种无类内部网关协议(IGP)。该协议将网络划分为若干不同的部分,也叫做区域。这种划分可以提高网络的可扩展性。通过将网络划分为多个网络区域,网络管理员可以有选择性地启用路由总结并将出现的路由问题隔离到某个区域中。
链路状态路由协议(如OSPF)并不会频繁、定期地发送整个路由表的更新信息。网络完全收敛之后,链路状态协议将只在拓扑发生更改(例如链路断开)时才发送更新信息。其它情况下,OSPF 每30 分钟执行一次完全更新。
OSPF 之类的链路状态协议非常适合更庞大的分层网络,因为在分层网络中,网络的快速收敛能力非常重要。
与距离矢量协议相比较,链路状态路由协议具有以下特性:
需要更复杂的网络规划和配置
需要占用更多的路由器资源
需要占用更多的内存来存储多个表
需要占用更多的CPU 和处理资源来完成复杂的路由计算
不过,如今,市面上的路由器性能很高,因此上述要求通常都不是问题。
运行RIP 协议的路由器仅接收其直连邻居的更新信息,并不接收整个网络的详细信息。运行OSPF 协议的路由器则会生成从路由器自身的角度看到的完整网络地图。通过该地图,路由器可以在网络链路出现故障时快速确定备用的无环路径。
OSPF 不会自动在主网络边界总结。此外,Cisco 版本的OSPF 根据带宽来确定链路的开销。OSPF 根据此开销来确定最佳路径。链路的带宽越高,开销就越低。到目的设备的路径中开销最小的便是最理想的路径。
路由器优先根据带宽(而非跳数)的度量值来确定最短路径。OSPF 的管理距离是110,低于RIP,这是因为其度量的可信度和准确性较高。
OSPF的度量和收敛
OSPF 根据各条链路的带宽或速度来衡量链路的开销。特定目的网络的开销度量标准是所有
链路在该路径中的总开销。如果网络中有多条路径,则总开销最小的路径被列为首选路径并保存在路由表中。
OSPF 链路开销的计算公式为:
开销= 100,000,000 / 以bps 表示的链路带宽
公式中的带宽值取所配置的接口带宽。接口的带宽可通过show interfaces 命令来确定。
对于速度为100 Mbps 或更高的链路,例如快速以太网和千兆网络,使用上述公式会带来一个问题。上面的公式无视这两种链路之间的速度差异,两种链路算出的开销值均为1,因此尽管两者之间差距悬殊,却享受同等的优先级。要解决这个问题,请使用ip ospf cost命令手动配置接口的开销值。
某个区域内的OSPF 路由器会向其邻居通告它们的链路状态信息。路由器使用名为链路状态通告(LSA) 的消息通告此状态信息。
一旦收到描述区域内所有链路状态的LSA,OSPF 路由器便会使用SPF 算法(也称为Dijkstra 算法)生成拓扑树(即网络结构图)。每台运行该算法的路由器都会将自己列为其SPF 树的根。SPF 树从根开始确定通往每个目的地址的最短路径以及每条路径的总开销。
OSPF 链路状态或拓扑数据库会存储SPF 树信息。路由器会在路由表中为每个网络设定最短路径。
当所有路由器运行以下功能后,网络便达到收敛状态:
接收网络上每台目的设备的信息
利用SPF 算法处理此信息
更新各自的路由表
OSPF的邻居和邻接关系
在OSPF 网络中,在网络发生变动时将会发送链路状态更新信息。但路由器如何知道相邻路由器何时出现故障呢?OSPF 路由器会建立和维护与其它相连OSPF 路由器的邻居(或邻接)关系。邻接是高级邻居关系,邻接的路由器之间可以交换路由信息。路由器在邻居之间启动邻接关系时,将会开始交换链路状态更新信息。在链路状态数据库中同步视图后,路由器即达到FULL(完全)邻接状态。
在与其邻居达到完全邻接之前,路由器会经历几种状态变化。
Init(初始化状态)
2-Way(双向状态)
Exstart(预启动状态)
Exchange(交换状态)
Loading(加载状态)
Full(完全邻接)
OSPF 路由器使用Hello 协议开始建立和维护邻接关系。hello 协议通过组播地址224.0.0.5 向直接连接的OSPF 路由器发送很小的hello 数据包。这些数据包在以太网和广播链路上每10 秒发送一次,在非广播链路上则是每30 秒发送一次。hello 数据包中还包含路由器设置信息。这些设置包括hello 间隔、dead 间隔和网络类型,还可能包括身份验证类型和身份验证数据(若已配置)。任何两台路由器要组成邻接关系,其所有设置都必须一致。路由器会将找到的邻居邻接关系记录到OSPF 邻接数据库中。
FULL 是OSPF 路由器的正常状态。如果路由器陷入其它状态,则表明可能存在问题,譬如路由器的设置不匹配。唯一的例外是2-way 状态。在广播环境中,路由器只能与指定路由器(DR) 或备用指定路由器(BDR) 达到FULL 状态。可以看到的其它所有邻居均处于2-way 状态。
DR 和BDR 的作用是减少发送的更新数量,减少不必要的流量以及减少所有路由器的处理开销。通过要求所有路由器仅从DR 接收更新即可实现上述目的。在广播网段上只有一个DR 和BDR。所有其它路由器都必须连接到DR 和BDR。当某条链路出现故障时,包含该链路信息的路由器会使用组播地址224.0.0.6 将此信息发送给DR。DR 负责通过组播地址224.0.0.5 将此变化发布到其它所有OSPF 路由器上。除了减少通过网络发送的更新数量以外,此过程还可确保所有路由器从统一的源设备同时接收相同的信息。
BDR 确保不会出现单点故障。与DR 类似,BDR 会监听224.0.0.6 并接收发送到DR 的所有更新。如果DR 出现故障,则BDR 会立即接管DR 并选择新的BDR。任何未被选为DR 或BDR 的路由器均叫做DROther。
本地网络中路由器ID 最高的路由器将被选作DR。路由器ID 第二高的则被选作BDR。
路由器ID 是一个IP 地址,其确定方法如下:
1. 使用router-id 命令配置的值
2. 若未使用router-id 命令配置该值,则路由器ID 是任何环回接口上已配置的最大IP 地址
3. 若未配置环回接口,则路由器ID 是任何活动物理接口上的最大IP 地址
路由器ID 可以使用以下show 命令查看:
show ip protocols、show ip ospf 或show ip ospf interface 命令。