Skip to main content

9. UPDATE Message Handling (UPDATE 消息处理)

9. UPDATE Message Handling (UPDATE 消息处理)

UPDATE 消息只能在 Established 状态下接收。在任何其他状态下接收 UPDATE 消息是错误的。当接收到 UPDATE 消息时, 按照第 6.3 节的规定检查每个字段的有效性。

如果无法识别可选的非可传递属性, 则静默忽略它。如果无法识别可选的可传递属性, 则将属性标志字节中的 Partial 位 (第三个高位) 设置为 1, 并保留该属性以传播到其他 BGP 发言者。

如果识别了可选属性并且具有有效值, 则根据可选属性的类型, 在本地处理它, 保留它, 并在必要时更新它, 以便可能传播到其他 BGP 发言者。

如果 UPDATE 消息包含非空的 WITHDRAWN ROUTES 字段, 则应该从 Adj-RIB-In 中删除先前通告的路由 (其目标以 IP 前缀表示) 包含在此字段中。此 BGP 发言者应该运行其决策过程, 因为先前通告的路由不再可用。

如果 UPDATE 消息包含可行路由, 则将按如下方式使用此路由更新 Adj-RIB-In: 如果新路由的 NLRI 与 Adj-RIB-In 中当前存储的路由相同, 则新路由应该替换 Adj-RIB-In 中的旧路由, 从而隐式地从服务中撤回旧路由。否则, 如果 Adj-RIB-In 没有与新路由的 NLRI 相同的路由, 则应该将新路由放入 Adj-RIB-In。

一旦 BGP 发言者更新了 Adj-RIB-In, 发言者应该运行其决策过程。

9.1. Decision Process (决策过程)

决策过程通过将本地策略信息库 (Policy Information Base, PIB) 中的策略应用于其 Adj-RIBs-In 中存储的路由来选择路由以供后续通告。决策过程的输出是将向对等体通告的路由集; 所选路由将根据策略存储在本地发言者的 Adj-RIBs-Out 中。

此处描述的 BGP 决策过程是概念性的, 不必完全按照描述实现, 只要实现支持所描述的功能并且它们表现出相同的外部可见行为即可。

选择过程通过定义一个函数来形式化, 该函数将给定路由的属性作为参数, 并返回 (a) 表示路由偏好程度的非负整数, 或 (b) 表示此路由不符合安装到 Loc-RIB 的条件并将从下一阶段路由选择中排除的值。

为给定路由计算偏好程度的函数不得使用以下任何内容作为其输入: 其他路由的存在、其他路由的不存在或其他路由的路径属性。然后路由选择包括对每个可行路由单独应用偏好程度函数, 然后选择具有最高偏好程度的路由。

决策过程对 Adj-RIBs-In 中包含的路由进行操作, 并负责:

  • 选择发言者本地使用的路由

  • 选择要向其他 BGP 对等体通告的路由

  • 路由聚合和路由信息简化

决策过程分三个不同的阶段进行, 每个阶段由不同的事件触发:

a) 阶段 1 负责计算从对等体接收的每个路由的偏好程度。

b) 阶段 2 在阶段 1 完成时调用。它负责从所有可用路由中为每个不同的目标选择最佳路由, 并将每个选定的路由安装到 Loc-RIB 中。

c) 阶段 3 在 Loc-RIB 被修改后调用。它负责根据 PIB 中包含的策略将 Loc-RIB 中的路由传播到每个对等体。路由聚合和信息简化可以在此阶段中可选地执行。

9.1.1. Phase 1: Calculation of Degree of Preference (阶段1: 偏好度计算)

每当本地 BGP 发言者从对等体接收到通告新路由、替换路由或撤回路由的 UPDATE 消息时, 就会调用阶段 1 决策函数。

阶段 1 决策函数是一个单独的过程, 当它没有进一步的工作要做时完成。

阶段 1 决策函数在对 Adj-RIB-In 中包含的任何路由进行操作之前锁定它, 并在对其中包含的所有新路由或不可行路由进行操作后解锁它。

对于每个新接收的或替换的可行路由, 本地 BGP 发言者确定偏好程度如下:

如果路由是从内部对等体学到的, 则将 LOCAL_PREF 属性的值作为偏好程度, 或者本地系统根据预配置的策略信息计算路由的偏好程度。请注意, 后者可能导致形成持久的路由循环。

如果路由是从外部对等体学到的, 则本地 BGP 发言者根据预配置的策略信息计算偏好程度。如果返回值指示路由不符合条件, 则该路由可能不作为下一阶段路由选择的输入; 否则, 返回值必须用作任何 IBGP 重新通告中的 LOCAL_PREF 值。

此策略信息的确切性质以及所涉及的计算是本地事务。

9.1.2. Phase 2: Route Selection (阶段2: 路由选择)

阶段 2 决策函数在阶段 1 完成时调用。阶段 2 函数是一个单独的过程, 当它没有进一步的工作要做时完成。阶段 2 过程考虑 Adj-RIBs-In 中符合条件的所有路由。

阶段 2 决策函数在阶段 3 决策函数正在进行时被阻止运行。阶段 2 函数在开始其功能之前锁定所有 Adj-RIBs-In, 并在完成时解锁它们。

如果 BGP 路由的 NEXT_HOP 属性描述的地址无法解析, 或者如果将路由安装到路由表中它将变得无法解析, 则必须从阶段 2 决策函数中排除该 BGP 路由。

如果 BGP 路由的 AS_PATH 属性包含 AS 循环, 则应该从阶段 2 决策函数中排除该 BGP 路由。AS 循环检测通过扫描完整的 AS 路径 (如 AS_PATH 属性中指定) 并检查本地系统的自治系统编号未出现在 AS 路径中来完成。配置为接受 AS 路径中包含其自己的自治系统编号的路由的 BGP 发言者的操作不在本文档范围内。

AS 内的 BGP 发言者不做出会导致发生转发循环的关于路由选择的冲突决策至关重要。

对于 Adj-RIBs-In 中存在可行路由的每组目标, 本地 BGP 发言者标识具有以下特征的路由:

a) 到同一组目标的任何路由的最高偏好程度, 或

b) 是到该目标的唯一路由, 或

c) 是根据第 9.1.2.2 节中指定的阶段 2 打破平局规则选择的结果。

然后本地发言者应该将该路由安装到 Loc-RIB 中, 替换当前在 Loc-RIB 中保存的到同一目标的任何路由。当新的 BGP 路由安装到路由表中时, 必须注意确保从路由表中删除现在被认为无效的到同一目标的现有路由。新的 BGP 路由是否替换路由表中现有的非 BGP 路由取决于 BGP 发言者上配置的策略。

本地发言者必须从所选路由的 NEXT_HOP 属性确定立即下一跳地址 (见第 5.1.3 节)。如果立即下一跳或到 NEXT_HOP 的 IGP 成本 (其中 NEXT_HOP 通过 IGP 路由解析) 发生变化, 则必须再次执行阶段 2 路由选择。

请注意, 即使 BGP 路由不必使用立即下一跳安装到路由表中, 实现也必须注意, 在任何数据包沿 BGP 路由转发之前, 其关联的 NEXT_HOP 地址被解析为立即 (直接连接的) 下一跳地址, 并且此地址 (或多个地址) 最终用于实际的数据包转发。

无法解析的路由应该从 Loc-RIB 和路由表中删除。但是, 相应的无法解析的路由应该保留在 Adj-RIBs-In 中 (以防它们变得可解析)。

9.1.2.1. Route Resolvability Condition (路由可解析性条件)

如第 9.1.2 节所示, BGP 发言者应该从阶段 2 决策中排除无法解析的路由。这确保只有有效的路由安装在 Loc-RIB 和路由表中。

路由可解析性条件定义如下:

  1. 仅引用中间网络地址的路由 Rte1, 如果路由表包含至少一条可解析的路由 Rte2, 该路由匹配 Rte1 的中间网络地址并且不是递归解析 (直接或间接) 通过 Rte1, 则认为是可解析的。如果有多个匹配路由可用, 则应该仅考虑最长匹配路由。

  2. 引用接口 (有或没有中间地址) 的路由, 如果被引用接口的状态为 up 并且在此接口上启用了 IP 处理, 则认为是可解析的。

BGP 路由不引用接口, 但可以通过路由表中的路由解析, 这些路由可以是两种类型 (指定接口的路由或不指定接口的路由)。IGP 路由和直接连接网络的路由预计会指定出站接口。静态路由可以指定出站接口、中间地址或两者。

请注意, 在 BGP 发言者的路由表不包含与 BGP 路由的 NEXT_HOP 匹配的路由的情况下, BGP 路由被认为是无法解析的。相互递归路由 (相互解析或解析自身的路由) 也无法通过可解析性检查。

实现也不考虑如果将可行路由安装到路由表中将变得无法解析的路由也很重要, 即使它们的 NEXT_HOP 使用路由表的当前内容是可解析的 (此类路由的示例将是相互递归路由)。此检查确保 BGP 发言者不会在路由表中安装将被删除且不被发言者使用的路由。因此, 除了本地路由表稳定性之外, 此检查还改善了网络中协议的行为。

每当 BGP 发言者识别由于相互递归而无法通过可解析性检查的路由时, 应该记录错误消息。

9.1.2.2. Breaking Ties (Phase 2) (打破平局 (阶段2))

在其 Adj-RIBs-In 中, BGP 发言者可能有多条到同一目标且具有相同偏好程度的路由。本地发言者只能选择这些路由中的一条包含在关联的 Loc-RIB 中。本地发言者考虑具有相同偏好程度的所有路由, 包括从内部对等体接收的路由和从外部对等体接收的路由。

以下打破平局程序假设, 对于每个候选路由, 自治系统内的所有 BGP 发言者都可以确定到路由的 NEXT_HOP 属性描述的地址的路径成本 (内部距离), 并遵循相同的路由选择算法。

打破平局算法首先考虑到同一目标的所有同等优选路由, 然后选择要从考虑中删除的路由。一旦仅剩一条路由在考虑中, 算法就会终止。必须按指定的顺序应用标准。

几个标准使用伪代码描述。请注意, 所示的伪代码是为了清晰而选择的, 而不是为了效率。它不打算指定任何特定的实现。BGP 实现可以使用产生与此处描述的相同结果的任何算法。

a) 从考虑中删除所有在其 AS_PATH 属性中存在的 AS 编号数量最少的路由。请注意, 在计算此数字时, AS_SET 计为 1, 无论集合中有多少个 AS。

b) 从考虑中删除所有在其 Origin 属性中没有最低 Origin 编号的路由。

c) 删除具有较不优选的 MULTI_EXIT_DISC 属性的考虑路由。MULTI_EXIT_DISC 仅在从同一相邻 AS 学到的路由之间可比较 (相邻 AS 从 AS_PATH 属性确定)。没有 MULTI_EXIT_DISC 属性的路由被认为具有最低可能的 MULTI_EXIT_DISC 值。

这也在以下程序中描述:

       for m = all routes still under consideration
for n = all routes still under consideration
if (neighborAS(m) == neighborAS(n)) and (MED(n) < MED(m))
remove route m from consideration

在上面的伪代码中, MED(n) 是一个返回路由 n 的 MULTI_EXIT_DISC 属性值的函数。如果路由 n 没有 MULTI_EXIT_DISC 属性, 则该函数返回最低可能的 MULTI_EXIT_DISC 值 (即 0)。

类似地, neighborAS(n) 是一个返回接收路由的邻居 AS 的函数。如果路由是通过 IBGP 学到的, 并且另一个 IBGP 发言者没有始发该路由, 则它是另一个 IBGP 发言者从中学到路由的邻居 AS。如果路由是通过 IBGP 学到的, 并且另一个 IBGP 发言者要么 (a) 始发了该路由, 要么 (b) 通过聚合创建了该路由并且聚合路由的 AS_PATH 属性为空或以 AS_SET 开头, 则它是本地 AS。

如果在将 MULTI_EXIT_DISC 属性重新通告到 IBGP 之前删除它, 则仍然可以执行基于接收的 EBGP MULTI_EXIT_DISC 属性的比较。如果实现选择删除 MULTI_EXIT_DISC, 则如果执行 MULTI_EXIT_DISC 上的可选比较, 则必须仅在 EBGP 学到的路由之间执行。然后可以在删除 MULTI_EXIT_DISC 属性后将最佳 EBGP 学到的路由与 IBGP 学到的路由进行比较。如果从 EBGP 学到的路由的子集中删除 MULTI_EXIT_DISC, 并且所选的"最佳" EBGP 学到的路由不会删除 MULTI_EXIT_DISC, 则必须在与 IBGP 学到的路由的比较中使用 MULTI_EXIT_DISC。对于 IBGP 学到的路由, 必须在到达决策过程的此步骤的路由比较中使用 MULTI_EXIT_DISC。在与 IBGP 学到的路由的比较中包括 EBGP 学到的路由的 MULTI_EXIT_DISC, 然后删除 MULTI_EXIT_DISC 属性并通告该路由已被证明会导致路由循环。

d) 如果至少有一条候选路由是通过 EBGP 接收的, 则从考虑中删除所有通过 IBGP 接收的路由。

e) 从考虑中删除具有较不优选的内部成本的任何路由。路由的内部成本通过使用路由表计算路由的 NEXT_HOP 的度量来确定。如果路由的 NEXT_HOP 跳可达, 但无法确定成本, 则应该跳过此步骤 (等效地, 认为所有路由具有相等的成本)。

这也在以下程序中描述。

         for m = all routes still under consideration
for n = all routes in still under consideration
if (cost(n) is lower than cost(m))
remove m from consideration

在上面的伪代码中, cost(n) 是一个返回到路由的 NEXT_HOP 属性中给定地址的路径成本 (内部距离) 的函数。

f) 从考虑中删除除由具有最低 BGP 标识符值的 BGP 发言者通告的路由之外的所有路由。

g) 优选从最低对等体地址接收的路由。

9.1.3. Phase 3: Route Dissemination (阶段3: 路由传播)

阶段 3 决策函数在阶段 2 完成时调用, 或在发生以下任何事件时调用:

a) 当 Loc-RIB 中到本地目标的路由发生变化时

b) 当通过 BGP 之外的方式学到的本地生成路由发生变化时

c) 当建立了新的 BGP 发言者连接时

阶段 3 函数是一个单独的过程, 当它没有进一步的工作要做时完成。阶段 3 路由决策函数在阶段 2 决策函数正在进行时被阻止运行。

Loc-RIB 中的所有路由都根据配置的策略处理到 Adj-RIBs-Out 中。此策略可以排除 Loc-RIB 中的路由安装在特定 Adj-RIB-Out 中。路由不应该安装在 Adj-Rib-Out 中, 除非此路由描述的目标和 NEXT_HOP 可以由路由表适当地转发。如果 Loc-RIB 中的路由从特定 Adj-RIB-Out 中排除, 则该 Adj-RIB-Out 中先前通告的路由必须通过 UPDATE 消息从服务中撤回 (见 9.2)。

可以可选地应用路由聚合和信息简化技术 (见第 9.2.2.1 节)。

任何导致路由添加到 Adj-RIB-Out 而不也添加到本地 BGP 发言者的转发表的本地策略都不在本文档范围内。

当 Adj-RIBs-Out 和路由表的更新完成时, 本地 BGP 发言者运行 9.2 的 Update-Send 过程。

9.1.4. Overlapping Routes (重叠路由)

BGP 发言者可以向另一个 BGP 发言者传输具有重叠网络层可达性信息 (NLRI) 的路由。当一组目标在不匹配的多个路由中标识时, 发生 NLRI 重叠。因为 BGP 使用 IP 前缀编码 NLRI, 重叠将始终表现出子集关系。描述较小目标集的路由 (较长的前缀) 被称为比描述较大目标集的路由 (较短的前缀) 更具体; 类似地, 描述较大目标集的路由被称为比描述较小目标集的路由更不具体。

优先关系有效地将较不具体的路由分解为两部分:

  • 仅由较不具体路由描述的一组目标, 以及

  • 由较不具体和较具体路由的重叠描述的一组目标

重叠描述的目标集表示可行但当前未使用的较不具体路由的一部分。如果以后撤回更具体的路由, 则重叠描述的目标集仍然可以使用较不具体的路由到达。

如果 BGP 发言者接收重叠路由, 则决策过程必须根据配置的接受策略考虑两条路由。如果较不具体和较具体的路由都被接受, 则决策过程必须在 Loc-RIB 中安装较不具体和较具体的路由, 或者聚合两条路由并在 Loc-RIB 中安装聚合路由, 前提是两条路由具有相同的 NEXT_HOP 属性值。

如果 BGP 发言者选择聚合, 则它应该要么在 AS_SET 中包含用于形成聚合的所有 AS, 要么将 ATOMIC_AGGREGATE 属性添加到路由。此属性现在主要是信息性的。随着不支持无类别路由的 IP 路由协议的消除, 以及不支持无类别路由的路由器和主机实现的消除, 不再需要取消聚合。路由不应该被取消聚合。特别是, 携带 ATOMIC_AGGREGATE 属性的路由不得被取消聚合。也就是说, 此路由的 NLRI 不能更具体。沿着这样的路由转发不保证 IP 数据包实际上只会经过路由的 AS_PATH 属性中列出的 AS。

9.2. Update-Send Process (更新发送过程)

Update-Send 过程负责向所有对等体通告 UPDATE 消息。例如, 它将决策过程选择的路由分发给其他 BGP 发言者, 这些发言者可能位于同一自治系统或相邻自治系统中。

当 BGP 发言者从内部对等体接收 UPDATE 消息时, 接收 BGP 发言者不应该将该 UPDATE 消息中包含的路由信息重新分发给其他内部对等体 (除非发言者充当 BGP 路由反射器 [RFC2796])。

作为路由选择过程的阶段 3 的一部分, BGP 发言者已更新其 Adj-RIBs-Out。所有新安装的路由和所有没有替换路由的新不可行路由都应该通过 UPDATE 消息向其对等体通告。

如果 BGP 发言者从其 Adj-RIB-Out 通告给定的可行 BGP 路由会产生包含与先前通告的相同 BGP 路由的 UPDATE 消息, 则不应该通告。

Loc-RIB 中标记为不可行的任何路由都应该被删除。其自己的自治系统内可达目标的变化也应该在 UPDATE 消息中通告。

如果由于 UPDATE 消息的最大大小限制 (见第 4 节), 单个路由无法放入消息中, 则 BGP 发言者不得向其对等体通告该路由, 并且可以选择在本地记录错误。

9.2.1. Controlling Routing Traffic Overhead (控制路由流量开销)

BGP 协议约束路由流量 (即 UPDATE 消息) 的数量, 以限制通告 UPDATE 消息所需的链路带宽以及决策过程消化 UPDATE 消息中包含的信息所需的处理能力。

9.2.1.1. Frequency of Route Advertisement (路由通告频率)

参数 MinRouteAdvertisementIntervalTimer 确定 BGP 发言者向对等体通告和/或撤回到特定目标的路由之间必须经过的最短时间。此速率限制程序在每个目标的基础上应用, 尽管 MinRouteAdvertisementIntervalTimer 的值是在每个 BGP 对等体的基础上设置的。

BGP 发言者向通告到某些公共目标集的可行路由和/或撤回不可行路由的对等体发送的两条 UPDATE 消息必须至少相隔 MinRouteAdvertisementIntervalTimer。这只能通过为每个公共目标集保留单独的定时器来实现。这将是不必要的开销。任何确保从 BGP 发言者向通告到某些公共目标集的可行路由和/或撤回不可行路由的对等体发送的两条 UPDATE 消息之间的间隔至少为 MinRouteAdvertisementIntervalTimer, 并且还将确保间隔上有一个恒定上限的技术都是可接受的。

由于自治系统内需要快速收敛, 因此要么 (a) 用于内部对等体的 MinRouteAdvertisementIntervalTimer 应该短于用于外部对等体的 MinRouteAdvertisementIntervalTimer, 要么 (b) 本节中描述的程序不应该应用于发送给内部对等体的路由。

此程序不限制路由选择的速率, 而仅限制路由通告的速率。如果在等待 MinRouteAdvertisementIntervalTimer 过期期间多次选择新路由, 则应该在 MinRouteAdvertisementIntervalTimer 结束时通告最后选择的路由。

9.2.1.2. Frequency of Route Origination (路由始发频率)

参数 MinASOriginationIntervalTimer 确定报告通告 BGP 发言者自己的自治系统内更改的 UPDATE 消息的连续通告之间必须经过的最短时间。

9.2.2. Efficient Organization of Routing Information (路由信息的高效组织)

选择了它将通告的路由信息后, BGP 发言者可以利用几种方法以有效的方式组织此信息。

9.2.2.1. Information Reduction (信息简化)

信息简化可能意味着策略控制粒度的减少 - 在信息折叠后, 相同的策略将应用于等价类中的所有目标和路径。

决策过程可以通过以下任何方法可选地减少它将放入 Adj-RIBs-Out 的信息量:

a) 网络层可达性信息 (NLRI):

目标 IP 地址可以表示为 IP 地址前缀。在地址结构与自治系统管理员控制的系统之间存在对应关系的情况下, 将有可能减少 UPDATE 消息中携带的 NLRI 的大小。

b) AS_PATH:

AS 路径信息可以表示为有序的 AS_SEQUENCE 或无序的 AS_SET。AS_SET 用于第 9.2.2.2 节中描述的路由聚合算法。它们通过仅列出每个 AS 编号一次来减少 AS_PATH 信息的大小, 无论它在聚合的多个 AS_PATH 中出现了多少次。

AS_SET 意味着 NLRI 中列出的目标可以通过至少经过某些组成自治系统的路径到达。AS_SET 提供足够的信息来避免路由信息循环; 但是, 它们的使用可能会修剪潜在可行的路径, 因为这些路径不再以 AS_SEQUENCE 的形式单独列出。实际上, 这不太可能成为问题, 因为一旦 IP 数据包到达一组自治系统的边缘, BGP 发言者可能具有更详细的路径信息, 并且可以区分来自目标的各个路径。

9.2.2.2. Aggregating Routing Information (聚合路由信息)

聚合是以可以通告单个路由的方式组合多个不同路由的特征的过程。聚合可以作为决策过程的一部分发生, 以减少将放入 Adj-RIBs-Out 的路由信息量。

聚合减少了 BGP 发言者必须存储和与其他 BGP 发言者交换的信息量。可以通过将以下程序分别应用于相同类型的路径属性和网络层可达性信息来聚合路由。

具有不同 MULTI_EXIT_DISC 属性的路由不应该被聚合。

如果聚合路由在其 AS_PATH 属性中将 AS_SET 作为第一个元素, 则始发该路由的路由器不应该用此路由通告 MULTI_EXIT_DISC 属性。

具有不同类型代码的路径属性不能聚合在一起。相同类型代码的路径属性可以根据以下规则进行聚合:

NEXT_HOP: 当聚合具有不同 NEXT_HOP 属性的路由时, 聚合路由的 NEXT_HOP 属性应该标识执行聚合的 BGP 发言者上的接口。

ORIGIN attribute (ORIGIN 属性): 如果要聚合的路由中至少有一条具有值为 INCOMPLETE 的 ORIGIN, 则聚合路由必须具有值为 INCOMPLETE 的 ORIGIN 属性。否则, 如果要聚合的路由中至少有一条具有值为 EGP 的 ORIGIN, 则聚合路由必须具有值为 EGP 的 ORIGIN 属性。在所有其他情况下, 聚合路由的 ORIGIN 属性的值为 IGP。

AS_PATH attribute (AS_PATH 属性): 如果要聚合的路由具有相同的 AS_PATH 属性, 则聚合路由具有与每个单独路由相同的 AS_PATH 属性。

为了聚合 AS_PATH 属性, 我们将 AS_PATH 属性中的每个 AS 建模为元组 <type, value>, 其中"type"标识 AS 所属的路径段的类型 (例如, AS_SEQUENCE, AS_SET), "value"标识 AS 编号。如果要聚合的路由具有不同的 AS_PATH 属性, 则聚合的 AS_PATH 属性应该满足以下所有条件:

  • 聚合的 AS_PATH 中所有类型为 AS_SEQUENCE 的元组应该出现在要聚合的初始路由集中的所有 AS_PATH 中。

  • 聚合的 AS_PATH 中所有类型为 AS_SET 的元组应该至少出现在初始集中的一个 AS_PATH 中 (它们可能以 AS_SET 或 AS_SEQUENCE 类型出现)。

  • 对于聚合的 AS_PATH 中类型为 AS_SEQUENCE 的任何元组 X, 它在聚合的 AS_PATH 中在元组 Y 之前, X 在包含 Y 的初始集中的每个 AS_PATH 中在 Y 之前, 无论 Y 的类型如何。

  • 聚合的 AS_PATH 中不应该出现多次具有相同值的类型为 AS_SET 的元组。

  • 具有相同值的类型为 AS_SEQUENCE 的多个元组只有在与相同类型和值的另一个元组相邻时才可以出现在聚合的 AS_PATH 中。

实现可以选择符合这些规则的任何算法。至少, 兼容的实现应该能够执行以下满足上述所有条件的算法:

  • 确定要聚合的路由的所有 AS_PATH 属性共同的元组 (如上定义) 的最长前导序列。将此序列作为聚合的 AS_PATH 属性的前导序列。

  • 将要聚合的路由的 AS_PATH 属性中其余元组的类型设置为 AS_SET, 并将它们附加到聚合的 AS_PATH 属性。

  • 如果聚合的 AS_PATH 具有多个具有相同值的元组 (无论元组的类型如何), 则通过从聚合的 AS_PATH 属性中删除类型为 AS_SET 的元组来消除除一个这样的元组之外的所有元组。

  • 对于聚合的 AS_PATH 中的每对相邻元组, 如果两个元组具有相同的类型, 则将它们合并在一起, 只要这样做不会导致生成长度大于 255 的段。

附录 F 第 F.6 节提出了另一种满足条件并允许更复杂策略配置的算法。

ATOMIC_AGGREGATE: 如果要聚合的路由中至少有一条具有 ATOMIC_AGGREGATE 路径属性, 则聚合路由也应该具有此属性。

AGGREGATOR: 要聚合的路由中的任何 AGGREGATOR 属性都不得包含在聚合路由中。执行路由聚合的 BGP 发言者可以附加新的 AGGREGATOR 属性 (见第 5.1.7 节)。

9.3. Route Selection Criteria (路由选择标准)

通常, 在多个替代方案之间比较路由的附加规则不在本文档范围内。有两个例外:

  • 如果本地 AS 出现在正在考虑的新路由的 AS 路径中, 则该新路由不能被视为优于任何其他路由 (前提是发言者被配置为接受此类路由)。如果曾经使用这样的路由, 则可能导致路由循环。

  • 为了实现成功的分布式操作, 只能选择具有稳定性可能性的路由。因此, AS 应该避免使用不稳定的路由, 并且不应该对其路由选择做出快速、自发的更改。量化术语"不稳定"和"快速" (来自前面的句子) 将需要经验, 但原则是明确的。不稳定的路由可以被"惩罚" (例如, 通过使用 [RFC2439] 中描述的程序)。

9.4. Originating BGP routes (始发 BGP 路由)

BGP 发言者可以通过将通过其他方式 (例如, 通过 IGP) 获得的路由信息注入 BGP 来始发 BGP 路由。始发 BGP 路由的 BGP 发言者通过使它们通过决策过程 (见第 9.1 节) 来为这些路由分配偏好程度 (例如, 根据本地配置)。这些路由也可以作为更新过程的一部分分发给本地 AS 内的其他 BGP 发言者 (见第 9.2 节)。是否通过 BGP 在 AS 内分发非 BGP 获得的路由取决于 AS 内的环境 (例如, IGP 的类型), 并且应该通过配置进行控制。