疑问

我们常使用的DNS服务器,除了各大运营商本地提供的DNS之外,还有很多公司提供的免费公共DNS,比如国内阿里的223.5.5.5和很出名的114DNS114.114.114.114。本地运营商的DNS服务器延时低可以理解因为他们就部署在本地,各个城市的IP不一样,你在A城市用B城市的本地DNS那速度还是会很慢。但是我们在使用这些一些免费公共DNS的时候配置的都是一样的IP但是为什么多个不同的城市PING延迟都这么低?如图上图223.5.5.5的多地ping结果这是怎么做到的?
答案
这是依靠网络寻址和路由策略来实现的叫任播(anycast)。与它一起或者相对应的还有单播(unicast)、广播(broadcast)和多播(multicast)。
下面摘自有一段摘自维基百科的解释
在单播中,在网络地址和网络节点之间存在一一对应的关系。
在广播和多播中,在网络地址和网络节点之间存在一对多的关系:每一个发送地址对应一群接收可以复制信息的节点。
在任播中,在网络地址和网络节点之间存在一对多的关系:每一个地址对应一群接收节点,但在任何给定时间,只有其中之一可以接收到发送端来的信息。
相信你有明白这个意思了,当然也应该知道单播就是平时我们使用最常见的寻址方式了,我们这里暂只对讲任播对其他寻址方式感兴趣也可以自行去搜索了解一下。
任播
虽然知道依靠任播来实现的了,但是不知道是怎么实现的呀,答案太简单还是不懂,那么我们下面就来继续看看任播是怎么做到多地同一ip延迟都这么低的。
任播可以实现多台设备使用相同的ip,这些设备可以放在不同的地方,当你访问该ip时将你路由到不同的设备,当然如果将你路由到离你相近的设备自然网络延迟就低了。
怎么路由?依靠BGP来路由,很好理解在路由的时候将你路由到跃点最少的设备就好了。

如上图所示,绿色圆圈为配置了任播的服务器节点,蓝色圆圈为用户,222.1.1.2来举例节点A-节点E都配置任播IP为222.1.1.2,当然此外他们可能还有自己的单播IP也就是我们平时的普通IP,路由的时候就可以将我们路由至其中任意一台节点,如图就将用户路由到了节点B。
我们先不详细了解BGP那我们是不是就明白任播是怎么会事了?是不是可以理解223.5.5.5是如何实现多个城市延迟都这么低的了?他们就是在多个城市部署了节点依靠任播实现路由到不同的节点,一般是你相近的节点,所以延迟在不同的城市都会比较低。
但是要注意的是任播的IP是不能对外通信的,只能别人对它进行通信。
我我的产品能用吗?
当然是可以的,你需要拥有一个IP然后配置任播然后让BGP将自己广播出去,之后BGP就能正确的给你路由了。
最简单的方式就是直接上各大云厂商购买,就像你买云服务器一样,只是这里是买IP,因为你要先拥有此IP才行。
看阿里云上叫弹性公网IP

可以看到产品功能里面也说了使用任播实现动态公网加速。
腾讯云就直接有一个叫Anycast公网加速的产品。
当然国外的云厂商也是有类似产品的,具体使用就不演示了,没钱演示,到这里也相信你明白实现方式了。
参考
https://zh.wikipedia.org/zh-sg/%E4%BB%BB%E6%92%AD
https://learn.microsoft.com/zh-cn/windows-server/networking/dns/deploy/anycast
https://juejin.cn/post/6844903638679175175
https://www.lirui.org/posts/my-first-asn/
https://www.lirui.org/posts/create-your-own-anycast-network/
评论区