什么情况下会触发AS广播BGP撤销消息?

网络工程 bgp
2021-07-21 17:03:47

我对BGP公告的撤销机制不是很熟悉,欢迎大家提出意见。

假设 AS1 向 AS2 广播一条通向其前缀的 AS 路径,并且 AS2 将该公告转发给全世界。

  1. AS2 在什么情况下撤回那个 BGP 声明?
  2. 如果 AS1 广播另一个 BGP 更新,但被 AS2 内部策略(例如,循环检测)丢弃并且没有转发到世界,那么 AS2 路由表中的原始 AS 路径和​​流向 AS1 前缀的流量会发生什么变化?
1个回答

让我们考虑以下简单的拓扑结构,为了简单起见,我们假设每个自治系统 (AS) 由单个 BGP 路由器组成:

  AS1
     \
      AS3--AS3
     /
  AS2

现在,让我们假设 AS3 收到了两个 BGP 更新(一个来自 AS1,一个来自 AS2),每个都包含相同前缀 P 的广告。

AS3 将它收到的路由存储在称为 Adj-RIB-In(每个邻接的输入路由信息库)的数据库中。因此,AS3 将在两个 Adj-RIB-In 表中具有前缀 P 的路由:一个用于 AS1,另一个用于 AS2。

AS3首先应用入站策略:它可能会过滤掉一些接收到的广告,或者它可能会修改接收到的广告的一些属性。

作为实现的问题(RFC 不讨论实现),pre-inbound-policy 和 post-inbound-policy 通常都存储在 Adj-RIB-In 中。这允许操作员使用 CLI show 命令查看 pre-inbound-policy 和 post-inbound-policy 的路由。它还允许运营商更改入站策略,而不必要求邻居重新发送所有路由(这称为软刷新)。

如果入站策略拒绝从某个邻居接收到的前缀 P 的路由,那么它将不在 Adj-RIB-In 中(或至少不在后策略 Adj-RIB-In 中)。因此,它不会成为成为最佳路由的候选者(如下所述),不会安装在转发路径中(也如下所述),也不会通告给上游邻居(您猜对了,也如下所述) .

每次 Adj-RIB-Ins 中前缀 P 的路由发生变化时,BGP 都会为该前缀 P 运行“决策过程”(选择最佳路由)。在本例中,AS3 选择最佳路由(或者如果启用了多路径,则可能是一组同样好的最佳路线)。选择最佳路由的规则在RFC4271中有描述,包括“优先选择具有最短AS路径的路由”等规则。

选定的最佳路由存储在称为 Loc-RIB(本地路由信息库)的数据库中。每个前缀的最佳路由(在许多实现中称为活动路由)存储在路由器的转发路径(称为转发信息库的 FIB)中。因此,这是实际用于转发流量的唯一路由。

何时从 FIB 中删除路由?考虑以下场景。在某个时间点 (T1),最佳路由是 P,并且该路由安装在转发路径中。一段时间后 (T2),路由器 AS1 和 AS2 发送更新,所有新路由都被入站策略拒绝。这很简单。在 T1,Loc-RIB 有一条最佳路线。在时间 T2 发生变化:Loc-RIB 中不再有最佳路由。这意味着必须从转发路径 (FIB) 中删除该路由。路由也将从每个 Adj-RIB-Out 中删除,这就是我们接下来将要描述的。

一旦选择了最佳路由并将其安装在转发路径中,接下来的步骤就会将该路由通告给上游路由器。(只需将流量视为一条河流 - 因此我们发送和路由更新的任何路由器都是我们将从中接收流量的路由器)。

正如每个邻居都有一个 Adj-RIB-In(带有接收到的路由),每个邻居也有一个 Adj-RIB-Out(带有已经或将要向该邻居通告的路由)。

作为一个实现,多个邻居可以共享一个 Adj-RIB-In 以节省内存。这仅在我们确定将相同的路由发送到一组邻居时才有效(这是许多实现具有对等组概念的原因之一)。

对于 Loc-RIB 中的每条路由,BGP 发言者 AS3 将应用 RFC 中指定的一些规则(例如在 AS-path 中添加自己的 AS 编号)和运营商配置的一些规则(出站策略,例如更改 MED)并将修改后的路由放置在每个邻居的 Adj-RIB-Out 中。

请注意,出站策略也可能会过滤路由。在这种情况下,Loc-RIB 具有前缀 P 的最佳路由,但 Adj-RIB-Out 没有相同前缀 P 的路由。

最后,AS3 将 Adj-RIB-Out 中的最佳路由通告给与该 Adj-RIB-Out 关联的 BGP 邻居。

那么,回到您的问题 #1:AS3 何时会向 AS4 发送提款?

  • AS3 具有邻居 AS4 的 Adj-RIB-Out 表。

  • 每次 Adj-RIB-Out 表中 P 的路由发生变化时,AS3 都会向 AS4 发送一个 UPDATE。

  • 如果更改是:路由曾经是 P 并且该路由更改为 P',则 AS3 发送带有 P' 广告的 UPDATE

  • 如果更改是:以前的最佳路由是 P,并且该路由从 Adj-RIB-Out 中删除,那么 AS3 会发送一个 UPDATE 并撤消 P。

这是主要规则,但对于向最初从其接收路由的 BGP 邻居发送什么内容有一些微妙之处。

假设在同一个示例中,AS3 选择了从 AS1 接收到的路由作为最佳路由。AS3 应该向 AS1 发送什么信息?

在这个例子中,我们假设所有的 BGP 发言者都在不同的 AS 中,即所有的 BGP 会话都是 EBGP 会话。在这种情况下,AS3 不需要做任何特殊的事情:它可以将它从 AS3 接收到的最佳路由发送回 AS3。这不会导致路由循环,因为 AS1 会在 AS 路径中看到它自己的 AS 编号并忽略 UPDATE,因为它意识到这是一个循环。

对于 IBGP 会话(不在本示例中),情况要复杂一些。不允许 BGP 发言者将路由发送回从其接收路由的 BGP 发言者。因此,BGP 发言者可能必须发送撤回(“毒药反向”),而不是将路由发送回从其接收路由的 BGP 发言者。