如果公共IP地址固定在一个AS上,那么BGP anycast是如何工作的呢?

根据我的了解,公共IP地址块是从IANA分配的,它将子块分配给RIRs,后者又将子块分配给ISP,然后ISP将子块分配给单个ASs,详细过程请参考这个问题:How are IP addresses actually assigned?。 这意味着一个公共IP地址对应一个AS的映射关系(以及类似this page的资源)。 然而,anycast似乎通过在多个位置广播同一公共IP地址来实现,为该IP地址提供不同的路径。例如:

如果公共IP应该解析到一个单独的AS,那么任播是如何工作的?

  • 这是一种假装进行BGP 多宿主 / 多路径 的黑客行为,并在通过AS时截取流量吗(似乎在这里暗示了这一点:https://serverfault.com/a/728609/148476)?
  • 这只是“规则”中的一个例外吗,每个AS只有一个IP地址?
  • 或者可能是我漏掉了什么...

2对于“1 AS per address”,也没有严格的规定 - 只需看看由6to4使用的192.88.99.0/24(尽管它确实会变得有问题...) - user1686
2你有关于IP地址分配给自治系统(AS)的说法的参考资料吗?虽然已经过了几年,但我只见过IP地址块被分配给组织。(你提到的映射可能只是告诉你哪个自治系统(AS)正在广播特定的地址块,这只是观察到实际发生的情况,并不是分配。) - David Schwartz
如何向实体分配地址与互联网上的地址路由是如何进行广告推送无关。可能每一个构成互联网的ISP都可以宣称自己有到达特定前缀的路由,并且每一个都通过其他ISP学习到了到达前缀的路由。路由只是一个路由器告诉另一个路由器它知道如何将流量转发到网络,而每个互联网路由器都可以合理地相信自己掌握着一个路由。接收到多条到达网络的路由的路由器将选择其中一条来使用。 - Ron Maupin
@DavidSchwartz 没有关于IP到AS分配的参考资料。阅读了一些回答和其他文章后,我觉得这根本不正确,只是在很多资源中暗示了这一点(也许因为这是最常见的情况)。 - turtlemonvh
@RonMaupin我理解路由和IP地址块分配的区别。然而,BGP路由通告中包含了一个用于路由决策的AS_PATH部分(参见:https://tools.ietf.org/html/rfc4271#section-4.3)。我的问题实际上是关于当这些路由通告来自许多AS,并且每个AS都声称它是路径中唯一的AS时的行为,也就是说,它们对该IP地址有一个直接路径,没有任何其他外部路由。 - turtlemonvh
BGP在确定最佳路径时有许多步骤。AS_PATH只是其中之一。此外,你很少会与许多AS连接,而每个AS都认为它们与网络有直接连接。 - Ron Maupin
@RonMaupin难道不是正是grawity的例子所展示的“与许多自治系统相连,每个自治系统都认为自己与网络有直接连接”的情况吗?(或者我可能误解了那个...) - turtlemonvh
通常情况下,你可能会与几个其他的ISP建立连接。每个ISP都会宣传这个前缀,但是它们可能是从其他ASes获得这个前缀,而这些ASes又是从其他ASes获得的。每个ISP对该前缀的AS_PATH计数可能是不同的。如果这个前缀在每个大洲都被宣传,北美洲的ISP到来自北美洲的该前缀的AS_PATH会比到来自欧洲或亚洲的AS_PATH要短很多。BGP有一套复杂的标准来确定到一个前缀的最佳路径。如果经过整个过程后仍然没有一条路径胜出,它将简单地选择最早的广告。 - Ron Maupin
好的,假设我与多个互联网服务提供商有连接,并向每个提供商宣告了到我的IP地址段的路由。你的意思是说,那些“直接”的路由并不一定会在寻找我的IP地址段的流量中“胜出”,因为其他自治系统也会向这些互联网服务提供商宣告其他路由。尽管这些路由宣告的AS_PATH较长,但它们仍然可能被选择用于至少部分流量。这似乎是可能的,但也很可能“直接”路由会更频繁地被选择。(顺便说一句,感谢你帮助我理解!) - turtlemonvh
3个回答

一个自治系统(AS)不一定局限于单个物理位置。 当进行任播时,您在许多物理位置上运行路由器,每个位置与不同的ISP进行对等连接,作为同一个AS,向任播IP地址广告路由。 从BGP的角度来看,这与在一个站点中使用多个ISP实现冗余并没有太大区别;在“一个站点,多个ISP”的情况下,一个路由器向多个ISP发送“我是AS X,我有IP范围Y!”的信息;在任播中,您只需指示地理位置分散的路由器向各自的ISP广告它们几乎相同的“我是AS X,我有IP范围Y!”的消息,声称您的AS和任播范围,并让BGP选择最佳的ISP将流量发送到该处。 ISP并不知道任何不同之处;互联网无法感知各种可用路径并不仅仅导向同一个高度冗余的站点。

换句话说,互联网并不知道它通过你们价值数十亿美元的秘密地下光纤网络与同一台服务器进行通信。 - user253751
@immibis 这是一个很好的观点,但有一个小问题:在这种情况下(通过您自己的内部网络将路由返回到一个中央服务器),从技术上讲,我们不再符合任播的定义,因为请求实际上不会在地理上分散的站点处理。在我描述的情况下,每个站点都会有几乎相同的服务器,而不是通过秘密后端网络将您引导到正确的服务器。 - Shane Madden
这不是吹毛求疵,而是关键所在。在不同站点之间建立私有网络是完全合理的。而且互联网路由协议无法区分你是否拥有私有网络,或者只是假装拥有,并使用任播代替。 - user253751
在不同站点之间建立私有网络是绝对有效的,但我只是说您不会想以这种方式(相同服务器)部署任播,因为这样做会自我破坏。但我同意您的观点:从互联网的角度来看,它们看起来是一样的。 - Shane Madden
这是一个很好的回答。你能否添加一些标准文档或其他外部资源的链接来证明你所说的是真实的?(即任播和多宿主基本上是相同的事情) - turtlemonvh

没有要求IP地址或互联网前缀的路径来自单个自治系统(AS)。 AS编号分配给组织,IP地址也分配给组织。像ARIN这样的注册机构不会将我的地址分配与我的ASN分配链接起来。即使在像资源公钥基础设施这样的新系统中,仍然允许多个AS发起到网络的路由。Team Cymru页面在常见问题解答中说道:

有些情况下,一个网络前缀可能会被多个不同的网络或自治系统宣告。最常见的原因是所谓的“多重接入”。这是完全正常的。根据您对互联网拓扑和发起网络策略的理解,其中一个发起网络将成为发送和接收相关网络区块流量的首选路径。

这里是一个(长长的)网络列表,目前从多个自治系统进行广告宣传。 关于它如何到达目的地:路由是使用BGP路径选择算法选择的,该算法根据每个路由器所知道的信息选择一条路径。互联网上的每个路由器都有自己的路由表视图,因此互联网的不同部分的流量可能最终进入不同的位置和自治系统(AS)。甚至没有要求每个流中的每个数据包都要去同一个地方,这在任播或多重接入的情况下显然会使事情变得有趣。

谢谢dk1。对我来说,公共IP到AS映射是1:N而不是1:1的想法是关键点。这篇文章也很有帮助:https://serverfault.com/questions/137257/how-ip-addresses-are-mapped-to-autonomous-system-numbers,还有其他讨论AS互联的文章,比如:https://umbrella.cisco.com/blog/blog/2013/01/10/high-availability-with-anycast-routing/。那篇OpenDNS的文章还显示他们的AS是全球分布的。 - turtlemonvh

这个(以及像这个页面一样的资源)似乎暗示了一个公共IP映射到一个AS的关系。 是的,那是正确的。 然而,anycast似乎通过从多个位置广告相同的公共IP地址来工作。 简单地说,只要“就这么做”就可以了。一个AS是定义自己的国际路由的实体。它可以将相同的IP地址连接到多个位置 - 只要在连接过程中路由不发生变化,那就没问题。 只需暂时忽略一下(因为在这里无知是有效的)。 如果你在美国请求IP x,根据AS BGP规则,你会去美国的一个数据中心。如果你在澳大利亚这样做,你最终会进入澳大利亚的一个数据中心。结束了。没有任何规定说一个IP不能被重复使用,只要路由是稳定的。 这不是BGP的黑客行为,而是对BGP的正常使用。

1BGP在决定发送数据包的路径时不使用地缘政治划分,并且地址并不属于任何一个自治系统(AS)。 - dk1
你提到“只要路由在连接过程中不改变,就没问题”。我认为这样的路由变化在任播配置中是一个已知的问题,这也是为什么任播通常被保留用于无连接协议如UDP的部分原因?详见:https://blog.cloudflare.com/cloudflares-architecture-eliminating-single-p/ - turtlemonvh