概述
任播地址是IPv6协议特有的地址类型,适合于一对一组中的一个(One to One of Many)的通信需求。任播地址用来标识一组网络接口,这些接口通常属于不同的节点。路由器会把目标地址是任播地址的数据报发送给离该路由器最近的一个网络接口。任播使一种到最近节点的发现机制成为可能。
需要说明的是,任播地址只能用作IPv6数据报的目的地址,任播地址只能分配给IPv6路由器。
在应用中,任播地址与多播地址类似,同样是多个节点共享一个任播地址,不同的是,只有一个节点期待接收给任播地址的数据报。任播对提供某些类型的服务特别有用,尤其是对于客户机和服务器之间不需要有特定关系的一些服务,例如域名服务器和时间服务器。域名服务器就是个名字服务器,不论远近都应该工作得一样好。同样,一个离得近的时间服务器,从准确性来说,更为可取。因此当一个主机为了获取信息,发出请求到任播地址,响应的应该是与该任播地址相关联的最近的服务器。1
作用任播地址在移动通信中很有用,接收方只需要是一组接口中的一个即可,这样可以使移动用户在地理位置上不会受过多的限制。
IPv6任播地址是从单播地址空间中划分出来的,任播地址与单播地址位于同一个地址范围内,任播地址与单播地址有相同的格式,当一个单播地址属于多个接口时,它就是任播地址。仅看地址本身,节点是无法区分单播地址和任播地址的,节点需要使用明确的配置指明该地址是一个任播地址。
RFC 2526描述了任播地址的格式,规定了保留的子网任播地址和标识ID,一个保留的子网任播地址如图所示。
RFC 2526规定,在每个子网内,接口标识符值0~127是为子网任播地址分配而保留的,其中0~125和127为保留,126用于移动IPv6家乡代理(Mobile IPv6 Home Agents)的任播。
任播地址的一种用途是识别为某个特定的路由域提供接入的一组路由器。一个例子是在RFC3068中描述的6to4中的任播地址。另一种可能的用法是为一个公司网络内提供因特网访问的所有路由器都配置一个专门的任播地址。每当一个数据包被发送到该任播地址时,它就会被发送到距离最近的提供因特网访问的路由器上。
RFC2373定义了子网路由器任播地址的格式,如图所示,该地址基本上就像一个通常的单播地址,不同之处只是其前缀指定了子网和一个全0的标识符,地址中的子网前缀部分被设置为所用到子网前缀的值,地址的其余位设置为0,发送到这个地址上的数据包会被发送到该子网中的一个路由器上。所有的路由器对与它们有接口连接的子网都必须支持这种子网路由器任播地址。
任播选路是在有限的范围内进行,这个有限的范围是一个子网区域。任播地址中用其前缀定义了所有任播节点存在的地区。比如一个ISP可能要求它的每一个用户单位提供一个时间服务器,这些时间服务器共享单个任播地址。一个任播地址必定带有一个选路项,该选路项包括一些指针,指向共享该任播地址的所有节点的网络接口。
具有任播地址的主机也可能分散在全球Internet上,在这种情况下,相关的任播地址必须添加到遍及世界的所有路由器的路由表上,在实现上是很复杂的。
任播技术直接嵌入到路由系统中,在提供服务器复用功能和处理负载均衡方面具有突出的优势。任播技术存在的问题是攻击者能够偷偷地把客户端的请求吸引到自己的主机上来,这实际上是一个身份认证问题。这个问题可以在任播组成员在向路由器登记的过程中,通过一个身份认证过程解决。
当前规定任播地址不能作为数据报的源地址,主要的担心是在多个任播成员的情况下,无法确定数据报的来源。但在一个开放的网络中,攻击者是很容易伪造数据报的源节点,若要获得安全性,较好的方法还是在高层协议中处理或是采用IPSec技术。
此外,任播存在的问题还有:全球性的任播的发展还存在诸多问题,以及如何把任播服务应用到网络多媒体中。1