Anycast技术概述
1.      IPv6地址类型的概述
 IPv6地址长度为128比特,地址按照其传输类型分为三种,即单播地址(UnicastAddress)、多播地址(Multicast Address)和任播地址(Anycast Address)。单播和多播地址在IPv4中已经存在,任播地址是IPv6中新的成员,RFC 2723IPv6地址结构中的的任播地址定义为一系列网络接口(通常属于不同的节点)的标识,其特点是:发往一个任播地址的分组将被转发到由该地址标识的“最近”的一个网络接口(“最近”的定义是基于路由协议中的距离度量)。而且,任播地址与常规单播地址相似。向单播地址发送数据分组的节点并不需要知道它是单播地址。
一般分配给属于不同节点的多个接口。发送给一个任意点播地址的包传送到该地址标识的、根据选路协议距离度量最近的一个接口上。
单一的任播地址被分配给多个节点(任播成员):每次仅有一个分配任播地址的成员与发送端通信。一般与任播地址相关的有三个节点,当源节点发送一个目的地地址为任播地址地数据包时,数据包被发送给三个节点中的一个,而不是所有的主机。
任播机制的优势在于源节点不需要了解服务节点或目前网络的情况,而可以接收特定服务,当一个节点无法工作时,带有任播地址的数据包又被发往其他两个主机节点,从任播成员中选择合适的目的地节点取决于任播路由协议。
Anycast允许源结点向一组目标结点中的一个结点发送数据报,而这个结点由路由系统选择,对源结点透明;同时,路由系统选择“最近”的结点为源结点提供服务,从而在一定程序上为源结点提供了更好的服务也减轻了网络负载。
2.      IPv6任播技术的分析
任播技术是一种新的网络应用,它能够支持把同样的地址可以分配给多个节点去提供特定服务的以服务导向的地址,而带有任播目的地地址的数据报能够使用相同的任播地址并被传给众多节点中的任意一个。因特网研究任务组(IRTF)在1993年到RFC 1546中已经定义了任播技术的作用:“主机向一个任播地址发送数据报,网络负责尽力将数据报传递到至少一个,最好也是一个,按任播地址接收数据的服务器上。'采用任播机制的初衷是彻底去简化在互联网中寻找合适服务器的任务;任播通信的基本概念是从物理主机设备中分离出的逻辑服务标识符,任播地址可以根据服务类型来分配,使得网络服务担当一个逻辑主机的角色。
虽然目前任播技术的定义不是十分清楚,但是终端主机通过路由器是被基于包交换所决定。任播技术的概念并不局限于网络层,它也可以在其他层实现(例如:应用层),网络层和应用层的任播技术均有优点和缺点。
3.      IPv6任播技术的应用
适合于任播通信的应用有很多,其中比较重要的一个应用是服务器位置。发送端的主机可以在众多同样功能的主机中选择其中一个,如果合理地利用任播路由方法去将任播需求均匀的分配到主机上,任播主机之中的负载分配目标可以达到。在任播主机中使用简便的随即选择方法在网络层任播技术中却不会奏效,例如:CPU的负载,因为很难知道每个服务器的资源使用状态,而应用层任播技术使用该方法却是实用的。
另一个重要应用是服务位置,发送端主机可以通过说明任播地址去从多个任播主机中选择与最佳的、最小时延的、最大输出量的主机进行通信,例如:在诸如移动ad hoc网络这类动态改变环境下运用该方法特别适用。通过网络层的任播技术,节点可以和合适的或是最近的服务器进行通信,并通过应用层任播技术获得该类服务。
网络层任播技术的优势在于可以提供令源节点在无须借助服务节点和网络的情况下,能够接收到特定服务机制的简便方法。
3.1.   已有的任播服务
3.1.1.    RFC1546定义的任播
根据RFC1546的说明,IPv4的任播地址不同于IPv4的单播地址,它建议从IPv4的地址空间分配出一块独立的地址空间作为任播地址空间。RFC1546定义的这种任播没有得到广泛的使用。
3.1.2.    共享单播地址任播
这种方法指的是多个主机共享同一个单播地址。出于负载平衡的目的,在DNS服务器和某些Web服务器中已经使用过为不同地点的主机共享同一个单播地址。比如在1992年的奥运会站点就曾使用这种方法。共享单播地址的实现使用下述方法:
(1)RIR(Regional Internet Registry)处获得独立的IPv4前缀
(2)IPv4前缀被配置在Internet上的不同位置的多个主机上
(3)包含该地址前缀的主机路由或路由器获得所有位置的通告
(4)客户端将根据路由表的配置到达最近的主机共享单播地址试图复制单播服务,它的分布式服务是全球范围的。共享单播地址只适用于特定的上层协议。如DNSHTTP。它没有考虑以下情况,由于传输层不能觉察到路由表的变化.在传输层同一个连接的生命周期内客户端可能会连接到多个服务器。这种情况会使传输层协议产生混淆。
3.1.3.    RFC2373定义的Ipv6任播
1998年的RFC2373规定了IPv6寻址体系结构.在这个文档中改进了任播的定义——发送到一个任播地址的报文被传送到由该地址标识的接口之一(最近的一个,根据路由协议的距离量度标准)
RFC2373定义的Ipv6的任播模型没有限制路由选择的下部结构,也没有限制可使用该服务的上部协议,但由于任播技术尚不成熟。RFC2373Ipv6的任播模型增加了几项限制。
4.      任播技术的优势
任播通信模式的特点,使它在IP网络中具有了一定程序的应用前景。首先,分布的服务共享相同的IP地址,同时在IP层进行透明的服务定位,这使得各种网络服务特别是应用层服务具有更强的透明性,比如DNS,在IPv6网络中它可以共享一个熟知的IP地址,用户不需要特殊配置也不用关心访问的是哪一台DNS服务器;其次,路由系统选择了“最近”的服务,缩短了服务响应的时间,同时减轻了网络负载;最后,相同的服务在网络上冗余分布,路由系统可以提供机制选择负载相对轻的带宽相对高的路径来转发报文,这样就给用户带来了两个方面的好处:
4.1.   减弱了DOS攻击对用户带来的影响。
当任播组中某一个成员或者几个成员受到攻击时,负责报文转发的路由器可以根据各个组成员的响应时间来决定报文应该转发到哪个成员上,这样受到攻击的成员由于没有响应,所以报文就不会被转发到那里,同时,由于任播提供的服务访问透明性,组成员也相对较难受到DOS攻击。
4.2.   减弱了网络拥塞给用户带来的影响。
同上面的道理,当任播的某些组成员处在拥塞的网段时,它的响应时间就较长,报文可以被转发到响应较好的成员那里。
虽然任播在以上方面有一定的优势,但是目前任播的应用并不如期待中的一样。应用层对任播的使用主要有服务器自动选择、服务自动定位,服务器自动选择可以使用在需要对某种应用层服务提供多个镜像服务器的情况,比如FTP服务、在线游戏服务等。服务自动定位可以使用在主机不需要特别配置而使用一种知名服务的情况,典型的如DNS。网络层实现任播主要是依据任播路由表对报文进行透明转发,向上层提供服务,这样应用层就不需要专门的任播程序模块。任播路由表记录了一个任播组所有成员的Unicast地址,当路由器收到一个指向任播地址的报文时,首先搜索任播路由表找到相应的任播组,然后把报文转发到这个组中的一个成员上。鉴于应用层对全球范围内的任播的需求,所以促成了对网络层全球任播机制的研究。
5.      IPv6任播技术的问题和解决方法
IPv6任播技术仍然存在许多问题。首先是任播技术的使用场合和应用任播技术的优点,其次是基于IPv6的任播技术是一个路由协议并没有被包括IPv6的规范说明中,而这正是使得任播技术应用更广泛不可获缺的条件,路由器应该在决定目的地网络让任播包可以合适的传送地过程中起到主动作用。目前的任务是需要设计和应用合适的任播路由协议到任播应用场合之中,并让互联网能够逐步去支持任播技术。例如:任播路由即使在因特网中只有少量的节点或路由器支持任播技术时也能够恰当的工作。所有基于TCP和一些基于UDP的协议在互联网应用中已经说明了,端主机之间建立通信过程,并在交换信息过程中认为它们是一致的。
5.1.   主机向任播成员通告参与的问题
节点申明除了针对任播地址的公开路由信息以外,它们可以接受的数据报,而在IPv6的技术说明中节点必须是一个路由器。一个主机准备加入成为任播成员或离开时,它必须有不同的能力去向“最近”的任播路由器通告它目前的状态(加入或离开)。
5.2.   支持高层申明协议的问题
因为任播技术拥有无状态的特性,它不能确保属于相同的任播地址的所有数据报会传到同一个目的地节点,然而这将会导致的是诸如TCP这类的全状态协议不被支持这一严重的问题。当主机向任播地址发起TCP连接时,接收端主机为了确认信息包,它将不能设置自己的任播地址作为源地址。IPv6技术说明中不允许任播地址来源于在包头设置的源地址,这主要是由于IPv6任播地址没有定义单独的源节点。如果协议允许任播地址被设置到包头的源地址,接受端主机在通信过程中将不能确信所有发送的数据包来自于同一个主机,也就是说主机的任播地址不能接收到包确认。
5.3.   实现任播路由的问题
目前现存任播技术的标准定义路由协议都很不清楚,因此在设计IPv6任播路由协议时还存在一些相关的技术问题。
5.3.1.    可量测性问题。
由于任播成员不管它们实际的前缀时位置是分散的,所以针对任播地址的路由条目无法被聚集。因此针对任播地址的路由条目必须分别被存储在路由器中,当任播地址得到广泛应用时,路由表会变得十分拥挤。
5.3.2.    安全问题。
维持任播成员关系特别重要,对主机获得成员资格最简单的方式是它只需广播针对相关任播地址进入路由器的路由条目。但是这种方法有时会导致严重的安全问题,即任播主机可以自由的在路由表中添加或删除路由条目。
5.3.3.    选择任播成员资格的标准。
不同的应用需要不同的标准,如果应用中需要快速响应,在源节点和任播节点之间的传播时延就相当重要,任播成员资格的最近节点应该作出选择。任播路由机制的标准的选择对于任播通信容量能力影响极大。
任播地址重要的一个特点是任播地址必须从同一个地址空间分配作为一个单播地址,因而从单播地址中无法加以区别。RFC1546原来推荐的是分配任播机制本身的地址空间,为了希望极大地降低由于应用中错误而无法辨识出任播地址的风险。当任播路由器配置时,互联网中的一些路由器不可能处理任播地址,这些地址如果被分配在单播地址空间中,对于继承的路由器针对通信去配置特殊的操作变得没有必要。任播路由器去判断接收包的目的地地址是否是任播地址或是单播地址是很困难的,设计路由协议也会存在问题的。
5.4.   任播目标地址的识别
由于任播地址格式同单播地址相同。如果没有其它的特别说明。发送方一般不能识别待发送的数
据报的目的地址是单播地址还是任播地址。
5.5.   确定的包交付
如果发送方有多个IP数据报的目标地址都是同样的任播地址,这些数据报有可能会到达同属于一个任播组的不同的服务器。是否能够到达同一个服务器,取决于路由表的稳定性。
对于完全无状态的协议。第一个包和第二个包到达不同的服务器不会带来问题,但是如果对于有状态的协议。这样的情况将会造成不可预料的后果。
5.6.   任播地址不能指定给主机
如果没有任何主机绑定任播地址。任播数据报的路由就会相对简单.拥有任播地址的路由器在交换路由信息时可以主动将路由需要的任播信息发送出去。其它路由器根据这些信息修改路由表。我们就只需跟踪路由表的条目。最终找到拥有该任播地址的路由器,只有路由器能够使用任播服务。
5.7.   任播地址不能作为IP的源地址
任播地址写入IP数据报的源地址段.这是因为一个IP任播地址不能代表一个单一的源节点。否则:
1. 具有同样目的地址的,来自同一任播组的不同成员的IP分片。有可能具有相同的分片ID。并且在几乎相同的时间到达目的主机,这样,来自不同发送者的.有相同的源、目的地址和相同的分片IDIP分片,将会给目标机分片的重组带来不可预料的错误。
2 由于源地址是任播地址,有可能使差错响应报文被发回到同组的其它成员。
5.8.   IPSec应用的困难
由于IPSec使用源、目标地址对来标识节点,对在源或目标地址中使用任播地址的任播服务来说.应用IPSec是很困难的。
1. IPSec使用目标地址来标识使用哪一个IPSec密钥.因此.当使用多播地址作为目标地址时.就必须对任播组中的所有节点使用相同的密钥。这很不安全。
2.在任播服务中.IPSec密钥的动态交换也变为不可能。这是因为,密钥动态交换要求两个节点间的稳定通讯,由于前述的包交付的不确定性,要求任播通讯的双方稳定通讯显然是不可能的。
6.      anycast的安全问题
网络中任何实体都可以声明其为任播服务器,也就是说,任播组成员是不可控的。非法服务器可能利用这一点向客户提供不安全信息,然而客户是无法知道其获得的信息是否合法。另外,非法主机可以用假造的任播地址声明服务,以这种假造任播地址为目的的任播数据报到达目的后,非法主机并不做出应答,也就是拒绝服务(Denial of ServiceDOS)。为防止以上所述非法服务器的产生,我们需要一个服务器注册机制进行访问控制,路由器必须只将任播数据报转发到经过认证的服务器。
任播地址不能作为IPv6数据报的源地址,接受任播服务申请的服务器在其应答数据报中将自己的单播地址作为源地址,然而客户并不能确定这个单播源地址是否属于合法服务器,也就不能确信服务器提供的数据为合法数据。这就需要对任播服务器的应答进行鉴定。
7.      新的任播地址解析协议及应用
任播地址解析协议(AARP)可以满足IPv6任播和高层协议(诸如:没有必要去修改应用和协议的TCPUDP)。更明确的说,实行AARP的目的是为了解决专门用于通信单播地址的任播地址的问题。AARP用来作为一种写在原始应用编程接口(API)之上的动态链接库(DLL),这种库实际上是能够提供一套与原始IPv6API插槽相同的API插槽,并用来解决任播地址的AARP库,它可以在呼叫原始API之前将任播地址转换成相应的通信单播地址。任播地址仅仅用于应用层和AARP库层,而在AARP库层以下的层并不采用任播地址,只是处理转换后的单播地址。
7.1.   AARP的地址解析过程
假设主机C想和任播地址为AA的另一个主机建立任播通信,任播地址解析过程如下:(1)主机C呼叫带有参数的任播地址的socket API模块(譬如:TCP中的connect( ) ),AARP库的API替代API的套接层面而被呼叫。(2AARP库在被叫者的功能中将任播地址转换成单播地址。(3)转换后,AARP库通过单播地址呼叫原来的socket API。(4)当通信被建立以后,从主机C发出的所有信息包的目的地地址都给被赋以单播地址,并传输给主机S
7.2.   AARP的地址转换方法
IPv6的协议规范得知当不能自身确定任播地址时,连接任播地址的主机通信应该至少从目的地主机接收到一个数据包。地址转换有以下两种方法:
7.2.1.    探测数据包法(由客户端发起)
主机在进行通信之前首先发送一个探测数据包给任播地址,它可以从返回数据包的源地址中得到目的地主机的单播地址。
7.2.2.    捎带确认法(由服务器端发起)
捎带确认法指的是经全双工(双向同时)数据链路,不用专门(确认)报文返回确认信息所用的技术。与一个方向的报文流有关的确认信息钳在反方向正常携带数据的报文流中,当数据包从通信对端返传回来时,任播主机将任播地址附加到数据包。通过检查附加在数据包上的信息,可以确认数据包是从与任播地址相联系的主机上发送出的。
探测包方法中需要提供给探测数据包额外的网络带宽,这将会浪费网络资源。与之相对的,捎带确认方法需要修改应用使得任播地址可以捎带到数据包上。由于实际应用中应当避免应用的任何修改,必须在AARP中包括单播地址来使用探测包法。
7.3.   AARP的应用
  为了解析任播地址到它相应的单播地址,可以使用ICMPv6 ECHO REQUEST/REPLY包。由于任播地址不能设置到数据包头的源地址,任播成员主机在ICMP包源地址区域上设置通信单播地址来代替任播地址。因此,接收发送到任播地址的ICMPv6 ECHO REQUEST/REPLY包的主机会附带使用它的单播地址来发送这个数据包。如果AARP无法使用ICMPv6机制,从呼叫者主机需要配置特殊的软件来相应探测数据包。
  AARP库也会提供一张高速缓冲存储器表用来解析任播地址,当任播地址不能在表上隐藏时,AARP可以发送探测数据包去解析任播地址。解析后的单播地址和定时器一起存储在高速缓冲存储器表上,当超时后会被删除。对客户端而言,向任播地址的数据包被传递到同一个任播服务器,直到高速缓冲存储器失效,与之相反,AARP从高速缓冲存储器表返回解析后的单播地址,针对任播地址的条目在高速缓冲存储器表失效后,探测数据包才会被发送。使用ICMP包的方法虽然简便,但是不能解决安全的问题。即使恶意用户捕获ICMP ECHO REQUEST包并发送它,客户端也只是用数据包的源地址。
8.      结论
目前,IPv6任播机制在实际通信中的应用依然存在许多问题。为了解决这些问题,在本文中介绍了一种新的IPv6地址解析协议(AARP)将任播地址转换为相应的通信单播地址,并在转换后可以直接用于实际的通信中,使得任播通信在不改变现有应用设置协议的基础上得以实现
anycastIPV6协议中一个发送方同最近的一组接收方之间的通信。anycast的用途之一是用一个主机进行组内所有主机路由表的更新工作。IPV6可以自动判断最近的网关,然后将数据包传给此网关。反过来,此主机可以对组内所有的主机进行anycast,直到完成整个路由表的更新工作。