BGP 路由优先级

了解 BGP 路由优先级

虽然 BGP 是当今使用最广泛的路由协议之一,不仅携带网络层可达性信息 (NLRI),还携带多种类型的 VPN 可达性信息,但值得注意的是,该协议并未指定 BGP 更新消息中信息的排序方式。这个决定留给实施。

在大型系统中,BGP 可能需要大量时间在系统之间交换其路由信息。在 BGP 启动、 路由刷新 操作期间以及协助 平稳重启时尤其如此。为了处理需要处理的大量信息,BGP路由处理是使用队列来完成的。出站路由被放置在输出队列中进行处理。Junos OS 16.1 版中引入了 BGP 路由优先级,允许用户确定 BGP 更新消息的优先级。BGP路由优先级是严格在输出队列上运行的过程,有助于对发送到BGP 对等体路由器的信息进行排序。

在默认配置中,即当不 output-queue-priority 存在覆盖优先级的配置或策略时,路由协议进程 (rpd) 会根据路由信息库 (RIB) 将 BGP 路由排队到输出队列中。RIB(也称为路由表)对应于特定地址族(如 inet.0)和路由实例表(如 vrf.inet.0)。在处理输出队列时,BGP 更新代码会刷新当前 RIB 的输出队列,然后再转到具有非空输出队列的下一个 RIB。

注意:
  • 即使理论上存在自动确定路由优先级的尝试,也不会尝试这样做。因此,对单个路由进行优先级排序完全由用户自行决定。

  • 如果更改对等组的 BGP 路由优先级,则 BGP 对等体会话将被重置。

BGP 路由优先级的用例

表 1 显示了将受益于路由优先级的路由类型,以及有关为什么它们将从中受益的一些说明。还包括这些类型路线的示例。在给定的大规模环境中为这些路由排定优先级,可以帮助路由器更快地对重要的路由变化做出响应。

表 1: BGP 路由优先级的用例

路由或更新类型

注释

示例

用于将 BGP 下一跃点解析为立即转发下一跃点的前缀

应尽快更改这些前缀。

  • 主机路由

  • 作为递归解析要求一部分的前缀

用于隧道端点的路由

GRE 或 MPLS 等隧道端点通常用作 BGP 下一跃点。

BGP 标记的单播路由

对协议功能的运行至关重要的路由类型

对于某些 VPN 协议,某些路由类型用于触发协议内的时间敏感型更改。必须尽快更改这些路线。

  • MVPN 源主动自动发现(类型 5)

  • 多宿主 VPLS 站点

服务提供商基础架构路由

这些路由对于服务提供商开展业务的能力至关重要。如果没有准确和最新的路由,服务提供商可能无法提供其部分服务产品。

  • 内部管理网络

  • 网络操作前缀

  • DNS 资源

网络拓扑变化

在简单的路由刷新之前,应先确定这些优先级。

  • 新路由器加入网络

  • 从网络中移除的路由器

BGP 路由优先级的属性

Junos OS 中的 BGP 路由优先级是使用一组 17 个优先级(带编号)的输出队列来实现的,这些队列由用户可配置的令牌机制提供服务。本节介绍输出队列的优先级排序、令牌系统的操作以及向队列分配路由的方法。

优先级输出队列

表 2 显示了可用的输出队列及其在优先级系统中的功能。优先级系统采用传统的低、中和高优先级等级运行,其中 1 为最低优先级,16 为最高优先级。

表 2:优先输出队列

队列

功能

加急

这是优先级最高的输出队列。在刷新输出队列时,可以保证此类中的路由进行部分输出队列处理。此队列没有编号,在配置中以其名称来引用。

1(最低优先级)

这是优先级最低的输出队列。这是默认优先级队列,这意味着默认情况下,没有通过自动协议确定或用户策略进行显式队列分配的路由将在此队列中放置。默认情况下,路由刷新消息会放置在此队列中。

2 - 16(低优先级 - 高优先级)

这些输出队列的优先级范围从最低优先级 (2) 到最高优先级 (16)。系统会根据用户策略或 BGP 对等体配置为它们分配路由。优先级较高的输出队列中的路由可以抢占优先级较低队列中的路由。

为队列分配路由

可以通过设置和分配 BGP 导出策略来完成将路由分配给各个队列。这意味着路由优先级在每个 BGP 对等体组以及 BGP 对等体组内的特定邻接方配置中可能有所不同。您还可以使用策略语句的操作部分将路由分配给队列。通过策略语句的操作将路由分配给队列将覆盖 BGP 配置所做的分配。

将路由分配给队列时

只有在路由处理过程中,才会将优先路由添加到其各自的队列中。这通常发生在以下条件下:

  • 当从已建立的 BGP 邻接方接收路由时。

  • 在路由表遍历期间,例如在重新配置或初始建立对等方期间。

路由表遍历根据系统的内部路由表顺序在表中按顺序处理路由。例如, inet.0、 inet6.0、 等。此内部顺序是预先确定的,操作员无法修改。

如果优先级较高的路由驻留在顺序稍后处理的路由表中,则在进程较早遇到的优先级较低的路由之后,可能会将这些路由添加到队列中。

工作令牌机制

令牌对应于创建 BGP 更新消息的工作。所有队列都分配了存储在存储桶中的令牌。给定存储桶中的令牌数量可由用户配置。通过这种方式,用户可以制定策略,允许以他们喜欢的比例为其路线提供服务。优先级调度程序的配置在层次结构级别的 [edit protocols bgp] BGP 内全局完成。默认情况下,所有优先级队列的存储桶中至少有 1 个令牌,以确保配置错误的优先级不会耗尽。

了解队列优先级和公平性

BGP路由优先级使用的方案侧重于两个要素:公平性和优先级:

  • 公平性意味着,当任何给定队列中有工作要做时,其他队列保证在某个时间点完成一些工作。每个队列允许完成多少工作取决于分配给每个优先级的令牌数。

  • 优先级是指当有竞争性工作和公平性得到保证时,总是选择更重要的工作。

例如,假定三个优先级等级:低、中和高。这些可以分别分配给队列 1、2 和 3。或者,可以将它们分配到队列 3、6 和 9。为了公平起见,如果决定高优先级获得 50% 的可用工作,中等获得 35%,低获得剩余的 15%,则可以将令牌分配为 50 到高、35 到中和 15 到低。或者,可以将令牌分配为 5 到高、4 到中和 2 到低。您可以为 17 个队列中的任何一个分配介于 1 到 100 之间的任意值。单个队列中的令牌数与所有队列中的令牌总数的比率给出了每个队列中将完成的工作的百分比。

当工作出现在队列中,而令牌正在被工作调度程序在另一个队列中使用时,优先级是最重要的。 表 3 显示了这方面的一个示例的起点。

表 3:队列和令牌

优先级队列(队列号)

分配给队列的令牌数

队列中剩余的令牌数

队列中的条目数

高 (9)

50

50

0

中等 (6)

35

15

5000

低 (3)

15

15

10000

如果我们假设工作调度程序正在处理中等队列(队列编号 6)并已花费 20 个令牌,那么在中等队列中的剩余条目上还剩下 15 个令牌要花费,在低优先级队列中还剩下 15 个令牌要用。如果在下次运行工作调度程序之前有 5 个条目到达加急队列中,那么将首先发送这 5 个条目,因为加急队列中还剩下 50 个令牌。

队列服务过程

队列服务过程按 BGP 对等体组运行,每个组维护自己的令牌存储桶。

  • 每个优先级的令牌存储桶从配置的令牌数或默认值 1 开始。

  • 每次从队列中提取路由条目以启动 BGP 更新时,都会从该队列中减去一个令牌。

  • 虽然加急队列具有令牌,但所有其他队列条目都是从加急队列中抽取的,但须遵守路由打包规则。

  • 条目从具有最高优先级的队列中获取。这意味着,如果在队列服务机制的运行之间将条目添加到优先级较高的队列中,并且该优先级较高的队列中有可用的令牌,则首先发送优先级较高队列中的新条目,从而抢占优先级较低队列中的条目。如果在新条目到达时,优先级较高的队列没有可用的工作令牌,则在下一次令牌刷新之前不会发送新条目。

  • 在服务完所有优先级队列(任何队列中没有剩余条目)或所有令牌耗尽后,将刷新令牌。

示例:配置 BGP 输出优先级调度器和全局地址族优先级

此示例说明如何配置和测试系统范围的 BGP 路由优先级调度器。

要求

此示例使用以下硬件和软件组件:

  • 运行 Junos OS 16.1 或更高版本的 MX 系列路由器 (R1)

在配置 BGP 路由优先级调度程序之前,请确保路由器上运行 BGP 协议。

概述

BGP路由优先级调度程序用于控制路由优先级系统的17个输出队列内完成的工作量。系统使用一组 17 个优先级输出队列,每个路由实例分配了工作令牌。默认情况下,所有 17 个优先输出队列(1-16 和加急)都分配了 1 个令牌。可以将 1 到 100 之间的任意数量的令牌分配给 17 个队列中的每个队列。将令牌分配给队列允许您平衡在队列内的路由上执行的工作量。此外,可以通过将每个关键字分配给特定的编号输出队列来配置高、中和低优先级队列的默认设置。在此示例中,我们将使用不同数量的工作令牌配置 17 个优先级队列中的每一个,我们还为 inet 单播路由配置全局输出优先级,并通过设置一些 BGP 组来覆盖全局优先级设置来演示继承。

配置

  • 分配给 update-tokens 17 个输出队列中的每一个。

  • 指定将哪些编号队列用作默认 high、 medium和 low 优先级队列。

  • 为路由配置全局输出优先级 inet unicast 。

  • 配置名为 test1 的 BGP 组,该组将显示组替代功能。

  • 配置名为 test2 的 BGP 组,该组将显示全局继承。

CLI 快速配置

要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层次结构级别的 [edit] CLI 中。

配置单个输出优先级队列

分步程序

下面的示例要求您在各个配置层级中进行导航。有关导航CLI的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用CLI编辑器。

  1. 将更新令牌分配给 17 个优先输出队列中的每一个队列

配置用于高、中、低优先级路由更新的默认队列

分步程序

结果

要确认配置,请在操作模式下发出命令 show bgp output-scheduler :

为路由族配置全局输出优先级

过程

分步程序
  1. 为路由配置inet unicast全局output-queue-priority:

配置名为 test1 的 BGP 组

过程

分步程序
  1. 配置组 test1 以覆盖全局输出优先级,并包括一个覆盖该组的邻接方和一个不覆盖该组的邻接方。

配置名为 test2 的 BGP 组

分步程序
  1. 将 BGP 组 test2 配置为接受全局默认值。

验证

验证 BGP 输出调度器配置

目的

要验证 BGP 输出调度器的配置,请在操作模式下发出 show bgp output-scheduler 命令。

行动

意义

输出显示,输出调度器配置成功地向每个输出队列应用了适当数量的令牌,并且高、中和低优先级关键字已分配给正确的输出队列。

验证组配置、组覆盖和邻接方覆盖

目的

要验证配置的组是否演示组覆盖、邻接方覆盖和继承,请在操作模式下发出 show bgp group group-name 命令。

行动
意义

输出显示,对等方 224.223.2.2 的输出队列优先级为 7,路由刷新优先级为 8,撤销优先级已加速。邻居 224.223.1.1 的输出队列优先级为 4,路由刷新优先级为 6,撤销优先级是家族 inet unicast的默认设置,即 3。

验证从全局优先级设置继承

目的

要验证未配置为覆盖全局 BGP 路由优先级设置的组,请在操作级别发出 show bgp group group-name 命令。

行动
意义

输出显示,组中test2路由的inet unicast默认路由优先级与全局配置匹配。

示例:使用 BGP 路由优先级控制路由表收敛

以下示例配置 BGP 路由优先级,以便允许 inet labeled-unicast 路由在路由之前 inet unicast 收敛。

要求

此示例使用以下硬件和软件组件:

  • 运行 Junos OS 16.1 或更高版本的 MX 系列路由器 (R1) 这将是本示例的重点。

  • 第二台路由器 (R2) 配置为与 R1 的内部 BGP 对等体。

  • 用于填充 R1 路由表的 BGP 路由反射器 (RR)。在此示例中,我们不配置路由反射器。

概述

BGP 路由优先级功能旨在允许在路由器中对出站 BGP 更新消息进行优先级排序。使用 BGP 路由优先级使用户能够确保在不太重要的 BGP 路由更新(如路由刷新更新)之前发送更重要的 BGP 路由更新,例如 GRE 或 MPLS 隧道端点更改。

在此示例中,我们将配置 R1 以将路由更新到 R2 视为inet labeled-unicast优先级inet unicast高于路由更新。为此,我们将 R2 路由器配置为接受来自其对等路由器 R1 的路由。inet unicast inet labeled-unicast然后,我们将inet.0从路由反射器填充 R1 上的路由表,并使用 import 将rib-group该表的一部分导入到表inet.3中labeled-unicast。由于路由在 R1 上排队,我们可以通过观察 RIB 中的inet.3路由是否在 RIB 中的inet.0其余路由之前被刷新来验证操作。

配置 BGP 路由优先级

将 R2 配置为 R1 的 BGP 对等体。

在 R1 上:

  • 将路由器 R2 配置为路由器 R1 的对等方。

  • 创建一个名为 reflector 的 BGP 组,用于从路由反射器获取 Internet 路由。

  • 创建一个名为 internal 的 BGP 组,用于将标记的单播流量分配给优先级更高的输出队列。

  • 创建一个 RIB 组,从反射器接收的路由将导入到该组中。

  • 创建用于确定将 RIB 的 inet.0 哪个部分导入 RIB 组的策略。

CLI 快速配置

要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层次结构级别的 [edit] CLI 中。

路由器 R2

路由器 R1

过程

分步程序

下面的示例要求您在各个配置层级中进行导航。有关导航CLI的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用CLI编辑器。

要配置 R2:

  1. 配置名为 internal 的 BGP 组。

分步程序

要配置 R1:

  1. 配置一个名为 reflector 的 BGP 组,用于从 RR 接收路由。

  2. 配置名为 internal 的 BGP 组

  3. 配置名为 into3 的 RIB 组

  4. 配置名为 match-long 的路由策略

  5. 配置名为 match-all 的路由策略

验证

验证邻居更新是否已正确分配优先级

目的

确认路由更新已放置在正确的队列中,以及队列是否正在更新。

行动

要查看为 BGP 邻接方 192.0.2.2 排队的路由更新,请在操作模式下发出命令 show bgp neighbor output-queue 192.0.2.2 。输出显示,inet-单播路由在 inet-labeled-单播路由之前播发。

意义

输出显示 show bgp neighbor output-queue 192.0.2.2 ,标记的单播路由更新已放置在优先级 2 输出队列中,并且优先级 2 输出队列在优先级 1 输出队列中的单播路由更新之前已清空。