博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
002.AnyCast技术浅析
阅读量:5214 次
发布时间:2019-06-14

本文共 5983 字,大约阅读时间需要 19 分钟。

  一 常见通信方式

  
  1.1 UniCastAnyCast
  
  UniCast,即单播,指网络中一个节点与另一个节点之间需要建立一个单独的数据通道,从一个节点发出的信息只被一个节点收到,这种传送方式称为单播。即网络中从源向目的地转发单播流量的过程,IP地址与节点(主机)一一对应,单播流量地址唯一。每个节点必须分别对需要访问的节点发送单独的查询,而被访问节点必须向每个访问节点发送所申请的数据包拷贝。
  
  003
  
  1.2 MultiCast
  
  MultiCast,即多播,指网络中一个节点发出的信息被多个节点(一组节点)接受。这种技术用于多媒体应用、多用户交互(如聊天室)、软件分发等,相比与传统的UniCast可以大大提高效率。在子网内实现MultiCast较为简单,跨越子网时需要Route 、Gateway等设备的支持。
  
  004
  
  1.3 BroadCast
  
  BroadCast,即广播,指网络中一个节点发出的信息被网络中的所有可能(通常的同子网下)的节点接受。网络设备简单地将它接收到的任何广播报文副本转发到除该报文到达的接口以外的每个接口。
  
  005
  
  二 什么是BGP AnyCast
  
  AnyCast,也称任意播,或泛播,指IPV6协议中一个发送方同最近的一组接收方之间的通信。BGP AnyCast就是利用一个(或多个)AS号码在不同的地区广播相同的一个IP段。即不同地区若干个AS号广播同一个IP(段)。
  
  Any Cast IP拥有MultiCast和UniCast各自的部分特性:
  
  从宏观上来说,AnyCast类似于MultiCast,同一种类型的数据流同时存在多个接收者。
  
  而从微观上来说,AnyCast又有着UniCast的唯一性。每一个单独的IP会话都能够找到唯一的源主机和目标主机(最终通信双方唯一),如下图所示。
  
  即在AnyCast环境下,同时存在多个有效的数据包接收端,但具体一个特定IP数据包而言,仅有一个接收端主机收到了此数据包。
  
  AnyCast利用BGP的寻路原则,短的AS PATH会选成最优路径(BGP寻路原则之一),从而优化了访问速度。
  
  即可多个不同服务器使用了相同的IP地址(该地址即这一组主机的共享单播地址)的一种技术。当发送方发送报文给这个共享单播地址时,报文会根据路由协议路由到这一组主机中离发送方最近的一台,所以这个技术也可以用来做负载均衡。
  
  006
  
  三 AnyCast技术特点
  
  AnyCast的定义是:当一个单播地址被分配到多于一个的接口上(即目的地址不是唯一)时,发到该接口的报文被网络路由到由路由协议度量的“最近”的目标接口(某个节点)上。
  
  AnyCast允许源节点向一组目标节点中的一个节点发送数据报,而这个节点由路由系统选择,对源节点透明。
  
  同时,路由系统选择“最近”的节点为源节点提供服务,从而在一定程度上为源节点提供了更好的服务也减轻了网络负载。AnyCast分布的服务节点共享相同的IP地址,同时在IP层进行透明的服务定位,这使得各种网络服务特别是应用层服务具有更强的透明性,如DNS(DomainNameSystem,域名系统),用户不需要特殊配置也不用关心访问的是哪一台DNS服务器。
  
  其次,路由系统选择了“最近”的服务,缩短了服务响应的时间,同时减轻了网络负载。
  
  最后,相同的服务在网络上冗余分布,路由系统可以提供机制选择负载相对轻的带宽相对高的路径来转发报文,这样就给用户带来了两个方面的好处:
  
  减弱了分布式拒绝服务攻击(DDoS:DistributedDenialofService)对用户带来的影响。当AnyCast组中某一个成员或者几个成员受到攻击时,负责报文转发的路由器可以根据各个组成员的响应时间来决定报文应该转发到哪个成员上,而受到攻击的成员由于没有响应,所以报文就不会被转发到此节点,同时,由于AnyCast提供的服务访问透明性,组成员也相对较难受到DDoS攻击。
  
  减弱了网络拥塞给用户带来的影响,当AnyCast的某些组成员处在拥塞的网段时,它的响应时间就较长,报文可以被转发到响应较好的成员那里,对于最终用户而言是无感知的。
  
  四 AnyCast应用场景
  
  AnyCast主要应用于大范围的DNS部署,CDN数据缓存,数据中心等。
  
  疑惑一:在AnyCast网络中多个主机用同一个IP,这岂不是IP地址冲突了?
  
  解惑:首先,每一个节点主机处在不同的地理位置,相互之间不在同一个广播域内。所以把所有主机配置成相同的IP地址并不会引起我们日常所见的IP地址冲突;
  
  其次,在仅仅配置相同IP之外,还需要借助BGP协议进行地址宣告,通过BGP,各个站点向Internet宣告相同的AnyCast IP地址。
  
  疑惑二:具有多条到达目的的路径,且具有相同Anycast IP地址的Prefix,数据包如何做到就近路由选址的呢?。
  
  解惑:当用户的DNS(数据)请求到达运营商的宽带路由器以后,运营商的路由器会根据BGP的选路原则选择到达目的的最优路径。在用户宽带运营商和DNS服务器Internet运营商相同的情况下,最终会以IGP metric为关键因素来决定哪个DNS服务器给用户提供服务。而IGP的 Metric某种程度上就是物理距离的代表,从而实现就近原则。
  
  4.1 场景一:基于IP Anycast+BGP的DNS部署
  
  背景:假设部署三个DNS服务器站点,地点分别在北京、上海、广州,且服务于全国的DNS解析。
  
  常规方案:为了实现三个DNS服务器负载均衡,通常会考虑到使用硬件负载均衡设备,例如常见的F5负载均衡设备等。
  
  方案缺陷:
  
  网络流量瓶颈:所有的流量都需要先通过负载均衡设备,而硬件设备本身的吞吐量决定了整个网络环境的吞吐量。
  
  高昂的硬件成本:为了实现全国的流量负载均衡,需要极大吞吐量的硬件设备,从而大大提高了部署成本。
  
  AnyCast方案:
  
  方案优点:通过AnyCast技术,无需要借助任何第三方负载均衡器,就可以轻松达到负载均衡的效果,同时还提供了冗余和高可靠性。
  
  方案实施:
  
  007
  
  通过配置三个DNS站点的服务器IP为相同IP,例如1.1.1.1/32。然后通过各个站点的BGP对互联网宣告1.1.1.0/24的网段。
  
  以上步骤完成以后,互联网路由表针对1.1.1.1/24会有三个不同的出口路由器,分别是北京,上海,广州。
  
  假设现有用户都使用1.1.1.1作为DNS服务器,依据就近原则,若用户地域为东北,则会优先采用北京DNS服务器进行解析。
  
  同理,贵阳的宽带路由器通过查看BGP路由,发现1.1.1.1出口最优路由是在广州,那么贵阳用户的DNS数据包将被发送给广州的DNS服务器。而江南一带的则是上海DNS服务器负责提供解析服务。
  
  故障容灾:
  
  若三台DNS服务器中某一台出现故障,如广东DNS服务宕机,BGP协议会立即停止通告此1.1.1.0/24的网段,Internet路由表将会只有北京和上海的DNS可供选择。
  
  此时原广东DNS服务的用户将再次根据“就近原则”选择其他DNS服务器,例如上海DNS,从而达到业务的平滑迁移和服务的高可用性。
  
  总结结论:
  
  全国用户最终会根据距离DNS服务器的远近来判断使用哪个DNS服务器做域名解析;
  
  从DNS角度来说,正因为不同的地理位置用户会根据就近路由判断,从而选择不同的DNS服务器,最终会使三台DNS服务器达到负载均衡的效果;
  
  若其中某一个节点出现故障以后,业务会立即自动迁移到其他可用的节点上,从而避免网路服务故障。
  
  4.2 场景二:防范DDOS攻击
  
  4.2.1 DDoS简述
  
  DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃。
  
  DDoS(分布式拒绝服务)指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,同时对一个或多个目标发动DoS攻击。
  
  DDOS攻击主要分为三类:流量型攻击;连接型攻击;特殊协议缺陷。
  
  最常见的为流量型攻击,当大规模异常流量涌入时,会占用运营商核心MPLS网路带宽,同时这种洪泛攻击会给客户网络造成短时间的瘫痪。
  
  案例参考:以NTP协议为例,NTP协议基于C/S模式,客户发起NTP时间查询申请,服务器响应NTP查询。假设有成千上万的僵尸主机纷纷伪造如下数据包并不断连续发送给全球NTP服务器:
  
  伪造源地址:1.2.3.4 #此地址为真正需要攻击的地址
  
  目标地址:全球各个NTP服务器地址 #大批量提供响应的节点
  
  当全球各地的NTP服务器收到此查询以后,它会把查询结果发送回给真正的被攻击者1.2.3.4,此时IP地址为1.2.3.4的受害者收到全世界的NTP服务器发过来的数据包时,其有限的带宽链路就很容易产生拥塞并造成服务中断。受到的DDoS攻击流量=虚假数据包发送数量x全世界NTP服务器的数量。
  
  4.2.2 AnyCast防范DDOS攻击
  
  DDOS攻击最关键是需要把所有地理位置分散的小流量最终汇集为一个巨大的流量,从而发起攻击。
  
  在AnyCast环境下,由于多个地理位置不同的主机同时使用同一个IP地址。因此,DDOS攻击流量在穿越运营商路由器时,路由器会根据地理位置远近把数据包路由到距离源地址最近的受害者主机站点,从而间接又再次分散了整个DDOS流量。
  
  如上案例,假设IP地址为1.2.3.4的受害者采用了AnyCast协议部署网络,其服务器分布在全国各地。当DDOS洪流攻击时,不同的NTP服务器根据路由选择,把流量发送到距离NTP服务器最近的受害者服务器上。最终,大流量的攻击被逐步分解。
  
  4.3 场景三:大型企业CDN部署
  
  AnyCast在大型企业中也常用于CDN部署,采用了Anycast技术为用户提供距离用户最近的Cache服务器,可大大提高了用户的服务体验。在全球建设了多个数据中心,凭借于AnyCast的高冗余性,任何一个数据中心出现网络、系统故障。均不会影响客户体验度,所有当地的客户流量会自动路由到其他就近的数据中心。相对传统企业网络面对网络节点故障的脆弱性,Anycast具有很强的优势。
  
  008
  
  4.4 场景四:时延敏感度高的内容服务业务
  
  针对https/tcp等对时延敏感的协议(涉及多次握手的协议),由于用户位置流动,而数据中心相对固定,因此会随着用户的移动,体验可能出现严重下降。
  
  基于以上背景,可在全球有相关业务的地址位置部署小型数据中心,所有小型数据中心和总部数据中心保持长期稳定的TCP会话连接。当相对于总部的远端用户访问服务时,TCP连接实际是发送至用户当地的小型数据中心,从而降低了访问延时,提高了用户体验度。
  
  在全球大规模部署多个节点时,为了确保用户能就近访问所在地的数据中心,可把所有小型数据中心的IP采用相同地址,通过BGP发布至Internet。
  
  当用户访问服务时,DNS解析会返回此小型数据中心的IP,然后用户运营商会根据就近原则路由用户数据到最近的小型数据中心,从而达到了上面所述的优化延迟的目的。/*

* The ext4_map_blocks(yongshiyule178.com) function tries to look up the requested blocks,

* and returns if the blocks are already mapped.
*
* Otherwise it takes the write lock of the i_data_sem and allocate blocks
* and store the allocated blocks www.thd178.com in the result buffer head and mark it
* mapped.
*/
int ext4_map_blocks(handle_www.dasheng178.com t *handle, struct inode *inode,
struct ext4_map_blocks www.gouyiflb.cn *map, int flags)
{
.....
/*
* New blocks allocate and/or writing to uninitialized extent
* will possibly result in updating i_data, so we take
* the write lock of i_data_sem, and call get_blocks()
* with create == 1 flag.
*/
down_write((&EXT4_I(inode)->i_data_sem)
  
  五 AnyCast总结
  
  5.1 优点
  
  AnyCast可以零成本实现负载均衡,同时对于客户端而言是透明的,且无视流量大小;
  
  AnyCast是非常有效的DDOS防御措施,采用了逐层分解的思想;
  
  部署AnyCast可以获得设备的高冗余性和可用性,即当任意目的节点异常时,可自动路由到就近目的节点;
  
  AnyCast适用于无连接的UDP,以及有连接的TCP协议;
  
  基于AnyCast的特性——就近原则,很大程度上提升了客户端的响应速度。
  
  5.2 缺点
  
  AnyCast严重依赖于BGP的选路原则,在整个Internet网络拓扑复杂的情况下,可能导致次优路由选择。

转载于:https://www.cnblogs.com/qwangxiao/p/10193217.html

你可能感兴趣的文章
.net 文本框只允许输入XX,(正则表达式)
查看>>
C#修饰符
查看>>
20.核心初始化之异常向量表
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
js 封装获取元素的第一个元素
查看>>
iOS 获取Home键指纹验证
查看>>
Python-Mac 安装 PyQt4
查看>>
P2571 [SCOI2010]传送带
查看>>
哈希表1
查看>>
用Data Url (data:image/jpg;base64,)将小图片生成数据流形式
查看>>
实验2-2
查看>>
C#初识
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
JavaScript(三) 数据类型
查看>>
移动端rem布局屏幕适配插件(放js中便可使用)
查看>>
Docker
查看>>
bzoj2259 [Oibh]新型计算机
查看>>
对位与字节的深度认识
查看>>