关于Anycast的介绍[通俗易懂]

关于Anycast的介绍[通俗易懂]Anycast最初是在RFC1546中提出并定义的,它的最初语义是,在IP网络上通过一个Anycast地址标识一组提供特定服务的主机,同时服务访问方并不关心提供服务的具体是哪一台主机(比如DNS或者镜像服务),访问该地址的报文可以被IP网络路由到这一组目标中的任何一台主机上,它提供的是一种无状态的、尽力而为的服务(如图1)。目前对于Anycast的中文译称主要有,“任播”、“泛潘”、“选播”等,本

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

Anycast最初是在RFC1546中提出并定义的,它的最初语义是,在IP网络上通过一个Anycast地址标识一组提供特定服务的主机,同时服务访问方并不关心提供服务的具体是哪一台主机(比如DNS或者镜像服务),访问该地址的报文可以被IP网络路由到这一组目标中的任何一台主机上,它提供的是一种无状态的、尽力而为的服务(如图1)。目前对于Anycast的中文译称主要有,“任播”、“泛潘”、“选播”等,本文一律使用“任播”一词,或者直接使用英文单词“Anycast”。

   

关于Anycast的介绍[通俗易懂]

 

1 任播示意图

Anycast作为一种新的网络服务被IPv6接纳,并且在最初的IPv6标准中为Anycast分配了单独的地址空间(RFC2526),不过,新的IPv6标准(RFC 2373)已经去掉了Anycast的单独地址空间,而是使其共享IPv6的单播地址空间。标准对anycast的定义是,当一个单播地址被分配到多于一个的接口上时,发到该接口的报文被网络路由到由路由协议度量的“最近”的目标接口上。与UnicastMulticast类似,Anycast也是IP网络的一种通信模式。Unicast允许源结点向单一目标结点发送数据报,Multicast允许源结点向一组目标结点发送数据报,而Anycast则允许源结点向一组目标结点中的一个结点发送数据报,而这个结点由路由系统选择,对源结点透明;同时,路由系统选择“最近”的结点为源结点提供服务,从而在一定程序上为源结点提供了更好的服务也减轻了网络负载

正是Anycast这一通信模式的特点,使它在IP网络中具有了一定程序的应用前景。首先,分布的服务共享相同的IP地址,同时在IP层进行透明的服务定位,这使得各种网络服务特别是应用层服务具有更强的透明性,比如DNS,在IPv6网络中它可以共享一个熟知的IP地址,用户不需要特殊配置也不用关心访问的是哪一台DNS服务器;其次,路由系统选择了“最近”的服务,缩短了服务响应的时间,同时减轻了网络负载;最后,相同的服务在网络上冗余分布,路由系统可以提供机制选择负载相对轻的带宽相对高的路径来转发报文,这样就给用户带来了两个方面的好处:1)    减弱了DOS攻击对用户带来的影响。当Anycast组中某一个成员或者几个成员受到攻击时,负责报文转发的路由器可以根据各个组成员的响应时间来决定报文应该转发到哪个成员上,这样受到攻击的成员由于没有响应,所以报文就不会被转发到那里,同时,由于Anycast提供的服务访问透明性,组成员也相对较难受到DOS攻击。2)   减弱了网络拥塞给用户带来的影响。同上面的道理,当Anycast的某些组成员处在拥塞的网段时,它的响应时间就较长,报文可以被转发到响应较好的成员那里

虽然Anycast在以上方面有一定的优势,但是目前Anycast的应用并不如期待中的一样。应用层对Anycast的使用主要有服务器自动选择、服务自动定位,服务器自动选择可以使用在需要对某种应用层服务提供多个镜像服务器的情况,比如FTP服务、在线游戏服务等。服务自动定位可以使用在主机不需要特别配置而使用一种知名服务的情况,典型的如DNS。网络层实现Anycast主要是依据Anycast路由表对报文进行透明转发,向上层提供服务,这样应用层就不需要专门的Anycast程序模块。Anycast路由表记录了一个Anycast组所有成员的Unicast地址,当路由器收到一个指向Anycast地址的报文时,首先搜索Anycast路由表找到相应的Anycast组,然后把报文转发到这个组中的一个成员上。鉴于应用层对全球范围内的Anycast的需求,所以促成了对网络层全球Anycast机制的研究。本文关注的重点是基于IPv6的全球范围网络层的Anycast机制,在这样的机制下,应用层只需要使用网络层提供的服务来实现应用层的Anycast

  网络层任播需要解决的问题

IP层实现全球范围内的Anycast主要面临两个方面的问题,一方面是全球范围内的Anycast使得路由聚合变得困难;另一方面是无状态的服务会导致基于单播的有状态连接中途失效。下面对这两个问题进行详细阐述。

路由聚合是指为缩短路由表长度提高路由效率,把具有相同地址前缀的多个IP地址合并成一个仅包含相同前缀的网络地址的方法,在实际应用中,这些IP地址必须对应相同的下一跳端口才可以在路由表中被合并成一项。由于基于IPv6的网络的IP地址采用128位二进制位表示网络中一个结点(路由器或者主机)的地址,地址空间相当大,所以必须采用路由聚合的方法来缩短路由表,这样就要求基于IPv6网络的路由拓扑必须具有一个相对严格的层次结构,共享相同前缀的一个子网拓扑称作一个路由域(Domain),在这种情况下,当Anycast的组成员分布在不同的路由域中时,Anycast路由表就不能聚合,如图2所示,A1A2是同一个Anycast组的两个成员,它们分布在前缀分别是3ffe:8140::/282001:220::/32的两个不同的路由域中,因为这两个单播地址不能聚合,所以负责报文转发的中间路由器必须为这两个成员分别存储一个路由项,在全球部署一个Anycast服务时,如果这样的情况很多,那Anycast路由表就会变得很大,导致路由效率急剧下降。正是这样的情况给全球部署Anycast服务带来了很大困难。

 

 

关于Anycast的介绍[通俗易懂]

 

 

2 IPv6网络路由拓扑层次结构

由于Anycast是一种无状态的服务,在一次有状态的通信过程中,如果使用了Anycast服务,通信就有可能中途失败。以TCP通信这例,如图3所示,A一个Anycast组标志,M1M2是这个组的两个成员,SenderA进行TCP通信,实际上TCP数据被转发到A的一个成员上,假如TCP连接建立连接时报文转发到了M1上,通信过程中由于某种不确定因素,在通信结束之前报文又被转发到了M2上,这样TCP通信便会失败,原因是TCP通信过程中需要维护双方的状态信息(如滑动窗口大小等),报文被转发到M2后,双方的状态就不再一致,通信失败。再比如,当使用RTP协议进行流媒体传输的时候,也会出现同样的情况。

 

 

关于Anycast的介绍[通俗易懂]

 

3 有状态通信示意图

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142288.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python使用RSA加密算法

    python使用RSA加密算法最近换了工作,由于新公司是做个人和企业征信业务的,所以对数据的隐私性看的非常重要,所有涉及隐私的数据一律都要进行加密进行传输。那么问题来了,对我我要做的工作,就是要实现我们接口自动化,免不了要接触加密-签名-解密-验签等一系列过程。这时候就觉得大学真的白学密码学了。。。基于我用python语言搞,那我这里就说说我是如何实现python对数据进行RSA加解密的吧。。一、查找python支…

  • laravel中如何在模型中自关联?

    laravel中如何在模型中自关联?

  • iPhone手机屏幕尺寸分辨率一览

    iPhone手机屏幕尺寸分辨率一览机型物理像素逻辑像素规格对角线iPhone12ProMax1284*2778px428*926pt@3×6.7英寸iPhone12Pro1170*2532px390*844pt@3×6.1英寸iPhone121170*2532px390*844pt@3×6.1英寸iPhone12mini1080*2340px360*780pt@3×5.4英寸iPhone11ProMax1242*2688px414*8…

  • 简单说明什么是宏观社会环境和微观社会环境?_kafka是什么

    简单说明什么是宏观社会环境和微观社会环境?_kafka是什么Kafka通俗理解Apachekafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息中间件,只是粗略的讲解,目前kafka已经可以做更多的事情。举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。…

  • 怎么使用linux命令重启服务器

    怎么使用linux命令重启服务器

  • 如何读取npy文件_mfc设置保存文件的类型

    如何读取npy文件_mfc设置保存文件的类型npy文件既可以保存数据也可以保存数据集(包括图片)下面只说保存简单数据实例:使用npy文件保存g_D_loss的数据,g_D_loss是一个元组,已经存入数据。withopen(‘./g_D_loss.npy’,’wb’)asf:np.save(f,g_D_loss)读取:file=”./g_D_loss.npy”…

发表回复

您的电子邮箱地址不会被公开。

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