任播如何确保在不同位置为同一 IP 地址可靠传送 IP 数据包?

网络工程 路由 ip bgp 互联网 任播
2021-07-19 21:39:53

通过任播,可以在世界上的多个位置拥有相同的 IP 地址,而无需代理或 VPN 将数据包转发到其最终目的地。

如果您只是使用 IP 欺骗将源 IP 地址更改为例如 6.7.8.9,通常您将无法仅接收此 IP 地址的响应数据包,因为边界网关协议为响应确定了不同的返回路径您通常无法拦截的数据包。

任播做什么才能可靠地接收发往该特定 IP 地址的 IP 数据包?由于 BGP 所依赖的最短路径可以改变,该机制确保当您在具有 IP 地址 6.7.8.9 的位置 A 发送请求时,您将收到返回位置 A 的整个响应,并且您不会收到带有同样在位置 B 传送的几个数据包的 IP 地址为 6.7.8.9,而在位置 C 传送的另外几个数据包也具有 IP 地址 6.7.8.9?

对于 DNS,这可能无关紧要,但 CloudFlare 也将 Anycast 用于内容交付网络,这将是基于 TCP 的 HTTP(S) 而不仅仅是 UDP 数据包。

编辑:

这种情况如何:服务器 A 和 B 具有与任播相同的 IP 地址。服务器 B 连接到一个离服务器 A 很近但离服务器 B 很远的外部服务器,由于服务器 A 更近,响应将被路由回服务器 A,是不是可以总是路由这种类型的请求回到服务器 B,因为服务器 B 发起了与外部服务器的连接?

2个回答

...哪种机制可确保当您在具有 IP 地址 6.7.8.9 的位置 A 发送请求时,您将不会收到响应,其中还有一些在具有 IP 地址 6.7.8.9 的位置 B 传送的数据包和另外几个数据包在也有 IP 地址 6.7.8.9 的位置 C 交付?

这就是任播的真正意义所在。当您向任播 IP 地址发送某些内容时,路由协议会​​将流量路由到该地址的最近(根据路由协议)网络。如果某个网络的链接出现问题,则流量将自动重新路由到下一个最近的站点。作为发件人,您并不关心哪一个获得了流量。这就是为什么它对 DNS 和 NTP 之类的东西如此有用。

这不像个人可以开始在公共互联网上为网络做广告。在公共 Internet 上为网络做广告的人最好拥有该网络。如果您与 ISP 有 BGP 关系,他们会发现您是否在宣传一个您不拥有的网络,并且您将与 ISP 的 BGP 对等连接被立即切断。

CloudFlare 也将任播用于内容交付网络,这将是基于 TCP 的 HTTP(S) 而不仅仅是 UDP 数据包。如果您正在上传一些数据并且数据分散在不同的服务器上,唯一的选择是重新传输它并希望下次它转到正确的服务器还是任播可以选择防止这种情况发生?

TCP 不能分散在不同的服务器上。TCP 是面向连接的协议,它创建连接。如果与您有连接的服务器的链接出现故障,您需要创建到下一个服务器的新连接。任播无非是使用路由协议将流量传送到具有该网络地址的最近网络。

如果使用任播,并且如果到服务器 A 的路径是一分之一秒的最短路径,然后到服务器 B 的路径是另一分之一秒的最短路径,然后到 A 的路径又是另一个最短路径几分之一秒,等等。它会分散在不同的服务器上。在进入超时状态之前需要几秒钟的时间,并且 TCP 在进入超时状态之前需要进行多次重新传输尝试。

如果路由经常更改,尤其是在 Internet 上,这将是一个严重的网络问题。BGP 会注意到抖动,它会惩罚抖动的链路,并且该链路将从路由更新中被丢弃。你会很难在现实世界中找到你害怕的东西。ISP 非常重视稳定性,他们会阻止表现出不稳定的合作伙伴关系。

这种情况如何:服务器 A 和 B 具有与任播相同的 IP 地址。服务器 B 连接到一个离服务器 A 很近但离服务器 B 很远的外部服务器,由于服务器 A 更近,响应将被路由回服务器 A,是不是可以总是路由这种类型的请求回到服务器 B,因为服务器 B 发起了与外部服务器的连接?

你真的想让这比现在复杂得多。您不会发起从任播地址到 Internet 上任何旧地址的连接。任播地址是目的地址。如果具有任播地址的主机需要联系 Internet 上的不同主机,则它使用非任播地址,或者在接口上具有辅助地址,或者更有可能使用不同的接口。不要将任播地址与主机本身混淆。


说真的,有一些非常非常聪明的人整天什么都不做,只是想着这种事情。RFC 必须在按照提议发布之前获得同行批准。如果没有人有任何真正的反对意见,他们将被提升为 RFC。从这个想法的最初阶段,到 RFC 发布之后,整个世界都在显微镜下观察这些内容。如果任播中真的存在缺陷,它就会在几年前被发现并提出解决方案。

任播有多个 RFC:RFC 1546、主机任播服务(1993 年 11 月)、RFC 4786、任播服务操作(2006 年 12 月)和RFC 7094、IP 任播的架构考虑(2014 年 1 月)。这些 RFC 将解释任播如何工作。

Ron 在解释这里的一些概念方面做得非常出色。这篇文章提到了 CloudFlare 使用 Anycast 的事实,我为 CloudFlare 工作,所以我想解释它如何可靠地工作。

首先,重要的是要记住,网络流量很少重新路由,如果它发生在您所在的地区,它可能会在您还没醒的时候发生。由于 TCP 协议具有很强的弹性,因此您不会看到任何由此产生的不良影响。

TCP 不能分散,因为协议根本行不通。TCP是一种基于ACK的协议;这意味着 TCP 数据包通过发送回确认位设置的数据包来确认。然后,TCP 标头可能包含一个确认编号(长度为 32 位),它有效地充当所有先前字节的确认接收;如果这是不准确的,则连接关闭可能会从服务器发送到客户端。在 TCP 中,当设置了 TCP 标头中的 RST 标志时。TCP 重置有效地导致连接被立即终止。

如果 TCP 连接在通信中分散并重新路由;新服务器不会理解随请求发送给它的 ACK,并会有效地关闭与客户端的连接。然后客户端将能够重新尝试请求,然后该请求将由新服务器完成,它们将通过 BGP 路由到。