BGP 撤销时丢包

BGP 撤销时丢包

我们通过 BGP 向 ISP A 和 ISP B 公布我们的前缀,向 ISP A 公布 1.0.0.0/23,向 ISP B 公布 1.0.0.0/24 和 10.0.1.0/24。

我们希望的是,当我们从 ISP B 撤销 1.0.0.0/24 时,1.0.0.0/24 的通信无缝切换到 ISP A。(因为 1.0.0.0/23 包含 1.0.0.0/24)但是,当我们这样做时,我们会遇到大约 2-3 秒的丢包(我尝试 ping 它,它显示 TTL 已过期)。

当然,我假设如果我也向 ISP B 公布 1.0.0.0/23,问题就会解决。但是为什么我们会遇到这些数据包丢失的情况呢?

答案1

从路由器撤回路由只是更新整个 Internet 路由表过程的开始,而不是结束。你为什么认为它会立即发生?

首先,当发生退出时,您很可能会丢失发往或通过 ISP B 网络的数据包。

第二 - 虽然对于远程站点来说这可能不是什么大问题,但您两个 ISP 的邻居将需要重新计算路由并更新其 FIB。这同样可能导致特定时刻的数据包丢失。假设站点 X 拥有通向您的所有路由。它使用更具体的路由(被撤销的路由)将数据包发送到下一个路由器 (Y)。下一个路由器 (Y) 已经删除了通向您的更具体的路由,但它看到了通向站点 X 的不太具体的路由。发现问题了吗?

答案2

当我们这样做时,我们会得到大约 2-3 秒的数据包丢失(我尝试 ping 它并且它显示 TTL 已过期)。

通常这意味着其中一个路由器已经处理了更新,但另一个路由器还没有这样做(要么是因为更新物理上还没有到达它,要么是因为它的控制平面没有第一个那样强大的处理能力)。

在此期间,网关 B 知道通过 A 的新路由,但 A 仍然拥有通过 B 的旧路由,导致两者之间出现往返。(如果您观察mtr这个过程,您可能会看到这种情况发生在多个地方。)

答案3

仅仅宣布新路由使用相同的前缀是不够的,因为新路由对于大多数路由器来说并不是更好。

不过,有一种方法可以避免这个问题,假设你可以保持两个连接保持打开直到你完成:

  1. 宣布最少数量的更具体的路线,以重新路由您想要关闭的路线上的所有流量。

  2. 撤回被取代的路线,并宣布新的路线(或确保有合适的路线,就像您的情况一样)。

  3. 删除现在多余的更具体的路线,以便您进行清理。

不要忘记等待步骤之间的彻底传播。

相关内容