Facebook的锅,BGP背的应该吗?

最近,Facebook, Instagr.

最近,Facebook, Instagram, WhatsApp等应用程序长达数小时的离线,变成了互联网的孤岛,并因此造成了70亿美元的损失。据Facebook的宣称,在其例行维护中,由于发布了一条错误的命令,撤销了网络中所有的BGP路由,导致世界上的每个路由器都删除了所有与Facebook有关的路由,流量无法到达其服务器。

可能我们还是一脸懵逼,到底它的网络发生了什么,BGP是什么,它干了什么?

我们先来通过一个GUI工具,看看这次事故发生前后Facebook的路由状态的变化,到底它的网络发生了什么。我们通过检索Facebook 的一个 IP地址:129.134.30.12,如下图所示为事故发生之前BGP路线连接。

可以看得出密密麻麻的BGP连接,各个数据中心的互联以及互联网的访问都是正常的。然后我们再来看看事故发生之后,BGP的路由状态是怎样的,如下图所示。

很明显,BGP路由基本上消失殆尽。顶部的文字显示了最后一条Facebook的BGP 路由也消失了:

这到底是怎么回事,下面我就来看看什么是BGP,为什么会是BGP,BGP到底干了什么?

先看看BGP是什么,英文是Border Gateway Protocol,即边界网关协议。对于互联网来说,在BGP的世界中,各个国家和地区的路由器组成了一个个大小不一的自治系统AS(Autonomous system)网络,所谓AS就是在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体,它们对外执行共同的路由策略。并且每个AS有一个自己的AS号。

也就是说,在BGP出现之前,这些独立的网络就像一座座孤岛(各种组织或大学、政企网络以及政府网络等)。这些孤岛通过BGP提供一种连接,就像胶带一样把各个自治系统AS连接起来,并让你知道如何经过哪些岛屿(自治系统)才能到达目的地。

因此,我们常说BGP是使互联网能够工作的协议,提供跨AS的连接,就像胶带一样使得大大小小的AS网络能够粘在一起。

那么这个胶带是怎样的?和大部分协议一样,BGP的数据由header和data组成。Header有19个字节,所有的BGP数据的Header格式是一样的。为了保证胶带的可靠,BGP使用TCP作为传输层的路由协议,以提供可靠的连接,默认端口号是179。

虽然BGP可以提供可靠的连接,但是互联网一直在变化,也就是说这张互联网地图会随时不断更新。导致这些更新的可能是AS内路由的变化或配置的更改等。在这里,BGP路由的变化与AS内部和外部两个层面相关,涉及到BGP路由器3个非常重要的角色概念,我们简单描述如下:

  • BGP发言者(BGP Speaker):发送BGP消息的路由器称为BGP发言者(起了BGP协议就是BGP发言者)
  • BGP对等体(BGP peer):相互交换消息的BGP发言者互称为BGP对等体
  • EBGP对等体:处于不同AS的BGP对等体为EBGP对等体,通常情况下EBGP对等体是物理上直连(下图中的RTA,RTB,RTD,RTE)。

其中BGP发言者从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP)。

但是有时候,路由的变化和配置的更新不一定是正确的,如同我们日常生活中常用的导航地图的更新,也可能是错误的一样。比如说我们可能被地图导航引导到一条不死胡同或者一条费时费力的路线上。

以上简单介绍了BGP的原理,让我们回到本次Facebook的事故。

Facebook的网络对于我们来说,就是一个大型的AS域,由其全球互联的数据中心互联器组成。对内由负责数据管理与计算的大型设施即数据中心服务器组成,对外由提供域名解析的本地DNS服务器等小型设施组成(所以Facebook宣称它的数据保护做的好)。

上图中的DNS即域名系统,为服务器提供域名的IP地址解析,BGP则提供最快的方式来访问该IP地址。因此,我们说,如果DNS是互联网的地址簿,那么BGP是互联网的路线图。DNS的作用告诉你去哪里,而BGP则告诉你如何到达那里。

据Facebook的解释,本次事故是由于在其例行维护中,一条用于评估其全球骨干网容量的可用性命令,被发给了数据中心的BGP路由器,并被广播到它的其他所有数据中心的路由器,导致数据中心之间的服务器中断。最终这些BGP路由信息又被在全网删除或撤销。

这里有两个层面的含义:

一个是维护命令导致数据中心服务器之间的互联中断;

二个是BGP路由在全网删除撤销导致访问不可达。

魔幻的是,在Facebook的网络中,本地终端的DNS服务器不仅提供对外的IP地址解析,还负责控制BGP路由的通告。

所以,当其全球骨干数据中心与DNS不能正常通信时,DNS服务器就把所有的BGP路由通告删除或撤回。导致外面的世界不知道通过路到Facebook的服务器,没有任何进入其网络的路由。相当于对外宣告它的AS已关闭营业了。

并且由于Facebook网络的结构方式,这些路由(删除或者撤销)的更新一波四连杀(Quadra Kill)也带走了WhatsApp、Instagram、Messenger。

有意思的是,至于为什么会花费这么久的时间来解决这个问题,Facebook给出的解释是:一个由于上述原因由于无法远程访问Facebook网络,另一个是Facebook的工程师远程办公,刷不开门禁,无法进入其数据机房里进行修复。最终只能是大力出奇迹!

以上是我的理解,可能存在错误,感谢您的阅读。至于BGP这次背锅,反正是逃不掉的,而且责任越大,锅越大,你怎么看?羡慕他们远程办公。。。

往期文章: