0x00

用过Cloudflare的人都知道,他们的CDN使用任播(即Anycast)技术,也正因为这Cloudflare的抗打能力比较强,而其它CDN因为技术原因,可能无法使用任播,只能用反向代理等方式做CDN。

一家CDN提供商就用nginx的反向代理来做CDN,即ip精确到某一台机子
一家CDN提供商就用nginx的反向代理来做CDN,即ip精确到某一台机子

但是反向代理等方式也会加大CDN维护人员的负担,因为一台机子崩溃后需要立即维修,而不能像Anycast一样先分配到别的机子(尤其对固定解析ip的用户来说,CDN宕机就是个大惊喜)。
看上去Anycast挺nb耶,那它到底是啥子呢

0x01

在整Anycast之前,我们还是先来康康Unicast、Multicast和Broadcast(Anycast、Unicast、Multicast和Broadcast分别代表任播、单播、组播和广播,下同)。
Unicast很容易理解,即一个发送端和一个接收端建立连接,足矣。整个连接中只有这两台设备,没有其它设备插手,如在家里访问某个网站,这里不再赘述。
Multicast受众则大一点,是一个发送端和多个接收端的连接。

组播示意图
组播示意图

组播就相当于网络直播,一台服务器就可以向很多用户推送直播内容。
Broadcast在局域网里比较常见,比如实施ARP欺骗时可对全局域网广播ARP包,而不是针对单台设备进行欺骗。
Multicast和Broadcast很像,但是Multicast更先进一些。Broadcast的目标是全局域网(即我不管你接不接受反正我就是要发)且只由单台设备分发,组播则借助组播路由器,只发送一份数据即可由组播路由器向下分发,且数据包不会分发到不需要数据的接收端那里,提高了传输效率。
Anycast则像是Unicast和Multicast的结合体,它只有一个ip却可以映射到不同的设备。
它可以根据发送方和Anycast组成员的网络路径大小来判断数据包应转发到哪个组成员,从而给用户带来较快的响应速度。
Anycast示意图
Anycast示意图

通过Anycast,A、B、C三区的用户都能获得较好的访问体验。
而且Anycast还对整个网络的稳定性有了一定保障。假设B区服务器挂掉,且A->B的距离小于B->C,则Anycast技术便会将流量转发到A区服务器,在保证稳定的同时对速度也没有太大影响,因此它对防御DoS也有一定帮助。
同样的,Anycast还可用于负载均衡。用户访问网站时,网站服务器可通过各个负载节点到自己(用户已到达网站服务器,无法再进行路由)的延迟等因素选择最优节点转发请求,从而保证较大的稳定性和较好的访问速度。

0x02

1.参考资料
(1)浅谈AnyCast网络技术-博客园rebeca8