互联网已充斥着“僵尸”,却无人提起

BBetter Stack
Internet TechnologyComputing/Software

Transcript

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我们下期视频再见。

Key Takeaway

BGP 僵尸是由于全球路由更新延迟导致的过时网络路径,虽然会引发短暂的连接故障,但可通过优化路由发布策略来缓解。

Highlights

BGP(边界网关协议)是互联网维护全球路由地图、引导流量流向的核心系统。

“BGP 僵尸”是指在原始网络撤回路由后,仍残留在某些路由器全球路由表中的过时路径。

僵尸路径会导致数据流量进入死胡同、循环或被丢弃,用户端表现为连接超时或页面卡顿。

大型网络中的僵尸通常持续 6 到 11 分钟,且 IPv4 环境比 IPv6 更容易产生持久僵尸。

Cloudflare 通过“先发布新路由、后撤回旧路由”的策略,有效强制全球路由器同步更新并消除僵尸。

BGP 具备自我纠正机制,通过计时器和邻居间的持续信息交互,最终会使僵尸条目失效。

Timeline

BGP 系统与互联网“僵尸”概念

视频开篇引入了互联网中“僵尸”的奇特概念,明确指出这并非电影角色,而是技术层面的 BGP 僵尸。BGP 代表边界网关协议,它是不同大型网络之间宣告 IP 地址范围并引导流量的基石。互联网依靠这张巨大的全球动态地图实现互联互通,确保数据包能找到正确的去向。通常情况下,该系统运行极其顺畅且高效,是网络基础设施的底层支柱。然而,系统有时会产生意想不到的残留信息,这种反常现象正是本文探讨的核心议题。

BGP 路由的通告与撤回机制

这一章节详细解释了网络路由的正常运作流程,即通过发布通告来接收流量,以及通过撤回操作停止流量。网络运维中常见的场景包括数据中心迁移、客户转移到新节点或常规服务器维护,这些都涉及路由状态的更迭。在理想状态下,一旦路由被撤回,全球各地的网络应立即停止向该路径发送数据。但现实中,某些网络会忽略撤回指令,继续持有已经失效的路径信息。这种“拒绝消失”的过时路由被正式定义为 BGP 僵尸,它打破了全球路由表的一致性。

僵尸路径对用户体验的影响

当流量遭遇 BGP 僵尸时,由于目的地已不存在,数据包会陷入各种异常状态。它们可能在路由器之间循环往复直到被系统丢弃,或者绕行极远的路径最终进入死胡同。对于普通互联网用户而言,这种底层网络波动会直接体现为网页加载缓慢或连接超时。视频指出,虽然有时这种影响极其微弱甚至难以察觉,但在某些情况下,应用连接失败会非常明显。这解释了为什么有时候用户即便网络正常,也无法访问特定的服务或页面。

僵尸产生的深层原因与自我修复

视频深入探讨了路由器未能及时更新地图的技术细节,原因在于 BGP 处理变更时的检索逻辑。当具体路由消失,路由器会花费时间寻找更通用的替代方案,这段时间窗口便孕育了僵尸。Cloudflare 的研究数据显示,这类僵尸在大型网络中通常存活 6 到 11 分钟,且 IPv4 协议下的表现更顽固。幸运的是,BGP 协议内置了计时器机制和邻居节点间的持续交互。即使路由器错过了初始的撤回信号,最终也会在周围节点达成共识后自动清除过期条目,实现系统的自我纠正。

Cloudflare 的实战案例与解决方案

Cloudflare 在处理自带 IP(BYOIP)业务时发现了僵尸路由带来的具体困扰,表现为服务商依然尝试通过旧路径传输流量。为了攻克这一难题,他们开发出一种更稳健的路由更替方法,即在撤回旧路径前先从稳定点发布新通告。这种“先立后破”的策略强制全球路由器进行干净的切换,避免了因为搜索备选路由而引发的僵尸现象。通过优化内部系统,他们确保了客户在业务交接过程中的网络过渡更加平滑。这一案例展示了顶级互联网公司如何通过技术创新来应对协议层面的原生缺陷。

总结:复杂系统下的精妙协同

视频在结尾处提醒观众,即便是互联网最基础的 BGP 协议,在极端条件下也会出现不同寻常的行为。这种现象揭示了维持全球网络平稳运行背后所需要的极高复杂性和协同能力。虽然 BGP 僵尸偶尔会造成网页卡顿,但绝大多数问题在用户察觉前就已被自动化机制解决。理解这一机制有助于用户从技术角度看待日常遇到的网络故障。最后,主持人 Andris 鼓励对技术细节感兴趣的观众阅读 Cloudflare 的深度博客并关注其频道,以便获取更多前沿的技术解析。

Community Posts

View all posts