Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

OSPF 简介

OSPF 概述

OSPF 是在单个自治系统 (AS) 内路由数据包的内部网关协议 (IGP)。OSPF 使用链路状态信息做出路由决策,使用最短路径优先 (SPF) 算法(也称为 Dijkstra 算法)进行路由计算。每个运行 OSPF 的路由器都会在整个 AS 或区域内发送大量链路状态通告,其中包含有关该路由器连接的接口和路由指标的信息。每个路由器都使用这些链路状态通告中的信息来计算每个网络的最低成本路径,并为该协议创建路由表。

Junos OS 支持 OSPF 版本 2 (OSPFv2) 和 OSPF 版本 3 (OSPFv3),包括虚拟链路、剩余区域和 OSPFv2 身份验证。Junos OS 不支持服务类型 (ToS) 路由。

OSPF 专为传输控制协议/互联网协议 (TCP/IP) 环境而设计,因此显式支持 IP 子网和外部派生路由信息的标记。OSPF 还提供路由更新的身份验证。

OSPF 仅根据 IP 包头中包含的目标 IP 地址路由 IP 数据包。OSPF 可快速检测拓扑变化,例如当路由器接口变得不可用时,并以最小的路由开销流量快速计算新的无环路。

注意:

在 SRX 系列防火墙上,如果 OSPF 接口下仅配置了一个链路保护,设备不会在转转发表中安装备用路由。当启用了按数据包的负载均衡作为变通方法时,设备不会同时观察到 OSPF 指标并通过这两个接口发送流量。

OSPF AS 可以由单个区域组成,也可以细分为多个区域。在单区域 OSPF 网络拓扑中,每个路由器都维护一个数据库,用于描述 AS 的拓扑。每个路由器的链路状态信息在整个 AS 中泛洪。在多区域 OSPF 拓扑中,每个路由器都有一个数据库,用于描述其区域的拓扑,并且每个路由器的链路状态信息会在整个区域内泛洪。所有路由器都会维护 AS 中其他区域的汇总拓扑。在每个区域内,OSPF 路由器具有相同的拓扑数据库。当 AS 或区域拓扑发生变化时,OSPF 可确保所有路由器拓扑数据库的内容快速融合。

可以对所有 OSPFv2 协议交换进行身份验证。OSPFv3 依靠 IPsec 来提供此功能。这意味着只有可信的路由器才能参与 AS 的路由。可以使用多种身份验证方案。为每个区域配置单一身份验证方案,这使得某些区域可以使用比其他区域更严格的身份验证。

外部派生的路由数据(例如,从 BGP 获知的路由)在整个 AS 中透明传递。这些外部派生数据与 OSPF 链路状态数据是分开保存的。每个外部路由都可以由播发路由器进行标记,从而能够在 AS 边界上的路由器之间传递附加信息。

注意:

默认情况下,Junos OS 与 RFC 1583 OSPF 版本 2 兼容。在 Junos OS 8.5 版及更高版本中,可以通过包含 no-rfc-1583 语句来禁用与 RFC 1583 的兼容性。有关详细信息,请参阅 示例:禁用 OSPFv2 与 RFC 1583 的兼容性

本主题介绍以下信息:

OSPF 默认路由优先级值

Junos OS 路由协议进程会为路由表接收的每个路由分配一个默认优先级值。默认值取决于路由的源。优先级值为 0 到 4,294,967,295 (232 – 1),值越低表示首选路由越高。 表 1 列出了 OSPF 的默认优先级值。

表 1:OSPF 的默认路由优先级值

如何学习路由

默认优先级

修改默认优先级的语句

OSPF 内部路由

10

OSPF 优先级

OSPF AS 外部路由

150

OSPF 外部优先级

OSPF 路由算法

OSPF 使用最短路径优先 (SPF) 算法(也称为 Dijkstra 算法)来确定到达每个目的地的路由。区域内的所有路由设备并行运行此算法,并将结果存储在各自的拓扑数据库中。具有多个区域接口的路由设备运行该算法的多个副本。本节简要总结了 SPF 算法的工作原理。

路由设备启动时,它会初始化 OSPF 并等待较低级别协议发出的路由器接口正常工作的指示。然后,路由设备使用 OSPF hello 协议,通过向其邻接方发送hello 数据包并接收其hello数据包来获取邻接方。

在广播或非广播多路接入网络(支持连接两个以上路由设备的物理网络)上,OSPF hello 协议会为网络选择指定的路由器。该路由设备负责发送描述网络的 链路状态通告 (LSA),从而减少网络流量和路由设备拓扑数据库的大小。

然后,路由设备会尝试与一些新获取的邻接方形成 邻接 。(在多接入网络上,只有指定的路由器和备份指定的路由器与其他路由设备形成邻接。邻接决定了路由协议数据包的分布。路由协议数据包仅在邻接上发送和接收,拓扑数据库更新仅沿邻接发送。建立邻接后,相邻路由器对同步其拓扑数据库。

路由设备发送 LSA 数据包,以定期以及在其状态发生变化时通告其状态。这些数据包包含有关路由设备邻接的信息,可以检测到非作路由设备。

路由设备使用可靠的算法,在整个区域内进行 LSA 泛洪,从而确保区域内的所有路由设备具有完全相同的拓扑数据库。每个路由设备使用其拓扑数据库中的信息来计算最短路径树(其自身为根)。然后,路由设备使用此树来路由网络流量。

到目前为止,对 SPF 算法的描述已经解释了该算法如何在单个区域内工作(区域内路由)。为了使内部路由器能够路由到区域外的目标(区域间路由),区域边界路由器必须将其他路由信息注入到区域中。由于区域边界路由器连接到骨干网,因此它们可以访问有关骨干网的完整拓扑数据。区域边界路由器使用此信息来计算到其区域外所有目标的路径,然后将这些路径播发给区域的内部路由器。

自治系统 (AS) 边界路由器会在整个 AS 内(剩余区域除外)发送有关外部自治系统的信息。区域边界路由器负责向所有 AS 边界路由器播发路径。

OSPF 三次握手

OSPF 通过跨启用 OSPF 的链路发送泛洪 LSA 来创建拓扑图。LSA 向相邻的 OSPF 接口通告存在支持 OSPF 的接口。LSA 交换使用三次握手在所有相邻的 OSPF 接口(邻居)之间建立双向连接,如 图 1 所示。

图 1:OSPF 三次握手 OSPF Three-Way Handshake

图 1 中,路由器 A 联机时会发送hello 数据包,所有支持 OSPF 的接口。路由器 B 接收数据包,确定路由器 B 可以接收来自路由器 A 的流量。路由器 B 向路由器 A 生成响应,以确认收到 hello 数据包。当路由器 A 收到响应时,将确定路由器 B 可以接收来自路由器 A 的流量。然后路由器 A 生成一个最终响应数据包,通知路由器 B 路由器 A 可以从路由器 B 接收流量。这种三次握手可确保双向连接。

当新的邻居添加到网络中或现有邻居失去连接时,拓扑图中的邻接会通过 LSA 的交换(或缺失)进行相应的修改。这些 LSA 仅播发网络中的增量更改,这有助于将网络上的 OSPF 流量降至最低。邻接将被共享,并用于在拓扑数据库中创建网络拓扑。

OSPF 版本 3

OSPFv3 是 OSPF 的修改版本,支持 IP 版本 6 (IPv6) 寻址。OSPFv3 与 OSPFv2 在以下方面的不同之处:

  • 所有邻接方 ID 信息都基于一个 32 位路由器 ID。

  • 协议按链路运行,而不是按子网运行。

  • 路由器和网络链路状态通告 (LSA) 不携带前缀信息。

  • 包括两种新的 LSA 类型:link-LSA 和 intra-area-prefix-LSA。

  • 泛洪范围如下:

    • 链路本地

    • 面积

  • 链路本地地址用于除虚拟链路以外的所有邻居交换。

  • 身份验证将被删除。IPv6 认证头依赖于 IP 层。

  • 数据包格式已更改如下:

    • 版本号 2 现在是版本号 3。

    • db 选项字段已扩展到 24 位。

    • 身份验证信息已被删除。

    • Hello 消息没有地址信息。

    • 包括两个新的选项位: RV6

  • 类型 3 汇总 LSA 已重命名为 inter-area-prefix-LSA

  • 类型 4 汇总 LSA 已重命名为 inter-area-router-LSA

OSPF 数据包概述

链路状态通告 (LSA) 数据包有多种类型。

本主题介绍以下信息:

OSPF 数据包标头

所有 OSPFv2 数据包都有一个通用的 24 字节报头,而 OSPFv3 数据包有一个通用的 16 字节报头,其中包含确定 OSPF 是否应接受数据包所需的所有信息。标头由以下字段组成:

  • 版本号 — 当前 OSPF 版本号。这可以是 23

  • 类型 — OSPF 数据包的类型。

  • 数据包长度 — 数据包的长度(以字节为单位),包括标头。

  • 路由器 ID — 数据包来源的路由器的 IP 地址。

  • 区域 ID — 数据包传输区域的标识符。每个 OSPF 数据包都与一个区域相关联。通过虚拟链路传输的数据包标有主干区域 ID 0.0.0.0。.

  • 校验和—Fletcher 校验和。

  • 身份验证 —(仅限 OSPFv2)身份验证方案和身份验证信息。

  • 实例 ID —(仅限 OSPFv3)当链路上配置了多个 OSPFv3 领域时使用的标识符。

hello 数据包

路由器会定期在所有接口(包括虚拟链路)上发送hello数据包,以建立和维护邻接方关系。hello 数据包在具有组播或广播功能的物理网络上进行组播,该功能支持动态发现相邻路由器。(在非广播网络上,无法动态发现邻接方,因此必须按照 示例:在非广播多路接入网络上配置 OSPFv2 接口中所述静态配置所有邻接方。)

Hello 数据包由 OSPF 标头加上以下字段组成:

  • 网络掩码 —(仅限 OSPFv2)与接口关联的网络掩码。

  • hello 间隔 — 路由器发送hello数据包的频率。共享网络上的所有路由器都必须使用相同的发送间隔。

  • 选项 — 路由器的可选功能。

  • 路由器优先级 — 路由器成为指定路由器的优先级。

  • 路由器失效间隔 — 在宣布路由器停机之前,路由器等待多长时间而未收到来自路由器的任何 OSPF 数据包。共享网络上的所有路由器都必须使用相同的路由器死区间隔。

  • 指定路由器 — 指定路由器的 IP 地址。

  • 备份指定路由器 — 备份指定路由器的 IP 地址。

  • 邻接方 — 在路由器无效间隔指定的时间内从中接收有效发送通知数据包的路由器的 IP 地址。

数据库说明数据包

初始化邻接时,OSPF 会交换描述拓扑数据库内容的数据库描述数据包。这些数据包由 OSPF 报头、数据包序列号和链路状态播发报头组成。

链路状态请求数据包

当路由器检测到其拓扑数据库的某些部分已过期时,它会向邻接方发送链路状态请求数据包,请求该数据库的精确实例。这些数据包由 OSPF 标头以及唯一标识路由器正在寻找的数据库信息的字段组成。

链路状态更新数据包

链路状态更新数据包在距离其源一跳远的地方携带一个或多个链路状态通告。路由器在支持组播或广播模式的物理网络上组播(泛洪)这些数据包。路由器确认所有链路状态更新数据包,如果需要重传,则单播发送重新传输的播发。

链路状态更新数据包由 OSPF 标头加上以下字段组成:

  • 播发数 — 此数据包中包含的链路状态播发数。

  • 链路状态通告 — 链路状态通告本身。

链路状态确认数据包

路由器发送链路状态确认数据包以响应链路状态更新数据包,以验证是否已成功接收更新数据包。单个确认数据包可以包含对多个更新数据包的响应。

链路状态确认数据包由 OSPF 报头和链路状态通告报头组成。

链路状态通告数据包类型

链路状态请求、链路状态更新和链路状态确认数据包用于可靠地对链路状态通告数据包进行泛洪。OSPF 发送以下类型的链路状态通告:

  • 路由器链路通告 — 由所有路由器发送,用于说明路由器到该区域链路的状态和成本。这些链路状态通告仅在单个区域内泛滥。

  • 网络链路通告 — 由指定的路由器发送,用于描述连接到网络的所有路由器。这些链路状态通告仅在单个区域内泛滥。

  • 汇总链路通告 — 由区域边界路由器发送,用于描述它们在其他区域中知道的路由。汇总链路通告有两种类型:一种是在目标为 IP 网络时使用,另一种是在目的为 AS 边界路由器时使用。汇总链路通告描述区域间路由,即到区域外但在 AS 之内的目标的路由。这些链路状态通告在播发的关联区域中泛滥。

  • AS 外部链路通告 — 由 AS 边界路由器发送,用于描述它们知道的外部路由。这些链路状态通告在整个 AS 内传播,剩余区域除外。

每种链路状态通告类型都描述了 OSPF 路由域的一部分。所有链路状态通告都会在整个 AS 中泛洪。

每个链路状态通告数据包都以一个通用的 20 字节报头开头。

了解 OSPF 外部指标

当 OSPF 从外部自治系统 (AS) 导出路由信息时,它会在路由中包含成本或 外部指标。OSPF 支持两种类型的外部指标:类型 1 和类型 2。这两个指标之间的区别在于 OSPF 计算路由成本的方式。

  • 类型 1 外部指标等同于链路状态指标,其中成本等于内部成本加上外部成本之和。这意味着,类型 1 外部指标包括到达目标的外部成本以及到达 AS 边界路由器的成本(指标)。

  • 类型 2 外部指标大于 AS 内部任何路径的成本。类型 2 外部指标仅使用到目标的外部成本,而忽略到达 AS 边界路由器的成本(指标)。

默认情况下,OSPF 使用 2 类外部指标。

1 类和 2 类外部指标可以同时存在于 AS 中。在这种情况下,类型 1 外部指标始终优先。

类型 1 外部路径始终优先于类型 2 外部路径。当所有路径都是 2 类外部路径时,始终首选播发的 2 类指标最小的路径。

受支持的 OSPF 和 OSPFv3 标准

Junos OS 实质上支持以下 RFC 和互联网草案,它们定义了 OSPF 和 OSPF 版本 3 (OSPFv3) 的标准。

  • RFC 1583,OSPF 版本 2

  • RFC 1765,OSPF 数据库溢出

  • RFC 1793, 扩展 OSPF 以支持按需电路

  • RFC 1850,OSPF 版本 2 管理信息库

  • RFC 2154, 带数字签名的 OSPF

  • RFC 2328,OSPF 版本 2

  • RFC 2370,OSPF 不透明 LSA 选项

    配置语句在[edit protocols rsvp interface interface-name ]层次结构级别上提供支持update-threshold

  • RFC 3101,OSPF 不完全剩余区域 (NSSA) 选项

  • RFC 3623, 平滑 OSPF 重启

  • RFC 3630,OSPF 版本 2 的流量工程 (TE) 扩展

  • RFC 4136,OSPF 刷新和泛洪 减少稳定拓扑

  • RFC 4203, 支持通用多协议标签交换 (GMPLS) 的 OSPF 扩展

    仅支持接口切换。

  • RFC 4552,OSPFv3 的身份验证/机密性

  • RFC 4576, 使用链路状态通告 (LSA) 选项位防止 BGP/MPLS IP 虚拟专用网络 (VPN) 中的环路

  • RFC 4577,OSPF 作为 BGP/MPLS IP 虚拟专用网络 (VPN) 的提供商/客户边缘协议

  • RFC 4811,OSPF 带外链路状态数据库 (LSDB) 重新同步

  • RFC 4812,OSPF 重启信号

  • RFC 4813,OSPF 链路本地信令

  • RFC 4915,OSPF 中的多拓扑 (MT) 路由

  • RFC 5185,OSPF 多区域邻接

  • RFC 5187,OSPFv3 平滑重启

  • RFC 5250,OSPF 不透明 LSA 选项

    注意:

    不支持在此 RFC 中作为“应该”要求提及的 RFC 4750。但是,支持 RFC 4750 的前身 RFC 1850。

  • RFC 5286,IP 快速重新路由的基本规范:无环路备用

  • RFC 5340, 用于 IPv6 的 OSPF (RFC 2740 因 RFC 5340 而过时)

  • RFC 5709,OSPFv2 HMAC-SHA 加密身份验证

  • RFC 5838,OSPFv3 中的地址族支持

  • 互联网草案draft-ietf-ospf-af-alt-10.txt, 支持 OSPFv3 中的地址族

  • 互联网草稿draft-katz-ward-bfd-02.txt、 双向转发检测

    不支持回显数据包的传输。

  • RFC 6549,OSPFv2 多实例扩展

  • RFC 8665, 用于分段路由的 OSPF 扩展

  • 互联网草案 draft-ietf-lsr-flex-algo-07.txt,IGP 灵活的算法

以下 RFC 不定义标准,而是提供有关 OSPF 和相关技术的信息。IETF 将其分类为“信息性”。

  • RFC 3137,OSPF 剩余路由器通告

  • RFC 3509,OSPF 区域边界路由器的替代实现

  • RFC 5309, 链路状态路由协议中通过 LAN 进行的点对点作

  • RFC 8920,OSPF 特定于应用的链路属性

  • RFC 8920,OSPFv2 前缀/链路属性通告