首页 > 编程笔记 > TCP/IP笔记 阅读:19

OSPF路由协议详解(新手必看)

OSPF 协议是目前广泛使用的一种动态路由协议,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持 VLSM 和汇总、层次区域划分等优点。

在网络中使用 OSPF 协议后,大部分路由将由 OSPF 协议自行计算和生成,无须网络管理员手动配置。当网络拓扑发生变化时,OSPF 协议可以自动计算、更正路由,极大地方便了网络管理。

RIP 是一种基于距离矢量路由算法的路由协议,存在收敛速度慢、易产生路由环路、可扩展性差等问题,目前已逐渐被 OSPF 协议所取代。

OSPF协议概述

OSPF 协议是一种链路状态路由协议。每个路由器负责发现、维护与邻居路由器的关系,描述已知的邻居列表和链路状态更新(Link State Update,LSU)报文,通过可靠的泛洪机制及与 AS 内其他路由器的周期性交互,学习到整个 AS 的网络拓扑结构,并通过 AS 边界的路由器注入其他 AS 的路由信息以得到整个网络的路由信息。每隔一个特定时间或当链路状态发生变化时,重新生成链路状态广播(Link State Advertisement,LSA)数据报,路由器通过泛洪机制将新的 LSA 通告出去,以便实现路由实时更新。

OSPF 协议是一种内部网关协议,用于在单一 AS 内决策路由,它是基本链路状态的路由协议。链路状态是指路由器端口或链路的参数,这些参数是端口物理条件,包括端口是 Up 还是 Down 状态、端口的 IP 地址、分配给端口的子网掩码、端口所连接的网络及路由器进行网络连接的相关费用。

OSPF 路由器可与其他路由器交换信息,但交换的不是路由而是链路状态,OSPF 路由器不是告知其他路由器可以到达哪些网络及距离是多少,而是告知它们的网络链路状态、这些端口所连接的网络及使用这些端口的开销。

各个路由器都有其自身的链路状态,称为本地链路状态,这些本地链路状态在OSPF路由域内传播,直到所有的 OSPF 路由器都有完整而等同的链路状态数据库(Link State Database,LSDB)为止。一旦每个路由器都接收到所有的链路状态,每个路由器就可以构造一棵“树”,以它们自己为根,而分支表示到AS中所有网络距离最短的或开销最低的路由。

OSPF 协议通常将规模较大的网络划分成多个 OSPF 区域,要求路由器与同一区域内的路由器交换链路状态,并要求在区域边界路由器(Area Border Router,ABR)上交换区域内的汇总链路状态,这样不但可以减少传播的信息量,还可使最短路径计算强度减小。

在划分区域时,必须要有一个骨干区域(区域 0),其他非 0 或非骨干区域与骨干区域必须要有物理或逻辑连接。当有物理连接时,必须有一个路由器的一个端口在骨干区域,而另一个端口在非骨干区域。

当非骨干区域不可能物理连接到骨干区域时,必须定义一个逻辑或虚拟链路。虚拟链路由两个端点和一个传输区来定义:
OSPF 协议的协议号为 89,采用组播方式进行 OSPF 包交换,组播地址为 224.0.0.5(全部 OSPF 路由器)和2 24.0.0.6(指定路由器)。

OSPF协议的特点

1) 无环路

OSPF 协议是一种基于链路状态的路由协议,它从设计上就保证了无路由环路。

OSPF 协议支持区域的划分,区域内部的路由器使用最短路径优先(Shortest Path First,SPF)算法保证了区域内部无环路。OSPF协议还利用区域间的连接规则保证了区域之间无路由环路。

2) 收敛速度快

OSPF 协议支持触发更新,能够快速检测并通告 AS 内的拓扑变化。

3) 扩展性好

OSPF 协议可以解决网络扩容带来的问题。当网络中路由器越来越多,路由信息流量急剧增长的时候,OSPF 协议可以将每个 AS 划分为多个区域,并限制每个区域的范围。

OSPF 协议分区域的特点使得其特别适用于大中型网络。

4) 提供认证功能

OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。

5) 具有更高的优先级和可信度

在 RIP 中,路由的管理距离值是 100;而 OSPF 协议具有更高的优先级和可信度,其管理距离值为 10。

OSPF协议的工作原理

1) 邻居(Neighbor)与邻接状态关系

下图所示为邻居与邻接状态关系,两个关系建立的过程如下:


图 1 邻居与邻接状态关系


Router ID 是一个 32 位的值,它唯一标识了 AS 内的路由器,网络管理员可以为每台运行 OSPF 协议的路由器手动配置一个 Router ID。如果未手动配置,则设备会按照以下规则自动选择 Router ID:
在为一台运行 OSPF 协议的路由器配置新的 Router ID 后,可以在路由器上通过重置 OSPF 进程来更新 Router ID。通常建议手动配置 Router ID,以防止 Router ID 因端口地址的变化而改变。

运行 OSPF 协议的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前,路由器之间需要建立邻接关系:

OSPF协议工作原理

OSPF 协议要求每台运行 OSPF 的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。

OSPF 协议的收敛过程从 LSA 泛洪开始,LSA 中包含路由器已知的端口 IP 地址、掩码、开销和网络类型等信息。收到 LSA 的路由器都可以根据 LSA 提供的信息建立自己的 LSDB,并在 LSDB 的基础上使用 SPF 算法进行运算,建立起到达每个网络的“最短路径树”。最后,通过最短路径树得出到达目标网络的最优路由,并将其加入路由表。

OSPF 协议的工作原理如下图所示:


图 2 OSPF 协议的工作原理

OSPF协议的开销

OSPF 协议基于端口带宽计算开销,计算公式如下:
端口开销=带宽参考值÷带宽
带宽参考值可配置,默认为 100Mbit/s。因此,一个 64kbit/s 端口的开销为 1562,一个 E1 端口(2.048 Mbit/s)的开销约为 48。

可以通过“bandwidth-reference”命令调整带宽参考值,从而改变端口开销,带宽参考值越大,得到的开销越准确。在支持 10Gbit/s 的情况下,推荐将带宽参考值提高到 10000Mbit/s 来分别为 1 Gbit/s、10 Gbit/s 和 100Mbit/s 的链路提供 1、10 和 100 的开销。

注意,配置带宽参考值时,需要在整个 OSPF 网络中统一进行调整。另外,还可以通过“ospf cost”命令来手动为一个端口调整开销,开销值的范围是 1~65535,默认值为 1。

OSPF路由区域报文类型

OSPF 协议报文信息用来保证路由器之间可互相传播各种信息,OSPF 协议报文共有 5 种报文类型,如下表所示:

表:OSPF 协议报文的类型
报文类型 功能描述
Hello 报文 周期性发送,发现和维护 OSPF 邻居关系
DD报文 邻居间同步数据库内容
LSR报文 向对方请求所需要的 LSA 报文
LSU报文 向对方通告 LSA 报文
LSACK报文 对收到的 LSA 报文信息进行确认

任意一种报文都需要加上 OSPF 协议的报头,最后封装在 IP 中传输。一个 OSPF 协议报文的最大长度为 1500 字节,OSPF 协议报头格式如下图所示。OSPF 协议直接运行在 IP 之上,协议号为 89。


图 3 OSPF协议报头格式

1) Hello报文

常用的一种报文,用于发现和维护邻居关系,并在广播和 NBMA 类型的网络中选择指定路由器(Designated Router,DR)和备份指定路由器(Backup Designated Router,BDR)。

2) DD报文

两台路由器进行 LSDB 同步时,用 DD 报文来描述自己的 LSDB;DD 报文的内容包括 LSDB 中每一条 LSA 报文的头部(LSA 报头可以唯一标识 LSA 报文)。LSA 报头只占一条 LSA 报文的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量。

3) LSR报文

两台路由器互相交换 DD 报文之后,知道了对端的路由器有哪些 LSA 报文是本地 LSDB 缺少的,这时需要发送 LSR 报文向对方请求缺少的 LSA 报文。LSR 报文中只包含所需要的 LSA 报文的摘要信息。

4) LSU报文

用来向对端路由器发送所需要的 LSA 报文。

5) 链路状态确认(Link State Acknowledgment,LSACK)报文

用来对接收到的 LSU 报文进行确认。

DR与BDR选择

含有至少两个路由器的广播型网络和 NBMA 网络中都有一个 DR 和 BDR。DR 和 BDR 可以减少邻接关系的数量,从而减少链路状态信息及路由信息的交换次数,这样可以节省带宽,缓解路由器处理的压力。

一个既不是 DR 也不是 BDR 的路由器,只与 DR 和 BDR 形成邻接关系并交换链路状态信息及路由信息,这样就大大减少了大型广播型网络和 NBMA 网络中的邻接关系的数量。在没有 DR 的广播网络中,邻接关系的数量可以根据公式 n(n−1)÷2 计算得出,n 代表运行 OSPF 协议的路由器端口的数量。


图 4 DR与BDR选择

如上图所示,所有路由器之间有 10 个邻接关系。当指定了 DR 后,所有的路由器会与 DR 建立起邻接关系,DR 将成为该广播网络中的中心点。BDR 在 DR 发生故障时接管其业务,一个广播型网络中的所有路由器必须同 BDR 建立邻接关系。

完成邻居发现之后,路由器会根据网段类型进行 DR 选择。在广播型网络和 NBMA 网络中,路由器会根据参与选择的每个端口的优先级进行 DR 选择。

优先级的取值范围为 0~255,值越大优先级越高。默认情况下,端口优先级为 1。如果一个端口优先级为 0,那么该端口将不会参与 DR 或者 BDR 的选择。如果优先级相同,则比较 Router ID,值越大优先级越高。

为了给 DR 做备份,每个广播型网络和 NBMA 网络还要选择一个 BDR。BDR 也会与网络中的所有路由器建立邻接关系。为了维护网络中邻接关系的稳定性,如果网络中已经存在 DR 和 BDR,则新添加进该网络的路由器不会成为 DR 和 BDR,不管该路由器的优先级是否最高。

如果当前 DR 发生故障,则当前 BDR 自动成为新的 DR,并在网络中重新选择 BDR;如果当前 BDR 发生故障,则 DR 不变,并重新选择 BDR。这种选择机制的目的是保持邻接关系的稳定性,使拓扑结构的改变对邻接关系的影响尽量小。

OSPF区域划分

OSPF 协议支持将一组网段组合在一起,这样的一个组合称为一个区域,划分 OSPF 区域可以缩小路由器的 LSDB 规模,减少网络流量。区域内的详细拓扑信息不向其他区域发送,区域间传输的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。

每个区域都有自己的 LSDB,不同区域的 LSDB 是不同的。路由器会为每一个自己连接到的区域维护一个单独的 LSDB。由于详细的链路状态信息不会被发布到区域以外,因此 LSDB 的规模被大大缩小了。

OSPF 区域划分如下图所示:


图 5 OSPF区域划分

Area 0 为骨干区域,为了避免产生区域间路由环路,非骨干区域之间不允许直接相互发布路由信息,因此,每个区域必须连接到骨干区域。

ABR 是运行在区域之间的路由器,它包含所有相连区域的 LSDB。自治系统边界路由器(Autonomous System Boundary Router,ASBR)是指和其他 AS 中的路由器交换路由信息的路由器,它会向整个 AS 通告 AS 外部路由信息。

在规模较小的公司网络中,可以把所有的路由器划分到同一个区域中,同一个 OSPF 区域的路由器中的 LSDB 是完全一致的。OSPF 区域号可以手动配置。为了便于将来的网络扩展,推荐将该区域号设置为 0,即骨干区域。

相关文章