Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

OSPF 简介

OSPF 概述

OSPF 是一种内部网关协议 (IGP),用于在单个自治系统 (AS) 内路由数据包。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 你好 协议获取邻居,方法是向其邻居发送你好数据包并接收其你好数据包。

在广播或非广播多路访问网络(支持连接两个以上路由设备的物理网络)上,OSPF 你好 协议为网络选择指定的路由器。此路由设备负责发送描述网络的 链路状态通告 (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 在联机时向其所有启用 OSPF 的接口发送你好数据包。路由器 B 接收数据包,这确定路由器 B 可以从路由器 A 接收流量。路由器 B 生成对路由器 A 的响应以确认收到你好数据包。当路由器 A 收到响应时,它确定路由器 B 可以从路由器 A 接收流量。路由器 A 然后生成最终响应数据包,通知路由器 B 路由器 A 可以从路由器 B 接收流量。这种三次握手可确保双向连接。

当新邻居添加到网络或现有邻居失去连接时,拓扑图中的邻接将通过交换(或不存在)LSA 进行相应修改。这些 LSA 仅通告网络中的增量更改,这有助于最大程度地减少网络上的 OSPF 流量。邻接是共享的,并用于在拓扑数据库中创建网络拓扑。

OSPF 版本 3

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

  • 所有邻居 ID 信息都基于 32 位路由器 ID。

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

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

  • 包括两种新的 LSA 类型:链路 LSA 和区域内前缀 LSA。

  • 泛洪范围如下:

    • 链路本地

    • 面积

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

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

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

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

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

    • 已删除身份验证信息。

    • hello 消息没有地址信息。

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

  • 类型 3 汇总 LSA 已重命名 为区域间前缀 LSA

  • 类型 4 摘要 LSA 已重命名 为区域间路由器 LSA

OSPF 数据包概述

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

本主题介绍以下信息:

OSPF 数据包头

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

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

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

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

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

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

  • 校验和 - 弗莱彻校验和。

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

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

hello 数据包

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

hello 数据包由 OSPF 报头和以下字段组成:

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

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

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

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

  • 路由器失效间隔 — 在声明路由器关闭之前,路由器在未从路由器接收任何 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 1850(RFC 4750 的前身)。

  • 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 前缀/链路属性通告