浅析Anycast技术[通俗易懂]

浅析Anycast技术[通俗易懂]什么是AS号码AS号码即自治系统号码,是用来标识独立的自治系统的,在同一个自治系统内,使用相同内部路由协议,自治系统间使用外部路由协议(通常是BGP协议)。申请AS号码的单位需要与两家以上(包括两家)、有不同AS号码的网络接入商进行网络互联,并计划三个月内与他们同时运行BGP协议进行外部路由。什么是BGPAnyCast?BGPanycast就是利用一个(多个)as号码在不同的地区广播相同的一个ip段。利用bgp的寻路原则,短的aspath会选成最优路径(bgp寻路原则之n),从.

大家好,又见面了,我是你们的朋友全栈君。

什么是AS号码

AS号码即自治系统号码,是用来标识独立的自治系统的,在同一个自治系统内,使用相同内部路由协议,自治系统间使用外部路由协议(通常是BGP协议)。
申请AS号码的单位需要与两家以上(包括两家)、有不同AS号码的网络接入商进行网络互联,并计划三个月内与他们同时运行BGP协议进行外部路由。

什么是BGP AnyCast?

BGP anycast就是  利用一个(多个) as号码在不同的地区广播相同的一个ip段。
利用bgp的寻路原则,短的as path 会选成最优路径(bgp寻路原则之n),从而优化了访问速度。

其实bgp anycast是不同服务器用了相同的ip地址。

一、常见通信方式

1.1 UniCast

UniCast,即单播,指网络中一个节点与另一个节点之间需要建立一个单独的数据通道,从一个节点发出的信息只被一个节点收到,这种传送方式称为单播。即网络中从源向目的地转发单播流量的过程,IP地址与节点(主机)一一对应,单播流量地址唯一。每个节点必须分别对需要访问的节点发送单独的查询,而被访问节点必须向每个访问节点发送所申请的数据包拷贝。

浅析Anycast技术[通俗易懂]

1.2 MultiCast

MultiCast,即多播,指网络中一个节点发出的信息被多个节点(一组节点)接受。这种技术用于多媒体应用、多用户交互(如聊天室)、软件分发等,相比与传统的UniCast可以大大提高效率。在子网内实现MultiCast较为简单,跨越子网时需要Route 、Gateway等设备的支持。

浅析Anycast技术[通俗易懂]

1.3 BroadCast

BroadCast,即广播,指网络中一个节点发出的信息被网络中的所有可能(通常的同子网下)的节点接受。网络设备简单地将它接收到的任何广播报文副本转发到除该报文到达的接口以外的每个接口。

浅析Anycast技术[通俗易懂] 

二 什么是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地址(该地址即这一组主机的共享单播地址)的一种技术。当发送方发送报文给这个共享单播地址时,报文会根据路由协议路由到这一组主机中离发送方最近的一台,所以这个技术也可以用来做负载均衡

浅析Anycast技术[通俗易懂]

三 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技术,无需要借助任何第三方负载均衡器,就可以轻松达到负载均衡的效果,同时还提供了冗余和高可靠性。

方案实施:

浅析Anycast技术[通俗易懂] 

通过配置三个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具有很强的优势。

浅析Anycast技术[通俗易懂]

4.4 场景四:时延敏感度高的内容服务业务

针对https/tcp等对时延敏感的协议(涉及多次握手的协议),由于用户位置流动,而数据中心相对固定,因此会随着用户的移动,体验可能出现严重下降。

基于以上背景,可在全球有相关业务的地址位置部署小型数据中心,所有小型数据中心和总部数据中心保持长期稳定的TCP会话连接。当相对于总部的远端用户访问服务时,TCP连接实际是发送至用户当地的小型数据中心,从而降低了访问延时,提高了用户体验度。

在全球大规模部署多个节点时,为了确保用户能就近访问所在地的数据中心,可把所有小型数据中心的IP采用相同地址,通过BGP发布至Internet。

当用户访问服务时,DNS解析会返回此小型数据中心的IP,然后用户运营商会根据就近原则路由用户数据到最近的小型数据中心,从而达到了上面所述的优化延迟的目的。

五 AnyCast总结

5.1 优点

  • AnyCast可以零成本实现负载均衡,同时对于客户端而言是透明的,且无视流量大小;
  • AnyCast是非常有效的DDOS防御措施,采用了逐层分解的思想;
  • 部署AnyCast可以获得设备的高冗余性和可用性,即当任意目的节点异常时,可自动路由到就近目的节点;
  • AnyCast适用于无连接的UDP,以及有连接的TCP协议;
  • 基于AnyCast的特性——就近原则,很大程度上提升了客户端的响应速度。

5.2 缺点

AnyCast严重依赖于BGP的选路原则,在整个Internet网络拓扑复杂的情况下,可能导致次优路由选择。

参考:https://blog.csdn.net/enweitech/article/details/79778528

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142244.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月10日 上午10:00
下一篇 2022年5月10日 上午10:20


相关推荐

  • pycharm安装django失败

    pycharm安装django失败pycharm 安装 django 失败 原因是报了一个 ssl 异常 也就是说和国外源站服务器 ssl 失败 所以选用国内源站安装 选中 Options 输入 ihttps pypi tuna tsinghua edu cn simple 然后再点击 InstallPacka 即可安装成功 这里有个小问题 手动执行 pipinstall ixxx 也不能安装 遗留问题

    2026年3月16日
    2
  • c++语言截取字符串,详解C++ string常用截取字符串方法

    c++语言截取字符串,详解C++ string常用截取字符串方法string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求:find(stringstrSub,npos);find_last_of(stringstrSub,npos);其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子字符串首次出现的位置,否则返回-1;注:(1)find_last_of的npos为从末尾开始寻找的位置。(2)下文中用到的strs…

    2022年5月19日
    33
  • AI Coding 中的概念 Agentic Coding(智能体编程)简介

    AI Coding 中的概念 Agentic Coding(智能体编程)简介

    2026年3月13日
    2
  • 二分法

    二分法二分法

    2022年4月24日
    50
  • byte转string字符

    byte转string字符开发过程中从数据库拿出来的数据用tostring会显示为System.Byte[]查了下资料要发现网上的都不适用记录下自己的foreach(DataRowrowinds.Tables[0].Rows){    byte[]datbytes=(byte[])row["dat"];    for(inti=0;i<datbytes.Length;i++)…

    2022年6月29日
    71
  • Qt动画播放之QMovie类[通俗易懂]

    Qt动画播放之QMovie类[通俗易懂]主要是用到QMovie类实现在事件触发时开启动画播放效果(需要注意的是,这个动画播放默认是循环播放的,如果不做特殊处理动画会一直播放)QMovie*movie=newQMovie(“aaa.gif”);ui->movieLabel->setMovie(movie);movie->start(); //启动gif图片//movie->stop(); /…

    2022年6月29日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号