00:00:00你知道互联网上也遍布着“僵尸”吗?不,不是电影里的那种。
00:00:05我说的这些被称为 BGP 僵尸。BGP 代表边界网关协议,
00:00:12它是大型网络宣告其可以接收流量的 IP 地址范围的方式。
00:00:18互联网正是通过这张巨大的全球地图连接在一起的,它告诉网络如何互相访问,
00:00:24而这一切都由 BGP 系统维护。在大多数情况下,
00:00:29这个系统运行得非常顺畅,但有时系统中会出现意想不到的“僵尸”。
00:00:35为什么会发生这种事呢?这就是我们今天要探讨的内容。
00:00:39在 BGP 系统中,当一个网络希望流量到达一个新位置时,
00:00:49它会发布一条路由通告。当它想停止旧位置接收流量时,
00:00:54它会撤回该路由。这种情况随时都在发生:网络在数据中心之间迁移流量、
00:01:00将客户转移到新的边缘节点,或者为了维护而关闭服务器。
00:01:04撤回路由只是告诉世界其他地方该路径不再有效的一种方式。
00:01:09但有时奇怪的事情会发生。某条路由被撤回了,
00:01:13但一些网络仍然认为它存在。它们继续向一条本该消失的路径发送流量。
00:01:20这就是所谓的 BGP 僵尸。它是一条过时的路由,尽管创建它的网络已经将其删除,
00:01:26它却拒绝从全球路由表中消失。
00:01:32那么,当这个僵尸处于“存活”状态时,流量会发生什么?它无法到达目的地。
00:01:38它可能会在路由器之间循环一会然后被丢弃,也可能绕一大圈穿过几个网络,
00:01:43最终走向死胡同。或者它可能到达一个试图转发它但最终无法送达任何有用地方的网络。
00:01:49从用户的角度来看,这表现为页面卡住或超时,或者应用程序短时间内连接失败。
00:01:55有时这种影响几乎察觉不到,但有时这种减速会非常明显。
00:02:01接下来的问题是,为什么路由器没能立刻更新全球地图。
00:02:06答案在于 BGP 处理变更的方式。当一条更具体的路由消失时,
00:02:11路由器会搜索更通用的备选方案。这个搜索过程需要时间。
00:02:17在那段窗口期,一些路由器未能清除旧条目,
00:02:23它们被困在了过时信息中。Cloudflare 观察到,
00:02:29在大型网络中,这些僵尸通常会持续 6 到 11 分钟。
00:02:34IPv4 僵尸往往比 IPv6 僵尸存活的时间更长。但最终,
00:02:40系统会自我纠正,因为 BGP 中的每条路由都有一个计时器。如果路由器
00:02:46一段时间没收到新的更新,它会自动删除该路由。即使路由器错过了
00:02:52第一次撤回,来自邻居持续不断的 BGP 信息交互最终也会
00:02:57通知它路由已经消失。一旦周围有足够多的路由器对新状态达成共识,
00:03:03僵尸就会消失。Cloudflare 是在处理 BYOIP(自带 IP)客户业务时
00:03:09发现这种现象的。在这种情况下,Cloudflare 会临时宣告客户的
00:03:15IP 空间,并在移交后将其撤回。撤回操作本应非常利索,
00:03:21但他们发现,有时某些服务商在路由消失很久之后仍在使用旧路径。
00:03:27这种不匹配导致流量通过意想不到且低效的路径进入 Cloudflare 的网络。
00:03:33为了解决这个问题,Cloudflare 引入了一种更安全的方法。他们不再直接
00:03:38彻底撤回旧路由,而是先从一个稳定的位置发布相同的路由。这会迫使
00:03:45全球各地的路由器干净利落地切换到新版本。只有在那之后,
00:03:50他们才会撤回旧的通告。这防止了导致僵尸产生的备选路由搜索激增。
00:03:56Cloudflare 还优化了其内部系统,以便将来这些过渡更加平滑。
00:04:02如果你想深入了解这个话题,Cloudflare 发布了一篇非常详尽的博客文章。
00:04:07总之,这提醒我们,即使是互联网最基础的部分,在某些条件下
00:04:13也会表现得不同寻常。然而在大多数时候,这些问题在用户察觉之前就解决了。
00:04:19但偶尔“僵尸”还是会出现。互联网由每秒发生的数百万次路由决策
00:04:25维系着,像 BGP 僵尸这种意外揭示了保持一切平稳运行需要多么复杂的协同。
00:04:31基本就是这样。现在你了解什么是 BGP 僵尸了。下次当网页卡住或
00:04:37加载失败时,你可能就是遇到了互联网上的“僵尸”。
00:04:43如果你喜欢这类技术解析,请务必点击视频下方的点赞按钮。
00:04:48别忘了订阅我们的频道。我是来自 Better Stack 的 Andris,
00:04:53我们下期视频再见。