第2章 重温IPv6
部署IPv6网络(修订版)
IPv6代表了IP的一个演进步骤。除了构建于IPv4之上和从运营IPv4网络获得的经验之外,IPv6有其自身的特性和独特的功能实现。因此,在深入了解部署IPv6之前,您应该使自己熟悉协议的基础知识。本章通过给出IPv6概念的一个简短复习带您进入本书的内容范围。
IPv6的许多特征将区别于其前身(IPv4)。这些特征中的一些特征在后续章节中从部署的角度进行讨论。但本章将焦点集中于IPv6协议属性的一个子集,它们代表了IPv6运营的基础,如下所示:
- IPv6寻址;
- IPv6分组格式;
- ICMPv6;
- 邻居发现。
因为一个简单的原因,本章特别强调寻址:它代表了今天IPv6最重要的优势之一。也以较长篇幅讨论了邻居发现以弄清楚IPv6的链路操作。
本书不再重复许多书籍中已有的信息,因为那些书是专门描述IPv6协议的,本书重点放在回顾与IPv4的差别及这些差别对部署的影响。欲了解技术综述,建议阅读下列图书:R.Desmeules的Cisco Self-Study:Implementing Cisco IPv6 Networks(IPv6)(本书中文版《Cisco IPv6网络实现技术》已由人民邮电出版社出版)和C.Huitema的IPv6:The New Internet Protocol。
2.1 IPv6寻址
部署IPv6网络(修订版)
寻址是两个或两个以上实体间通信过程的基本内容。它提供了识别信息源和目的地的方法,之后为适合地将两个组(源和目的地)联系起来提供专用资源。无论我们谈论美国邮政服务还是IP网络,这都是正确的。上一章简单综述了IPv4寻址结构和由有限地址空间及其不明智的使用所产生的威胁。上一章也表明采用IPv6最急迫的理由是其寻址能力。因此,将此主题作为IPv6知识重温的中心部分是自然之选。
2.1.1 IPv6地址表示
如果我们将由无计划的地址分配所产生的困难放在一边,我们仍然面对不可避免的IPv4寻址空间枯竭。32位长的IPv4地址提供了大约20亿个实际可用的ID。这个集合将不能承受更长时间的用户数量快速增加的需求,这些用户需要唯一的、全局可达的IP地址。顺理成章的方案是增加地址空间。在IPv6发展过程中,虽然有人提出更大胆的建议,但还是选择了128位长地址。人们也许发现2128或340 282 366 920 938 463 463 374 607 431 770 000 000(译者注:这个数量值是不准确的)个地址是过多了;但是,几年前的某个时候人们也是这样考虑IPv4地址空间的。另外一方面,人们可能争辩说“越大越好”。但推理逻辑应该考虑到更长的地址对系统性能的影响。使用64位CPU、总线或内存结构的一个系统能够一次处理IPv4地址的源地址(SA)和目的地址;但对IPv6地址来说,同样操作却需要4次处理。
IPv6地址可以表示为由一长串0和1组成的字符串,比较便于计算机的理解。IPv6地址的十六进制表示则是将128位字符串缩短为32个字符,因此获得了程序员的青睐。这种表示相较于128位虽然短了很多,但是仍然难以记忆,于是人们将这32位的十六进制字符串划分为8组,一组包含4个字符(也就是16位),与组与组之间使用冒号(:)分开。而IPv4使用的十进制表示尽管已被人们熟知,但是IPv6并没有采用。
为了进一步优化IPv6地址的表示,人们引入了两条额外的规则。
消除前导0——在两个冒号之间的每个16位组中,能够消除前导0。这意味着您能够将:00A1:写成:A1:(如图2-1所示)。
消除连续的0—在连续冒号之间能够缩减 16 位的连续全 0 组。在这种情况下,:0000:0000:0000:变成::(如图2-1所示)。
这些规则必须产生一个唯一的压缩地址表示。因此,连续0规则仅能使用一次。在图2-1的示例中将地址压缩成2001::A1::1E2A是不正确的。看到这个地址的人们不知道第一个::代表的是2个还是3个16位0组。
重要的提示是,:在统一资源定位符(URL)中是一个有意义的字符,它将端口号和地址分割开来。为了避免混淆,RFC 2732建议在URL中将IPv6地址包括在括号中,如例2-1所示。
2.1.2 IPv6地址架构
理解IPv6的地址表示使我们能够讨论在RFC 3513中定义的IPv6寻址架构。定义了3种类型的IPv6地址:
单播——标识单个节点,目的地为单播地址的流量被转发到单个节点;
多播——标识一组节点,目的地为多播地址的流量被转发到组里的所有节点;
任意播——标识一组节点,目的地为任意播地址的流量被转发到组里的最近节点。
在IPv4中给出了所有这些地址类型,其中还包括广播地址。广播流量被证明是太耗费资源的(在常规操作中以及广播风暴中),因此IPv6不再考虑广播,而使用多播地址。
一、IPv6单播地址
一个网络的基本功能是为连接到网络的主机提供单播可达性。网络提供的所有其他服务依赖于这个单播基础设施。由于这些原因,在任何网络中无论IP版本为何,单播地址都是一个关键角色。
扁平的、无结构的地址空间需要路由器记录每个单台主机的位置,这会导致规模扩展问题。这个问题能够通过地址汇聚来解决,即在一个公共表示之下将多个地址归组。为了使这个过程容易一些,IP地址分段为网络部分和主机部分,网络部分标识主机的一个逻辑组,主机部分标识组内的主机。在相同网络或前缀之下,主机被汇聚。IPv4表明了基于类的寻址架构的限制,因此IPv6允许其地址的网络部分是变长的。这种方法要求在地址后面加上/(位数目)来标识前缀长度。
为了保持两个IP版本寻址结构间的某些并行性,到此为止在IPv6地址的场合,我们使用了IPv4术语主机部分。但IPv6倾向于在一个前缀内标识一个主机的接口而不是主机自己(主机能够有多个接口),因此,IPv6地址分段为前缀或网络部分和接口标识符。
例2-2给出了一个IPv6地址的网络和接口标识符。
例2-2 标识一个IPv6地址的网络和接口ID
关于接口ID应该是什么,RFC 3513没有留下怀疑的空间,其中“对于所有单播地址,除了那些以二进制值000开始的外,接口 ID 要求 64 位长并以修改的EUI-64格式构造”。本规则揭示了在可能情况下维持接口 ID 的全局唯一性的意图。您能够以下述多种不同的方式产生一个接口 ID。
从第2层地址以修改的EUI-64格式构造一个接口 ID。对于接口 ID 的网络部分,EUI-64格式的高位第7位当设置为0时,定义了一个本地范围;当设置为1时,就定义了一个全局范围(全局唯一)。针对每种媒介类型,定义了不同机制以构建符合修改的EUI-64格式的完全接口ID(参见2.2.3小节)。
如在RFC 3041中定义的那样自动产生一个随机地址。本分配机制开发出来主要是限制一个全局可达地址的暴露程度并增加隐私性(参见第9章)。
通过DHCPv6获得接口ID。
人工配置。
基于RFC 3972,通过包含一个公开密钥的散列函数以加密方式产生地址(CGA)。产生一个接口ID的这种方法提供了额外的安全性并支持地址认证。在本章后面描述的邻居发现过程的安全性是在CGA的帮助下获得的。
在IPv6情况下,通过整合范围的概念更进一步细化了地址的网络部分。
范围标识一个网络域,无论是物理的还是逻辑的。能够容易地识别一个IP流的范围使网络能够更好地管理它的资源,其方式是将流量限制在相关域内并对该范围施加策略。在做出3层转发判定时,IP地址是一个重要参数,因此它应该表明范围。在主机的通信范围内,主机使用合适的IP SA和DA。
在IPv6中,单播地址格式反映了3种预定义范围,如下所示:
链路本地范围——在单个第2层域内,标识所有主机。在这个范围内的单播地址称为链路本地地址;
唯一本地范围——在一个管理站点或域内(其典型情况下包括多个不同链路),标识所有可达设备,在这个范围内的单播地址称为唯一本地地址(ULA);
全局范围——在Internet中标识所有可达设备,在这个范围内的单播地址称为全局单播地址(GUA)。
如图2-2所示,这些范围是层次化的。全局范围大于本地(站点)范围,而后者包括链路范围。
链路和全局范围代表了两种极端情况:最小范围和最大范围。这种区别使定义它们比较容易。RFC 3513确定了一个站点本地范围,逻辑上适合于链路和全局范围之间的情况,虽然这个定义还有待解释。一个站点对不同人可能指不同的事物(网络)。它可以是一个企业网络、企业网络地理上受限制的一部分或简单地指企业网络内的一个管理域。因为IPv6地址是基于范围而结构化的,站点定义的二义性增加了IPv6特征和实现的复杂性。站点范围的原始定义由于非唯一站点本地地址的使用及这些地址的缺陷(在本节的后面讨论),同样存在漏洞。由于这些原因,在2003年3月20日,IETF IPv6工作组声明不再使用站点本地范围和相应的IPv6地址类型。图2-2中强调了这一点。
因为习惯难以打破,特别当它们证明是运营有效的时候,站点本地范围和站点本地地址不会悄悄地消失。企业已经习惯站点相关的、私有的寻址机制的安全性和其益处——好的旧式10.x.y.z网络——因此他们要求开发站点本地地址的一个替代方案。为了满足这些要求,IETF IPv6工作组定义了一个新的范围和地址类型,称为唯一本地,通过在其名称中使用本地保留站点范围的概念,同时强调站点内部使用的寻址“近似”唯一性。
由于IPv6节点复杂性不同,节点可能知道也可能不知道单播地址结构内携带的范围信息。但路由器必须在一定程度上意识到范围,因为它们必须将流量限制在目的地址或源地址的范围之内。因为主机通信通常超过一个范围,接口为每个使用的范围都有一个地址。
将范围信息嵌入到IPv6地址的网络部分增加了IPv6地址的复杂性。后续小节讨论了单播地址中范围的实际实现细节。
1.链路本地地址
当支持IPv6的节点上线时,每个接口缺省地配置一个3层地址,该地址专门用来和相同链路上的其他主机通信。链路本地定义了这些地址的范围,因此分组的SA或DA是这些地址的,就不应该选择到其他链路上。这些地址称为链路本地。这些地址用来链接通信及链接操作过程,如寻找邻居或路由器。
图2-3给出了链路本地地址的结构。一个链路本地地址由固定格式的网络部分FE80::/10组成(译者注:这句话有些问题,还应该包括主机部分),其中高10位是1111 1110 10,后续54位是0。
如前所述,在IPv6中使用接口标识符术语而不是地址的主机部分,如图2-3所示。例2-3展示了一个以太网接口的链路本地地址,其接口ID是基于第2层MAC地址产生的。
例2-3 一个以太网接口的链路本地地址
注释:
从第3层的观点来看,链路是元素域,指它不能有内部层次。这揭示了链路本地地址的扁平结构。
重要的是注意这样的事实,链路本地地址从其本质和格式上讲,是独立于网络中所使用的全部寻址机制的。这与其范围一致;在链路之外,链路本地地址是没有意义的。因此,在网络重新编址的过程中,链路本地通信不受影响。其不变的属性被多种协议所用。路由器将它们的链路本地地址通告链路上的所有节点,因此使这些节点能够与网关通信,而不管全局单播寻址机制。链路本地地址的这个属性在网络设计中也被积极利用。只要可能,链路本地地址就被用来标识下一跳(例如,边界网关协议[BGP]的一个邻居)。
2.唯一本地单播地址
站点范围的概念能够容易地映射到一个私有管理域,其中寻址不必遵循任何全局规则。指定到这个范围的IPv6地址,如RFC 3513中所定义,称为站点本地,并且它们不必是唯一的。这些地址与IPv4私有地址空间的相似性使人想起这种方法的缺陷(见RFC 3879)。反对使用站点本地地址的一些观点如下:
应用问题——当在站点之外,站点本地地址在净荷中携带时,应用会有问题。这种情况的一个好的例子是,依赖于双方地址的客户端/服务器应用,而双方在不同的站点。站点间的地址重叠在定位客户时使服务器迷惑。通过在站点本地地址中增加一个站点标识符以处理地址重叠的努力导致复杂的实现。对网络节点而言,记录所有的站点标识符是困难的,在节点多点接入到多个站点的情况尤其如此。
应用通常而言不知道范围,它们经常泄漏私有地址(如站点本地)到私有网络之外。在采用相同编址的站点之间泄漏地址能够导致路由选择或DNS问题。
路由选择和转发问题——站点本地地址的非唯一性属性将迫使路由器必须记录一个接口的前缀及所属站点。
非唯一站点本地地址使通过中间网络互连一个站点的不连续部分变得困难。在这种情况下建立隧道就是必要的。
多站点的路由器,必须将其转发的决定,不仅基于目的地址而且基于进入接口,并将流量控制在合适的站点内。
在重建Internet的原始形式和全局结构的过程中,在没有站点概念的情况下,IPv6理论上能够存活。但是,务实的考虑提出了比全局范围要小的标识范围的要求。特别是企业有一种令人可理解的偏好,即确定它们网络的边界。由于这些原因,不再使用的站点本地范围和地址必须被良好定义的概念所替代,它能够处理提到的问题。新概念即是一个唯一本地范围和相应的唯一本地地址。
图2-4给出了这些地址的格式。唯一本地单播地址在RFC 4193中被完整地标准化了。
在单播地址空间中,为唯一本地地址(ULA)保留的部分是FC00::/7。图2-4给出的ULA结构包括下列元素。
L确定分配策略。目前只有值1(FD00::/8)在用,指定一个本地分配。
全局ID是一个40位的标识符,确保了地址的全局唯一性。它是伪随机产生的并且不必是序列化的。因为ULA不应被全局选路,它们就不必汇聚,所以序列化的全局ID就不必要。
子网ID为本地域管理者提供了一个资源,能够用来在站点内定义一个层次化的寻址方案。
接口标识符对所有单播地址其含义是相同的,符合修改的EUI-64格式,具有64位长度。
ULA必须在预定义的域范围内使用,该域代表了这些特定地址的本地范围。使用ULA作为SA或DA的流量不应允许穿过域边界。因为没有地址冲突,ULA使得互连不同的本地域变得容易。管理不连续的站点拓扑是容易的。连接到多个站点的路由器能够仅基于地址将它们区别开来,因此避免了附加标签的要求。这些例子说明了唯一本地寻址相对于站点本地寻址的优势。
3.全局唯一地址
全局唯一地址定义用于IPv6 Internet。它们是全局唯一的和全局可路由的。如RFC 3587中所描述,保留用作全局范围通信的IPv6地址由它们的高3位设置为001(2000::/3)来识别。
提供足够多的全局可访问之地址的IPv6,主要目标是通过使用更多地址位来完成的。附加的长度能够导致如下开销:通过更长的查找、显著增大的路由选择表和更大的路由选择更新(因为和IPv4相比存在更多网络的可能)影响路由选择过程。雪上加霜的是可能成为现实的,即IPv6网络期待拥有两个或多个共存的寻址机制,变得明朗的是IPv6路由器将需要某些帮助。提供需要的方法之一是在前缀汇聚上实现并增强强制规则。这样的规则和策略将减少路由选择表的尺寸并缩短占据路由选择表多数前缀的长度。
在开发GUA的一个灵活的结构上已经投入了很多努力,该结构将使容易的汇聚变得简单。做了几种尝试,从RFC 2373开始,增强粒度化的地址结构以反映不同层次的汇聚。在最后,确定了通过强制的分配策略以增强合适的汇聚并确定了一个更简单的地址结构,这些已在RFC 3587中规范,如图2-5所示。
全局单播地址的组成部分如下:
全局路由选择前缀——由Internet地址授权委员会(IANA)为一个服务提供商分配该前缀的一部分,然后服务提供商为其用户分配一个子空间;基于RFC 3177建议,其长度是48位或更短;
子网标识符——一个组织从其服务提供商处接受一个前缀,其中全局路由选择前缀标识服务提供商(SP)和SP内的组织,子网标识符标识其网络的组织结构;
接口标识符——地址的低64位用来标识节点在一条链路上的接口。
注释:
在一个给定接口上,全局单播地址极可能与其他类型的单播地址共存。例如,在一个企业内的用户需要在私有内部网内和Internet上的资源交换信息。这意味着私有网络内的一台主机的接口能够被分配两个地址,其中一个用于与私有网络内的其他主机和资源通信(可能是唯一本地地址),另外一个用于与私有网络外部的主机和资源通信(全局唯一)。对于运营和管理的目的,一个接口上各种地址类型的元素(字段)间的相互关联也许是有意义的。在本例中,GUA和ULA也许使用相同的接口标识符或者甚至是相同的子网标识符。
地址分配策略定义了全局唯一IPv6地址层次结构。因此,此时重要的是简要回顾一下该结构。
4.IPv6单播地址分配
IANA负责管理IPv6地址空间。表2-1总结了本书撰写之时从全局单播地址池中分配的情况。
IANA目前正从表2-1中所标出的所有IPv6 Internet域中分配单播地址。
在IPv4从基于类别的地址迁移到无类别的地址之后,注册机构开始实施层次化的方法分配地址。更大的地址空间分配给组织(ISP、政府、研究网络等),该组织顺次为其用户分配更小的地址块。这种方法允许层次化路由选择,层次化路由选择被冠之于在核心路由器中显著减少路由选择表大小的名声。一种类似的但定义更好的和更严格的方法被IPv6采用。早期的IPv6前缀复杂结构内的字段如顶级汇聚和下一级汇聚,已经被本节所描述的更简单格式所替代。IPv6全局单播地址层次结构通过IANA的分配策略得到增强,而不是适合预定义的地址格式来增强。图2-6以实例说明2001::/16地址池的地址分配过程。IANA为区域Internet注册结构(RIR)提供不长于32位的前缀。目前的RIR如下:
非洲网络信息中心(AfriNIC);
亚太网络信息中心(APNIC);
美国Internet编号注册机构(ARIN);
拉美和加勒比海地区IP地址注册机构(LACNIC);
欧洲IP网络(RIPE NCC)。
RIR将从IANA收到的前缀的地址块分配给国家Internet地址注册机构(NIR,如果有的话)、本地Internet地址注册机构(LIR)或Internet服务提供商(ISP)。这些分配目前在32到35位长度范围。
ISP将前缀分配给它们的客户(企业或住户)。
如图2-6所示,每个组织由其上一级分配一个前缀,然后顺次将前缀(译者注:范围更小的前缀)分配给其下一级。因此,每个组织(IANA、RIR、NIR、LIR和ISP)代表了一个汇聚边界。
ISP和LIR通过IPv4所用的相同度量——主机密度(HD)比(在RFC 3194中定义)来跟踪它们的地址分配利用率。ISP/LIR必须以一种方式分配前缀,这种方式能预防地址分段并允许会聚的最优利用。这样的最好实践使它们能够从其地址空间中产出最多。当需要时,ISP/LIR能够去向RIR申请更多地址分配。
您能够在http://www.cs-ipv6.lancs.ac.uk/ipv6/6Bone/networks/#hier找到从2001::和3FFE::中已分配前缀的一个列表。图2-7给出该信息的一个示例,用于展示本节所描述的分配策略的目的。NTT/VERIO是服务于全球的一个服务提供商,因此它从许多RIR处申请前缀。本例表明它的2001:218::/32地址分配是从APNIC接受的。其客户之一是Leipzig大学,被分配2001:218:A20::/48的地址前缀。大学将一个子网2001:218:A20:FFFD::/64分配给它的一个系。指出这点是有趣的,即NTT/VERIO为这所欧洲大学分配一个前缀,其来源是NTT/VERIO的RIPE NCC 2001:728::/32地址分配,可以有更多的实际分配方式。
在下面URL处您能够找到一个由地区地址注册机构给出的全局IPv6地址分配完整列表。
http://www.ripe.net/ripencc/mem-services/registration/ipv6/ipv6allocs.html。
IPv6通过地址分配策略实施地址层次结构的方法导致微妙的但确是重要的偏离,偏离了传统的IPv4地址管理概念。撰写本书之时,针对IPv6的情况,一个企业不再拥有其自己的全局地址空间。它所使用的地址空间是其ISP地址分配的一个子集。这意味着当一个企业每次更换ISP时,它将必须进行网络重新编址。除了IPv6使重新编址更加容易的功能之外,这个过程将附带运营的影响。
因为IPv6接口能够支持多个单播地址,从一个ISP迁移到另一个ISP能够通过短暂的过渡期进行,这段时期内用户网络上同时使用从旧的和新的ISP得到的前缀。这种情况下的运营经验仍然需要拓展,以评估在IPv6 ISP之间切换时对中等和大型规模企业的影响。而且,随着企业日渐关注IPv6,地址管理的这个方面将经常被列为一个主要的顾虑。因此,大型的、跨国企业开始参与Internet地址注册机构的策略会议,对地址分配机制的改动进行游说。
5.特殊用途的地址
最终,为特殊用途定义了单播地址的一个小集合。它们不携带范围信息,因此将它们从其他单播地址独立出来,进行单独讨论。
两个基本地址具有IPv6运营的意义:
非指定地址不分配给任何接口。但是,没有IPv6地址的设备或它们的IPv6地址在链路本地内还没有被证明是唯一的情况下,这些设备将非指定地址作为SA。非指定IPv6地址将全部128位设置为0。它能够表示为0:0:0:0:0:0:0:0,或压缩形式的::。
回环地址被每个节点用来指其自身,它类似于IPv4中的127.0.0.1地址。在IPv6中,回环地址将其前127位全部设置为0,最后位设置为1。它能够表示为0:0:0:0:0:0:0:1,或压缩形式的::1。
其他两种特殊地址类型与IPv4和IPv6共存相关。将两个地址空间联系起来对支持这种共存的多种特征是重要的。开发了两种机制将IPv4地址映射到IPv6地址:
定义了IPv4兼容的IPv6地址,用来做动态隧道,它是通过将96位设置为0其后添加IPv4地址而构建的。这种地址类型已被取消并不再使用。
IPv4映射的IPv6地址用来将一个IPv4节点的地址表示成IPv6格式。IPv4映射的IPv6地址是这样构造的:前80位设置为0,后跟16位的全1,再添加IPv4地址。
例2-4展示了对应于IPv4地址192.100.10.1的IPv4兼容的和IPv4映射的IPv6地址。
例2-4 IPv4兼容的和IPv4映射的IPv6地址示例
二、IPv6任意播地址
当相同的单播地址分配给多个接口时,典型情况是属于不同节点的接口,如RFC 3513中规定该地址就成为一个任意播地址。因为任意播地址从结构上不能和单播地址区别开来,必须配置一个节点使之理解为其接口指定的一个地址是任意播地址。一个具有任意播DA的分组被选路到配置有该任意播地址的最近接口。一个任意播地址不能用做分组的SA。任意播经常用来虚拟复制重要的网络资源,如域名系统(DNS)根服务器、Web服务器和多播汇合接点(RP),因此提供了冗余和负载均衡的一个等级。IPv6超越了目前IPv4使用的这个概念,因为它为每个单播前缀定义了一组保留的地址,以便于任意播将来使用。
对每个前缀,由RFC 3513定义的子网路由器任意播地址是将前缀的地址接口ID设置为0。一台路由器必须为其接口上配置的所有前缀支持子网路由器任意播地址。目的地为这样一个地址的分组将分发到最近的路由器,该路由器的一个接口配有那个前缀。
RFC 2526定义了为一个给定前缀保留的任意播地址的一个附加集合。图2-8展示了这些任意播地址的结构。
地址格式明确表示出保留子网的高位地址用做任意播用途的意图。这种方法是由为了避免与其他保留地址的冲突需要所产生的。考虑任意播地址的组范围,高位位设置为1(组)同样是有意义的,该位代表了一个被映射MAC地址的个体/组位。在使用EUI-64接口ID的单播前缀情况下,全局/本地位设置为0以指明用于任意播地址的接口ID不是全局唯一的。图2-8所示的任意播ID字段能够取下列值:0到125、127(00-7D,7F)是保留的;ID 126(7E)是仅有的一个当前在用的,用于移动IPv6(MIPv6)家乡代理的任意播地址。
注释:
MIPv6为主机提供了发现其家乡代理(HA)之一的地址机制。主机试图向家乡代理的任意播地址注册(在本节描述),地址中含有主机的家乡前缀。某个HA将收到请求,拒绝注册,并向主机回答包括HA能够使用的实际地址列表。
任意播地址从单播地址空间中分配。几乎没有这种地址类型的运营经验,虽然在RFC 3513中给出了一些使用实例。
三、IPv6多播地址
在IPv6发展过程中,多播受到了应有的关注。在控制平面消息中它替代了广播地址,因此成为IPv6网络运营的一个关键部分。更大的地址空间提供了足够的全局唯一多播组地址,方便了多播服务的部署。
一个多播地址标识了一组接口。具有多播目的地址的分组被分发到所有的组成员。重要的是要记住多播地址不应该用做SA。IPv6多播地址的高8位中每位设置为1(FF00::/8),其格式如图2-9所示。
4位标志(flag)字段中的3位目前在使用:
对于IANA所分配的永久分配多播地址,RFC 3513所定义的低位T设置为0;对于非永久分配的多播地址,其T位设置为1。
RFC 3306中定义的P位,表明多播地址是否基于单播前缀构建的(是设为1,或设为0)。
RFC 3956中定义的R位,如果设置为1,则表明多播组地址包含服务这个组的RP的单播地址。
剩下的第四标志位为未来用途保留,目前设置为0。
注释:
P位设置为1表明多播地址是从一个单播地址构建的。因为单播地址被认为具有有限的生命存活期,由其产生的多播地址就不能是永久分配的。这意味着P位设置为1要求T位也应设置为1。
规定范围是内置于IPv6多播地址架构中的一个强大功能。它为路由器提供了将多播流量限制在合适的域内需要的信息。表2-3列出了目前为图2-9所示的4位范围字段定义的值。
类似于单播地址,多播地址也有其自身的特定用途,如下所述。
1.基于单播前缀的多播地址
GLOP地址在IPv4中引入,用于为有其自治系统号(ASN)的组织提供全局唯一的IPv4多播组地址。这些地址基于全局唯一ASN构建。RFC 3306扩展了这个概念并定义了一个基于单播前缀产生全局唯一IPv6多播地址的机制,如图2-10所示。
保留位必须设置为0。为单播前缀字段提供的64位对基于IPv6单播地址的结构(64位用于接口ID)而言是足够了。图2-10给出的格式表明任何一个给定的IPv6单播前缀对应于232个多播地址。
例2-5给出从单播地址2001:100:abc:1::/64产生的基于单播前缀的多播地址
例2-5 从一个单播地址产生的基于单播前缀的多播地址
注释:
基于单播前缀的多播地址范围不应该超过内置的单播前缀。
注释:
在特定源多播(SSM)部署模型中所用的多播地址(参见第6章)被定义为基于单播前缀的多播地址子集,其中前缀长度和网络前缀字段均设置为0(如图2-11所示)。
2.被请求节点的多播地址
被请求节点的多播地址提供了当仅知道链路本地上的一台主机的第3层单播地址时,和它联系的机制。这个地址类型是针对分配给一个接口的每个单播和任意播前缀产生的。地址格式是FF02::1:FF00:0000/104,其低24 位与产生它的单播地址或任意播地址相同。它代表了标识链路本地多播组的一个确定方式,具有某个给定IPv6单播地址的主机一直在侦听这个组。如果建立到主机(MAC地址)的单播连接所需要的信息不全,通过多播到其被请求节点的多播地址仍然能够到达目的地。
基本的IPv6控制平面过程,如第2层到第3层地址映射和重复地址检测(DAD)使用这个类型的地址(参见2.4节)。例2-6基于图2-12所示的格式构建了一个被请求节点的多播地址。
注释:
被请求节点的多播地址具有链路本地范围。仅在链路本地内用做控制平面功能。
注释:
基于被请求节点的多播地址结构,清楚的一点是,同一被请求节点的多播地址代表了多个IPv6单播地址。考虑到巨大的寻址空间,并假定没有倾向于使用接口ID高40 位的地址分配策略,被请求节点地址的这种超额使用应该是不严重的。
3.IPv6多播地址分配
IPv6多播地址分配遵循IANA网站上公布的规则:http://www.iana.org/assignments/ipv6-multicast-addresses。
IANA在其分配策略中确定了两种多播地址类型:
变化范围的多播地址——在所有范围中这些地址是类似的,但它们代表不同的组。它们保留用做某些类型的服务或应用。一个好的例子是NTP(网络时间协议),其多播地址是FF0X:0:0:0:0:0:0:101,其中X屏蔽了地址范围。
固定范围的多播地址——这些地址仅在它们被定义的范围内有一定意义。这种类型的地址在IPv6基本操作中是重要的。因此,一些常用的多播列在表2-4中。
在本小节中没有讨论更多的多播地址组成之一是组ID。在理论上,只要地址的剩余部分适合前面小节中描述的结构,组ID能够取任意值。更大的多播地址空间增加了这样的忧虑,即第2层地址(从大小而言是很小的)映射到IPv6多播组的显著超额使用。为了最小化这种超额使用,在RFC 3307中定义了组ID分配指南,如表2-5所示。
在IANA管理下,组ID值的低端为永久多播地址保留。这与表2-4中所示的例子是一致的。永久多播ID用做一个服务的全局唯一标识符(例如NTP)。组ID值的高端范围为动态分配的地址保留,而不管是哪种机制分配的。但是,使服务器和主机的分配具有不同的区间范围确实使识别多播地址变得容易,这些地址是通过一个被管理服务获得的。
如果使用其他机制来减轻这种超额使用的话,这些分配规则中的一些也许在将来变得无关。
四、IPv6和第2层寻址
对本讨论而言,IPv6地址以两种方式与第2层地址相关。第一种方式是IPv6独有的,提供了从第2层地址构建接口ID的机制。第二种方式对IPv4和IPv6都是一样的,提供了将一个IP多播地址映射为一个第2层多播地址的机制。
1.EUI-64接口标识符
IEEE规定了EUI-64标识符的格式。为了使IPv6接口ID成为这样的一个标识符,仅需要做一件事,即以Internet标准顺序(全局/本地位)将第6位反位。
IEEE规范也给出从一个48位第2层地址产生一个64位EUI-64标识符的机制。因为有这样的一种机制,在接口的MAC地址和IPv6地址的接口ID部分之间能够建立一种关联。例如,这种类型的ID在Cisco路由器上缺省地由链路本地地址使用。
图2-13展示了从一个MAC地址产生一个IPv6接口ID的两步骤过程。第一步是产生一个EUI-64标识符;第二步是修改它使之成为一个IPv6接口ID。
2.第2层多播地址
类似于IPv4,IPv6目前将第3层多播地址映射到第2层地址。对于多播IPv6流量,MAC地址的第一个16高位位标识第2层多播地址:3333.XXXX.XXXX。IPv6多播地址的低位31位拷贝到MAC地址的剩余部分。图2-14展示了这种映射机制的示例,是以被请求节点多播IPv6地址来说明的。
这两个地址间的关联机制在运营网络中经常用到,并经常在本书通篇使用。
五、一个接口需要的IPv6地址
为了确保IPv6协议的正确运行,每台支持IPv6的主机必须支持下列类型的地址:
回环地址;
链路本地地址;
如果配置了的话,需支持单播或任意播地址;
注册到所有节点多播地址;
主机注册了的所有组的多播地址;
注册到其自身的被请求节点多播地址。
依赖于节点类型、配置和支持的协议,也许存在其他地址或者加入多播组。
一台路由器必须支持为主机列出的地址,以及下列地址:
子网路由器任意播地址;
所有配置的多播地址;
所有路由器多播地址。
这些地址用于控制和数据平面相关的流量。
六、在Cisco IOS路由器内配置IPv6地址
本节给出针对Cisco IOS路由器的配置步骤,这些步骤是将Cisco路由器的一个接口配置为支持IPv6所需要的。例2-7给出在路由器的一个接口上配置支持IPv6的过程,并说明了本节中所复习过的一些概念。
例2-7 在路由器的一个接口上配置支持IPv6
注释:
在例2-7中,路由器通过使用全局命令ipv6 unicast-routing已经开始运行IPv6。没有配置IPv6路由选择的路由器在其每个配置支持IPv6的接口上将作为一台主机。虽然没有在示例中展示,为了最优地转发IPv6流量,重要的一点是使用全局配置命令ipv6 cef,在Cisco路由器上显式地启动Cisco快速转发(CEF)。
注释:
链路本地地址是从接口的48位 MAC地址自动产生的。这是Cisco路由器的缺省行为。Cisco IOS命令也使您能够手工配置链路本地地址。
例2-8给出了在路由器接口上配置各种类型地址的过程。这些配置步骤的结果见show ipv6 interface的输出,其中显示出接口的IPv6属性。
例2-8 在一个路由器接口上配置IPv6地址
注释:
记住,在一个接口上能够配置任意数量的全局IPv6单播地址。在IPv4中,最新配置的地址覆盖原来的地址,在IPv6中与此不同,新地址仅增加到原有地址后面。如果意图是去除目前的地址,您必须明确地这样做。
七、IPv6寻址架构一瞥
IPv6寻址架构的大部分已经定论。其特征的某些部分仍然在研究(例如,唯一本地单播地址)。除去这些未决变化,以其目前水平的发展和标准化,IPv6寻址对大型IPv6网络部署而言已足够成熟。为了快速参照,表2-6总结了本节中的信息。