网络多播和实时通信技术
上QQ阅读APP看书,第一时间看更新

1.7 任播

IPv6地址是128位的标识符,用于单个接口和一组接口,分为以下三种类型。

①单播(unicast):单个接口的标识符。发往单播地址的分组被投递到用那个地址标识的接口。

②多播(multicast):一组接口的标识符(典型地属于不同的结点)。发往一个多播地址的分组被投递到用那个地址标识的所有接口。

③任播(anycast):一组接口的标识符(典型地属于不同的结点)。发往一个任播地址的分组被投递给用那个地址标识的多个接口中的一个接口。

在IPv6中没有广播地址,它们的功能被多播地址取代。

在制定IPv6规范时,虽然多播已经成功地被成千上万的IPv4站在MBONE(multicast backbone,多播主干试验网)上使用,但任播依然是一个研究的主题。对于任播机制的可能的应用有下列几个方面。

(1)对最近的服务器的选择

客户/服务器模型中的用户可以跟具有一个任播地址的最近的服务器通信。

(2)服务抽象

可以把任播地址用作一个具有唯一性的服务标识符。现在互联网上运行着许多诸如DNS和HTTP代理这样的服务。用户为了访问这些服务,必须知道它们的IP地址,这是比较麻烦的事。如果每个服务都有一个唯一的任播地址作为它的服务ID,并且多个服务器都把该地址用于它们的网络接口,那么用户就可以仅仅使用任播地址来访问该服务。

(3)可靠性

任播机制可以用来改善服务的可靠性。可以把一个任播地址分配给分布在互联网上的多个服务器,如果其中的一个服务器失效了,那么其他的服务器仍然可以为用户提供服务,因为使用同样的任播地址的分组会被路由到另一个最近的服务器。因此具有任播地址的服务器可以提供可靠性和服务冗余。

(4)策略路由

假定有一组路由器把同样的任播地址分配给它们的网络接口,通过使用“逐跳路由选项”把该任播地址指定为一个中间结点,就可以强迫分组经过其中的一个路由器。这就是实现基于策略的路由的一种技术。

IPv6任播地址是分配给不止一个接口(典型地属于不同的结点)的地址,发送给一个任播地址的分组被路由到根据路由协议的测量在具有那个地址的接口中距离最近(代价最小)的接口。

任播地址从单播地址空间分配,可以使用任何已经定义了的单播地址格式。因此任播地址在语法上与单播地址没有区别。当把一个任播地址分配给不止一个接口时,被分配了这个地址的结点必须被明确地配置成知道这是一个任播地址。

对于任何分配的任播地址,都有一个那个地址的最长前缀P,标识属于那个任播地址所在的拓扑区域。在以P标识的区域内,任播地址必须被维护成在路由系统中的一个分立的登录项(通常称作主机路由)。在以P标识的区域之外,任播地址必须聚合成对于前缀P的路由登录项。

注意,在最坏的情况下,一个任播的前缀P可能是一个null(无)前缀,也就是说,该任播的成员可能没有拓扑定位。在这种情况下,任播地址必须被维护成在整个互联网上的一个分立的路由登录项。它在可以支持多少个这样的全局任播组方面呈现出严重的可扩展性限制。因此,对于全局任播的支持可能不可提供,或者非常有限地提供。

子网-路由器任播地址是事先定义的一种任播地址,它的格式如图1-14所示。

图1-14 子网-路由器任播地址

子网-路由器任播地址可以被用来在一个路由选择头内指定沿着一条路径的一个中间地址。它可以指称跟一个特别的提供者或特别的子网相关的路由器组,以此来规定以最有效的方式为分组选择路由通过哪个提供者或互联网。

事实上,对于任播地址期待的一个使用就是标识属于提供因特网服务的一个运营商的一组路由器。这样的地址可以被用作在IPv6路由选择头中的中间地址,使得分组通过一个特定的服务提供商或一个序列的服务提供商投递。

对于子网-路由器任播地址的某些其他可能的使用是标识附接到一个特定的子网的一组路由器,或提供进入一个特定的路由域的入口点的一组路由器。

除了子网-路由器任播地址,作为面向其他应用的一般任播地址的标准,在每个子网内,接口标识符中的7位被保留为用于子网任播地址ID。在具有EUI-64格式的64位接口标识符的IPv6地址中,如果表示的是预留的子网任播地址,那么接口标识符中的universal/local(通用/本地)位必须置成0(表示本地),表示在该地址中的接口标识符不是全局唯一的。

具体地讲,对于具有EUI-64格式的64位接口标识符的IPv6地址,这些保留的子网任播地址以图1-15所示的方式建立。注意,在从IEEE EUI标识符形成接口标识符时,修改的EUI格式接口标识符颠倒了“u”位(universal/local,通用/本地)的设置。在修改的EUI-64格式中,把u位置1表示全局范围,置0表示局部范围。这跟没有修改的IEEE EUI-64标识符正好相反。

图1-15 保留的子网-任播地址格式

一般说来,任播地址可被连接到同一子网的多个站使用。例如,可以用一个任播地址表示连接在一个子网上的多个WWW服务器中的任意一个,这些服务器含有同样的内容,从而提供更好的响应时间和健壮性。

任播地址从跟单播地址相同的地址空间分配,因此一个任播组的成员必须配置成能识别那个地址。路由器必须配置成能够把一个任播地址映射成一组单播接口地址。

在IPv6中,主机把任播地址当作单播地址处理。负担是在路由系统上,它必须为在给定的场点处于活动状态的每个任播地址维持一个路由。

当前对于用于保留的子网任播地址的任播ID规定如图1-16所示。对应这些保留的任播ID的IPv6地址不可以被用于任何单播接口。

图1-16 保留的任播ID

作为标准化,开始阶段仅定义了移动IPv6家乡代理子网任播地址ID,未来会定义更多的任播地址ID,它们可用于所有的链路。图1-17显示的是对应移动IPv6家乡代理任播地址ID的IPv6任播地址的最后64位。

图1-17 对应移动IPv6家乡代理任播地址ID的IPv6任播地址的最后64位

服务于任播地址的所有站都要加入对应的被征求结点的多播地址(把一个固定的前缀FF02:0:0:0:0:1:FF00:0/104和该结点的IPv6任播地址的最后24位串接形成的一个网络层地址,独立于网络前缀)。如果有一个结点发送一个邻居征求报文给这个地址,具有该IPv6任播地址的所有的站都要用一个邻居通告报文应答。这些通告跟常规的邻居通告略有不同,因为IPv6源地址是站的常规地址,而不是任播地址(使用任播地址作为源地址是非法的)。因此,在邻居通告报文应答中被征求位S将不被置1,因为源地址不等于征求报文的目标地址(任播地址)。

征求方会收到好几个通告。第一个将被用来完成对应这个任播地址的邻居缓区登记项。在理论上,这第一个通告来自最近的或最快的任播服务器。通告处理规则会保证第一个通告被选用。

对于任播在互联网上的广泛使用,以及在一般情况下的使用可能产生的错误和危险,人们的经验还很少。在积累更多的经验并确定解决方案之前,对IPv6任播地址的下列限制是必需的。

①一个任播地址不可以用作IPv6分组的源地址。

②任播地址不可以分配给IPv6主机,也就是说,它只可以分配给路由器。