边界网关协议 (BGP) 是互联网的路由协议。就像邮局处理邮件一样,BGP 选择最高效的路线来传递互联网流量。
阅读本文后,您将能够:
复制文章链接
边界网关协议 (BGP) 就是互联网的邮政服务。当有人把一封信投进邮筒时,邮政服务就会处理这封邮件,并选择一条快速、高效的路线将这封信投递给收件人。同样地,当有人通过互联网提交数据时,BGP 负责寻找数据能传播的所有可用路径,并选择最佳的路由,这通常意味着在自治系统之间跳跃。
BGP 是通过启用数据路由来使互联网正常工作的协议。当一位在新加坡的用户加载一个源服务器位于阿根廷的网站时,BGP 就是使这种通信快速、高效地进行的协议。
互联网是一个由网络组成的网络。它由成千上万个被称为“自治系统”(autonomous system,AS)的更小网络组成。这些网络中的每一个实际上就是由单一组织运行的一个大型路由器池。
如果我们继续将 BGP 比作互联网的邮政服务,那么自治系统就相当于各邮政分局。一个城镇可能有数百个邮箱,但邮箱中的所有邮件都必须先经过本地邮政分局,然后再运送到另一个目的地。自治系统中的内部路由器就好比邮箱。它们将出站流量路由到自治系统,然后使用 BGP 路由将这些流量传输到其目的地。
上图展示了一个简化版的 BGP。在此版本中,互联网上只有 6 个自治系统。如果 AS1 需要向 AS3 路由一个数据包,它有两种不同的选择:
跳到 AS2,然后跳到 AS3:
AS2 → AS3
或跳到 AS6,然后跳到 AS5,然后是 AS4,最后跳到 AS3:
AS6 → AS5 → AS4 → AS3
在这个简化的模型中,决策似乎很简单直接。AS2 路由所需的跃点比 AS6 路由要少,因此它是最快、最高效的路由。现在假设有成百上千个 AS,而且跃点数只是一种复杂的路线选择算法中的一部分。这就是互联网上 BGP 路由的实际情况。
互联网的结构是不断变化的,新系统不断出现,现有系统也会变得不可用。因此,每一个自治系统都必须掌握有关新路由和废弃路由的最新信息。这是通过对等会话完成的,其中,每一个自治系统都会通过 TCP/IP 协议连接到相邻的自治系统,以共享路由信息。通过这些信息,每个自治系统都能够正确地路由出站数据。
在这里,我们上面所做的比喻不再成立。与邮局不同,自治系统并非都属于同一个组织。事实上,它们往往属于互相竞争的公司。因此,BGP 路由有时会将业务因素考虑在内。自治系统往往会互相收取费用来传输通过其网络的流量,相关价格会成为最终选择哪条路由的因素。
自治系统一般属于互联网服务提供商(ISP)或其他大型组织,例如科技公司、高校、政府机构和科研机构。每个希望交换路由信息的 AS 都必须具有一个注册的自治系统编号(ASN)。互联网号码分配机构(IANA)向地区互联网注册机构(RIR)分配 ASN,后者再将其分配给 ISP 和网络。ASN 是介于 1 到 65534 之间的 16 位数字,以及介于 131072 和 4294967294 之间的 32 位数字。截至 2018 年,全世界使用中的 ASN 共有大约 6.4 万个。只有外部 BGP 才需要 ASN。
在互联网上,路由交换和流量传输是通过外部 BGP(eBGP)进行的。自治系统也可使用 BGP 的内部版本来路由内部网络上的数据,也就是 iBGP。应该指出的是,使用内部 BGP 并非使用外部 BGP 的前提条件。自治系统可从多种内部协议中选择,来连接内部网络上的路由器。
外部 BGP 就像国际运输。在国际上运送邮件时,需要遵循特定的标准和规则。邮件到达目的地国家后,必须通过目的地国家的本地邮政服务才能达到其最终目的地。每个国家都有自己的内部邮政服务,不必遵循其他国家的相同规则。同样,每个自治系统都可以有自己的内部路由协议,用于路由自身网络内部的数据。
总之,BGP试图为网络流量找到最有效的路径。 但如上所述,跳数并不是BGP路由器寻找这些路径的唯一因素。 BGP为每条路径分配属性,这些属性有助于路由器在有多个选项时选择路径。 许多路由器允许管理员自定义属性,以便更精细地控制网络上的流量流动方式。 BGP属性的一些例子是:
还有其他几个BGP属性。 对于BGP路由器来说,所有这些属性都是按优先级排序的--因此,例如,BGP路由器首先检查哪条路由的权重最高,然后检查本地偏好,然后检查路由器是否发起了该路由,以此类推。 (因此,如果收到的所有路由的权重相同,路由器就会根据本地偏好选择路径,而不是根据本地偏好选择路径)。
在 2004 年,一家名为 TTNet 的土耳其 ISP 意外地向相邻的网络发布了错误的 BGP 路由。这些路由声称,TTNet 自己是互联网上所有流量的最佳目的地。随着这些路由不断传播到越来越多的自治系统,发生了一次大规模的中断,导致持续一天的危机,世界各地很多人都无法访问部分或全部互联网。
同样,在 2008 年,一家巴基斯坦 ISP 尝试使用一个 BGP 路由来阻止巴基斯坦用户访问 YouTube。该 IPS 随后意外地将这些路由发给了邻近的自治系统,该路由在互联网上的 BGP 网络中迅速传播开来。这个路由将尝试访问 YouTube 的用户发送到一个无效的目的地,导致 YouTube 数小时内无法访问。
另一起类似事件发生在 2019年6月,当时宾夕法尼亚州的一家小公司成为通过Verizon网络的首选路径,导致大部分互联网的用户无法使用几个小时。
这些是所谓 BGP 劫持的实例,而这种情况并不总是意外发生的。2018 年 4月,攻击者故意创建了一个错误的 BGP 路由,将原定目的地为亚马逊 DNS 服务的流量重定向。通过将这些流量重定向给自己,攻击者成功窃取了价值 10 万美元的加密货币。
BGP劫持可用于几种攻击:
这样的事件之所以会发生,是因为 BGP 的路由共享功能依赖于信任,自治系统隐式信任与它们共享的路由。当对等网络(有意或无意地)公告不正确的路由信息时,流量就会到达错误的目的地,有可能产生恶意的结果。
幸运的是,在保护 BGP 方面已经取得了一些进展。最引人注目的是 2008 年推出的资源公钥基础设施(RPKI)的路由安全框架。RPKI 使用被称为路由源授权(Route Origin Authorization, ROA)的加密签名记录,以验证哪个网络运营商允许使用 BGP 来公告某个组织的 IP 地址。这确保了获授权方才能公告某个组织的前缀。
但仅有 RPKI 的存在并不足够。如果大型网络不遵循 BGP 安全最佳做法,就有可能传播大规模的劫持攻击。目前,超过 50% 的顶级互联网服务提供商在某种程度上支持 RPKI,但需要大多数的支持才能完全保障 BGP 的安全。网络运营商可以通过实施 RPKI 和使用 Cloudflare 路由泄漏检测等网络警报技术来保护其网络。这个功能可以让客户在有未经授权者发布其前缀时收到通知,从而预防 BGP 劫持攻击。