王建 李方伟
摘要:任播技术是一种新的网络应用。任播通信是支持导向服务地址的,但是目前IPv6中它的很多定义是模糊的,并且在控制路由方面没有达成一致的协议标准,因此节点间任播通信仍然无法实现。在本文中首先说明了基于IPv6的任播通信,及目前在该领域中存在许多可能的应用,并指出一些问题和与之对应的解决办法,随后介绍了一种使用特殊任播地址来建立TCP连接的任播地址解析协议(AARP),使得任播地址在适应已经存在的应用和高层协议时,不需要修改或者扩展的情况下更加有效。
关键词:IPv6, 任播通信,任播地址,解析,网络应用
1 IPv6地址类型的概述
IPv6地址长度为128比特,地址按照其传输类型分为三种,即单播地址(Unicast Address)、多播地址(Multicast Address)和任播地址(Anycast Address)。单播和多播地址在IPv4中已经存在,任播地址是IPv6中新的成员,RFC 2723将IPv6地址结构中的的任播地址定义为一系列网络接口(通常属于不同的节点)的标识,其特点是:发往一个任播地址的分组将被转发到由该地址标识的“最近”的一个网络接口(“最近”的定义是基于路由协议中的距离度量)。
单播地址是每个网络接口的唯一的标识符,多个接口不能分配相同的单播地址,带有同样目的地地址的数据包被发往同一个节点;另一方面,多播地址被分配给一组节点,组中所有成员拥有同样的组播地址,而带有同样地址的数据包同时发给所有成员;类似于多播地址,单一的任播地址被分配给多个节点(任播成员),但和多播机制不同的是:每次仅有一个分配任播地址的成员与发送端通信。一般与任播地址相关的有三个节点,当源节点发送一个目的地地址为任播地址地数据包时,数据包被发送给三个节点中的一个,而不是所有的主机。任播机制的优势在于源节点不需要了解服务节点或目前网络的情况,而可以接收特定服务,当一个节点无法工作时,带有任播地址的数据包又被发往其他两个主机节点,从任播成员中选择合适的目的地节点取决于任播路由协议。
2 IPv6任播技术的分析
任播技术是一种新的网络应用,它能够支持把同样的地址可以分配给多个节点去提供特定服务的以服务导向的地址,而带有任播目的地地址的数据报能够使用相同的任播地址并被传给众多节点中的任意一个。因特网研究任务组(IRTF)在1993年到RFC 1546中已经定义了任播技术的作用:“主机向一个任播地址发送数据报,网络负责尽力将数据报传递到至少一个,最好也是一个,按任播地址接收数据的服务器上。"采用任播机制的初衷是彻底去简化在互联网中寻找合适服务器的任务;任播通信的基本概念是从物理主机设备中分离出的逻辑服务标识符,任播地址可以根据服务类型来分配,使得网络服务担当一个逻辑主机的角色。
虽然目前任播技术的定义不是十分清楚,但是终端主机通过路由器是被基于包交换所决定。任播技术的概念并不局限于网络层,它也可以在其他层实现(例如:应用层),网络层和应用层的任播技术均有优点和缺点。
3 IPv6任播技术的应用
适合于任播通信的应用有很多,其中比较重要的一个应用是服务器位置。发送端的主机可以在众多同样功能的主机中选择其中一个,如果合理地利用任播路由方法去将任播需求均匀的分配到主机上,任播主机之中的负载分配目标可以达到。在任播主机中使用简便的随即选择方法在网络层任播技术中却不会奏效,例如:CPU的负载,因为很难知道每个服务器的资源使用状态,而应用层任播技术使用该方法却是实用的。
另一个重要应用是服务位置,发送端主机可以通过说明任播地址去从多个任播主机中选择与最佳的、最小时延的、最大输出量的主机进行通信,例如:在诸如移动ad hoc网络这类动态改变环境下运用该方法特别适用。通过网络层的任播技术,节点可以和合适的或是最近的服务器进行通信,并通过应用层任播技术获得该类服务。
网络层任播技术的优势在于可以提供令源节点在无须借助服务节点和网络的情况下,能够接收到特定服务机制的简便方法。
4 IPv6任播技术的问题和解决方法
IPv6任播技术仍然存在许多问题。首先是任播技术的使用场合和应用任播技术的优点,其次是基于IPv6的任播技术是一个路由协议并没有被包括IPv6的规范说明中,而这正是使得任播技术应用更广泛不可获缺的条件,路由器应该在决定目的地网络让任播包可以合适的传送地过程中起到主动作用。目前的任务是需要设计和应用合适的任播路由协议到任播应用场合之中,并让互联网能够逐步去支持任播技术。例如:任播路由即使在因特网中只有少量的节点或路由器支持任播技术时也能够恰当的工作。所有基于TCP和一些基于UDP的协议在互联网应用中已经说明了,端主机之间建立通信过程,并在交换信息过程中认为它们是一致的。
4.1 主机向任播成员通告参与的问题
节点申明除了针对任播地址的公开路由信息以外,它们可以接受的数据报,而在IPv6的技术说明中节点必须是一个路由器。一个主机准备加入成为任播成员或离开时,它必须有不同的能力去向“最近”的任播路由器通告它目前的状态(加入或离开)。
4.2 支持高层申明协议的问题
因为任播技术拥有无状态的特性,它不能确保属于相同的任播地址的所有数据报会传到同一个目的地节点,然而这将会导致的是诸如TCP这类的全状态协议不被支持这一严重的问题。当主机向任播地址发起TCP连接时,接收端主机为了确认信息包,它将不能设置自己的任播地址作为源地址。IPv6技术说明中不允许任播地址来源于在包头设置的源地址,这主要是由于IPv6任播地址没有定义单独的源节点。如果协议允许任播地址被设置到包头的源地址,接受端主机在通信过程中将不能确信所有发送的数据包来自于同一个主机,也就是说主机的任播地址不能接收到包确认。
4.3 实现任播路由的问题
目前现存任播技术的标准定义路由协议都很不清楚,因此在设计IPv6任播路由协议时还存在一些相关的技术问题。
(a)可量测性问题。由于任播成员不管它们实际的前缀时位置是分散的,所以针对任播地址的路由条目无法被聚集。因此针对任播地址的路由条目必须分别被存储在路由器中,当任播地址得到广泛应用时,路由表会变得十分拥挤。
(b)安全问题。维持任播成员关系特别重要,对主机获得成员资格最简单的方式是它只需广播针对相关任播地址进入路由器的路由条目。但是这种方法有时会导致严重的安全问题,即任播主机可以自由的在路由表中添加或删除路由条目。
(c)选择任播成员资格的标准。不同的应用需要不同的标准,如果应用中需要快速响应,在源节点和任播节点之间的传播时延就相当重要,任播成员资格的最近节点应该作出选择。任播路由机制的标准的选择对于任播通信容量能力影响极大。
任播地址重要的一个特点是任播地址必须从同一个地址空间分配作为一个单播地址,因而从单播地址中无法加以区别。RFC1546原来推荐的是分配任播机制本身的地址空间,为了希望极大地降低由于应用中错误而无法辨识出任播地址的风险。当任播路由器配置时,互联网中的一些路由器不可能处理任播地址,这些地址如果被分配在单播地址空间中,对于继承的路由器针对通信去配置特殊的操作变得没有必要。任播路由器去判断接收包的目的地地址是否是任播地址或是单播地址是很困难的,设计路由协议也会存在问题的。
5 新的任播地址解析协议及应用
任播地址解析协议(AARP)可以满足IPv6任播和高层协议(诸如:没有必要去修改应用和协议的TCP和UDP)。更明确的说,实行AARP的目的是为了解决专门用于通信单播地址的任播地址的问题。AARP用来作为一种写在原始应用编程接口(API)之上的动态链接库(DLL),这种库实际上是能够提供一套与原始IPv6的API插槽相同的API插槽,并用来解决任播地址的AARP库,它可以在呼叫原始API之前将任播地址转换成相应的通信单播地址。任播地址仅仅用于应用层和AARP库层,而在AARP库层以下的层并不采用任播地址,只是处理转换后的单播地址。
5.1 AARP的地址解析过程
假设主机C想和任播地址为AA的另一个主机建立任播通信,任播地址解析过程如下:(1)主机C呼叫带有参数的任播地址的socket API模块(譬如:TCP中的connect( ) ),AARP库的API替代API的套接层面而被呼叫。(2)AARP库在被叫者的功能中将任播地址转换成单播地址。(3)转换后,AARP库通过单播地址呼叫原来的socket API。(4)当通信被建立以后,从主机C发出的所有信息包的目的地地址都给被赋以单播地址,并传输给主机S。
5.2 AARP的地址转换方法
由IPv6的协议规范得知当不能自身确定任播地址时,连接任播地址的主机通信应该至少从目的地主机接收到一个数据包。地址转换有以下两种方法:
5.2.1探测数据包法(由客户端发起)
主机在进行通信之前首先发送一个探测数据包给任播地址,它可以从返回数据包的源地址中得到目的地主机的单播地址。
5.2.2捎带确认法(由服务器端发起)
捎带确认法指的是经全双工(双向同时)数据链路,不用专门(确认)报文返回确认信息所用的技术。与一个方向的报文流有关的确认信息钳在反方向正常携带数据的报文流中,当数据包从通信对端返传回来时,任播主机将任播地址附加到数据包。通过检查附加在数据包上的信息,可以确认数据包是从与任播地址相联系的主机上发送出的。
探测包方法中需要提供给探测数据包额外的网络带宽,这将会浪费网络资源。与之相对的,捎带确认方法需要修改应用使得任播地址可以捎带到数据包上。由于实际应用中应当避免应用的任何修改,必须在AARP中包括单播地址来使用探测包法。
5.3 AARP的应用
为了解析任播地址到它相应的单播地址,可以使用ICMPv6 ECHO REQUEST/REPLY包。由于任播地址不能设置到数据包头的源地址,任播成员主机在ICMP包源地址区域上设置通信单播地址来代替任播地址。因此,接收发送到任播地址的ICMPv6 ECHO REQUEST/REPLY包的主机会附带使用它的单播地址来发送这个数据包。如果AARP无法使用ICMPv6机制,从呼叫者主机需要配置特殊的软件来相应探测数据包。
AARP库也会提供一张高速缓冲存储器表用来解析任播地址,当任播地址不能在表上隐藏时,AARP可以发送探测数据包去解析任播地址。解析后的单播地址和定时器一起存储在高速缓冲存储器表上,当超时后会被删除。对客户端而言,向任播地址的数据包被传递到同一个任播服务器,直到高速缓冲存储器失效,与之相反,AARP从高速缓冲存储器表返回解析后的单播地址,针对任播地址的条目在高速缓冲存储器表失效后,探测数据包才会被发送。使用ICMP包的方法虽然简便,但是不能解决安全的问题。即使恶意用户捕获ICMP ECHO REQUEST包并发送它,客户端也只是用数据包的源地址。
6 结论
目前,IPv6任播机制在实际通信中的应用依然存在许多问题。为了解决这些问题,在本文中介绍了一种新的IPv6地址解析协议(AARP)将任播地址转换为相应的通信单播地址,并在转换后可以直接用于实际的通信中,使得任播通信在不改变现有应用设置协议的基础上得以实现。
摘自 世界电信