什么是BGP AnyCast?
BGP anycast就是
利用一个(多个) as号码在不同的地区广播相同的一个ip段。
利用bgp的寻路原则,短的as path 会选成最优路径(bgp寻路原则之n),从而优化了访问速度。
其实bgp anycast是不同服务器用了相同的ip地址。
阿里的DNS 就是使用了BGP AnyCast
“其实bgp anycast是不同服务器用了相同的ip地址。” 言简意赅啊!DNS多点部署IP Anycast+BGP实战分析, 根据这个网页资料,我对BGP anycast 的理解是IP anycast + bgp, ip anycast(ip任播) 本身就是多个主机使用同一个IP地址(该地址即这一组主机的共享单播地址)的一种技术,当发送方发送报文给这个共享单播地址时,报文会根据路由协议路由到这一组主机中离发送方最近的一台,所以这个技术也可以用来做负载均衡。
Anycast技术特点
Anycast 指IPV6协议中一个发送方同最近的一组接收方之间的通信。Anycast 的定义是: 当一个单播地址被分配到多于一个的接口上时,发到该接口的报文被网络路由到由路由协议度量的“最近”的目标接口上。 Anycast 允许源结点向一组目标结点中的一个结点发送数据报,而这个结点由路由系统选择,对源结点透明;同时,路由系统选择“最近”的结点为源结点提供服务,从而在一定程度上为源结点提供了更好的服务也减轻了网络负载。正是Anycast 这一通信模式的特点,使它在IP网络中具有了应用前景。首先,分布的服务共享相同的IP地址,同时在IP层进行透明的服务定位,这使得各种网络服务特别是应用层服务具有更强的透明性,比如DNS(Domain Name System,域名系统),在IPv6网络中它可以共享一个熟知的IP地址,用户不需要特殊配置也不用关心访问的是哪一台DNS服务器;其次,路由系统选择了“最近”的服务,缩短了服务响应的时间,同时减轻了网络负载;最后,相同的服务在网络上冗余分布,路由系统可以提供机制选择负载相对轻的带宽相对高的路径来转发报文,这样就给用户带来了两个方面的好处:
1) 减弱了分布式拒绝服务攻击(DDoS:Distributed Denial of Service)对用户带来的影响。当 Anycast 组中某一个成员或者几个成员受到攻击时,负责报文转发的路由器可以根据各个组成员的响应时间来决定报文应该转发到哪个成员上,这样受到攻击的成员由于没有响应,所以报文就不会被转发到那里,同时,由于 Anycast 提供的服务访问透明性,组成员也相对较难受到DDoS攻击。
2) 减弱了网络拥塞给用户带来的影响。同上面的道理,当 Anycast 的某些组成员处在拥塞的网段时,它的响应时间就较长,报文可以被转发到响应较好的成员那里。 Anycast与Multicast和Unicast是三种通信方式,其中Multicast是指一个发送方同多个接收方之间的通信;Unicast 是指单个发送方和单个接收方之间的通信。Anycast 的用途之一是用一个主机进行组内所有主机路由表的更新工作。IPV6可以自动判断最近的网关,然后将数据包传给此网关。反过来,此主机可以对组内所有的主机进行Anycast,直到完成整个路由表的更新工作。
DNSPod Public DNS+的架构是怎么样的?
Multicast
Multicast 的中文译名是多播,它是指网络中一个节点发出的信息被多个节点收到。与此相对的有Unicast和Broadcast,前者是指一个节点发出的信息只被一个节点收到,后者是指一个节点发出的信息被子网内所有节点收到。实际上,在数据链路层和网络层都有Multicast,通常所说的Multicast大多是针对IP的。这种技术用于多媒体应用、多用户交互(如聊天室)、软件分发等,相比与传统的Unicast可以大大提高效率。在子网内实现 Multicast 较为简单,跨越子网时需要路由器、网关等设备的支持。
Unicast
Unicast(单播):在客户端与媒体服务器之间需要建立一个单独的数据通道,从一台服务器送出的每个数据包只能传送给一个客户机,这种传送方式称为单播。指网络中从源向目的地转发单播流量的过程。单播流量地址唯一。每个用户必须分别对媒体服务器发送单独的查询,而媒体服务器必须向每个用户发送所申请的数据包拷贝。这种巨大冗余首先造成服务器沉重的负担,响应需要很长时间,甚至停止播放;管理人员也被迫购买硬件和带宽来保证一定的服务质量。文字单播方式下,只有一个发送方和一个接收方。与之比较,组播是指单个发送方对应一组选定接收方。
科普科普,什么是Anycast技术?
在IP地址的世界里,大家熟知的IP地址类型大致有如下几种:
Unicast IP
单播IP,IP地址和主机是一一对应关系。
如下图,红色为数据包发送端,而绿色节点为数据包接收端。
当数据包发送给某一个特定IP地址时,全局下仅有一个数据包接收主机。此为Unicast。
Multicast IP
组播IP,组播IP拥有特定的IP地址段,当数据包发送给此组播IP地址后,组内成员都能收到此数据包的一份拷贝。
当数据包发送给某一个特定组播IP地址时,同时存在多个数据包接收端。
Broadcast IP
广播IP,任意Unicast单播网段中最后一个IP地址。数据包发送给此地址会扩散给全广播域的成员。
当数据包发送给广播IP地址时,所有成员均为数据包接收端。
而Anycast IP,则是集Multicast和Unicast特性于一身的特殊IP地址类型
Anycast中文称为任意播。
从宏观上来说,Anycast类似于Multicast,同一种类型的数据流同时存在多个接收者。
而从微观上来说,Anycast又有着Unicast的唯一性。每一个单独的IP会话都能够找到唯一的源主机和目标主机。
咋看之下很矛盾,其实不然.
以DNS请求为例,假设全国人民同一时间发送1百万个DNS请求,他们都是发送给1.1.1.1的Anycast DNS服务器地址。
宏观上来说,所有数据包都送达给了分布在全国各地的DNS服务器。处于各地的DNS服务器分别接收到了一定数量的DNS请求,并作出回复。这体现了Multicast的特性。
微观上,某一个特定的DNS请求数据包,一定是发送给了某一台DNS主机,而不是同时又多台DNS主机接收到了此数据包。此为Unicast特性。
Anycast 到底牛掰在哪里?
在企业网络环境中,Anycast不太常见,其主要应用于大范围的DNS部署,CDN数据缓存,数据中心等。
自然而然,很多做企业网络维护的朋友会有疑问。怎么能让互联网的多个主机用同一个IP,这岂不是IP地址冲突了?
回答:
首先,每一个服务器主机处在不同的地理位置,他们之间不在同一个广播域内。所以把所有主机配置成相同的IP地址并不会引起我们日常所见的IP地址冲突。
其次,光靠配置相同的IP地址时不够的,我们还需要借助强大的BGP帮忙。
通过BGP,各个站点向Internet宣告相同的Anycast IP地址。
自然而然,Internet 就会接收到不同目标路径,但是具有相同IP地址段的prefix。那数据包是如何在这种环境下路由的呢?
别急,往下看。
为了让大家有更深刻的理解和认识,下面将详细描述Anycast的主要优势和用途
:
用途一:Load-balancing 负载均衡以及系统冗余性
不讲理论了,直接上例子,方便理解。
为了阐明使用Anycast和负载均衡,以及冗余性的关系,特举例如下:
假设我们现在有三个DNS服务器站点,地点分别在北京,上海,广州。他们服务了全国的DNS解析服务。
按照一般的解决方案,为了实现三个DNS服务器负载均衡,可能有人会考虑到使用硬件负载均衡设备,例如常见的F5负载均衡设备等。
但若使用硬件负载均衡,随之带来的问题有:
1. 网络流量瓶颈,所有有流量都需要先通过负载均衡设备,而硬件设备本身的吞吐量决定了整个网络环境的吞吐量。
2. 高昂的硬件成本,为了实现全国的流量负载均衡,试想需要多大吞吐量的硬件设备。硬件吞吐量越大,购买成本就越高。
而通过Anycast技术,无需要借助任何第三方负载均衡器,就可以轻松达到负载均衡的效果,同时还提供了冗余和高可靠性。
实施方案如下:
通过配置三个DNS站点的服务器IP为相同IP,例如1.1.1.1/32。然后通过各个站点的BGP对互联网宣告1.1.1.0/24的网段。
(注:为什么要宣告/24,而不是/32? 。因为在Internet里面,为了减小全球Internet路由表尺寸,默认情况下运营商只接受小于等于/8,而大于等于/24的网段宣告进入互联网。)
以上步骤完成以后,互联网路由表针对1.1.1.1/24会有三个不同的出口路由器,分别是北京,上海,广州。
重点来了,因为所有用户都使用1.1.1.1作为他们的DNS服务器。
以东北的用户来说,哪一台DNS服务器会给东北的用户提供解析呢?
答案就是:就近原则!
让我们来看看数据包在网络中的路由细节:
当用户的DNS请求到达运营商的宽带路由器以后,运营商的路由器会根据BGP的选路原则选择到达1.1.1.1的最优路径。
例如,在用户宽带运营商和DNS服务器Internet运营商相同的情况下,最终会以IGP metric为关键因素来决定哪个DNS服务器给用户提供服务。
而IGP的 Metric某种程度上就是物理距离的代表。
如,四川的宽带路由器通过查看BGP路由,发现1.1.1.1出口最优路由是在广州。那么四川用户的DNS数据包将被发送给广州的DNS服务器。
同理,东北的用户DNS解析将会被发往北京的DNS服务器,而江南一带的则是上海DNS服务器负责。
万一出现故障怎么办?
如果三台DNS服务器中某一台出现故障,例如广东DNS服务宕机。BGP协议会立即停止通告此1.1.1.0/24的网段。Internet 路由表将会只有北京和上海的DNS可供选择。
此时原广东DNS服务的用户将再次根据“就近原则”选择其他DNS服务器,例如上海DNS。
从而达到业务的平滑迁移和服务的高可用性。
基于以上的分析,我们很容易就得出如下结论:
全国用户最终会根据距离DNS服务器的远近来判断使用哪个DNS服务器做域名解析。
从DNS角度来说,正因为不同的地理位置用户会根据就近路由判断,从而选择不同的DNS服务器,最终会使三台DNS服务器达到负载均衡的效果。
若其中某一个节点出现故障以后,业务会立即迁移到其他可用的节点上,从而避免网路服务故障。完全不需要人工干预。
以上就是Anycast在负载均衡中的用途说明。
用途二:防范DDOS攻击
相信很多在运营商工作的朋友都非常讨厌DDOS攻击。
当DDOS发生时,10G或100Gbps的流量突然蜂拥而来,占用运营商核心MPLS网路带宽不说,这种洪泛攻击会给客户网络造成短时间的瘫痪。造成的损失极大。
在阐述Anycast防范DDOS攻击细节之前,让我们先来看看DDOS是如何产生的。
以NTP协议为例,NTP协议是client-server模式,客户发起NTP时间查询申请,服务器响应NTP查询。看似正常的NTP数据流量有时候及其容易被玩坏。
假设某个黑客控制了成千上万的僵尸主机,这些僵尸主机纷纷伪造如下数据包并发送给全球NTP服务器:
源地址:1.2.3.4 (伪造源地址为 被攻击者的IP地址)
目标地址:全球各个NTP服务器地址。(越多越好)
当全世界各地的NTP服务器收到此查询以后,它会把查询结果发送回给真正的受害者1.2.3.4。
这时IP地址为1.2.3.4 的受害者收到全世界的NTP服务器发过来的数据包时,其有限的带宽链路就很容易产生拥塞并造成服务中断。
假设这些僵尸不只是发送一次虚假数据包,而是上万次。
那么受害者接收到的NTP回复数据包量将如下:
虚假数据包发送数量 x 全世界NTP服务器的数量= 最终DDOS攻击的流量。
Anycast如何防范DDOS攻击?
好了,铺垫完成以后,回到正题。Anycast如何防范DDOS攻击?
DDOS攻击最关键一点,是需要把所有地理位置分散的小流量最终汇集到一个点。从而形成涛涛洪水。
正所谓以彼之道,还施彼身。
在Anycast环境下,由于多个地理位置不同的主机同时使用同一个IP地址。正因为如此,DDOS流量在穿越运营商路由器时,路由器会根据地理位置远近把数据包路由到距离源地址最近的受害者主机站点。从而分散掉整个DDOS流量。
还是以上述NTP协议DDOS为例。
假设IP为1.2.3.4的受害者恰巧布局了Anycast协议。其服务器分布在全国各地。
当DDOS来临时,不同的NTP服务器根据路由选择,把流量发送到距离NTP服务器最近的受害者服务器上。
最终,原本10Gbps-100Gbps的汇总流量被各个目标服务器以1Gbps不足的DDOS攻击消化掉。
DDOS流量最终被每一个Anycast 主机分散掉了。
总结
今天我们一起研究了什么是Anycast,以及Anycast的妙用。
正如开头所说,Anycast并不是一个新技术,可谓是旧瓶装新酒。
但是通过结合BGP协议,变相提高了Anycast的使用广度和深度。
最后,针对Anycast 做如下总结:
优点:
- Anycast可以零成本实现负载均衡,无视流量大小。
- Anycast是天然的DDOS防御措施,体现了大事化小,小事化了的解决方法。
- 部署Anycast可以获得设备的高冗余性和可用性。
- Anycast适用于无连接的UDP,以及有连接的TCP协议。
缺点:
- Anycast严重依赖于BGP的选路原则,在整个Internet网络拓扑复杂的情况下,会导致次优路由选择。
心之所向,素履以往,生如逆旅,一苇以航