本文翻译者:weicq2000网络工作组R.DravesRFC:3484MicrosoftResearch归类:标准跟踪2003年2月IPv6的默认地址选择本文件状态ThisdocumentspecifiesanInternetstandardstrackprotocolfortheInternetcommunity,andrequestsdiscussionandsuggestionsforimprovements.PleaserefertothecurrenteditionoftheInternetOfficialProtocolStandards(STD1)forthestandardizationstateandstatusofthisprotocol.Distributionofthismemoisunlimited.版权通告Copyright(C)TheInternetSociety(2003).AllRightsReserved.摘要本文件描述两个算法,分别针对源地址选择和目的地地址选择。这些算法规定所有IPv6实现的默认行为。它们不拒绝由应用和上层协议做出的选择,也不妨碍发展更先进的地址选择机制。这两个算法共享公共背景,包括供管理者使用的可选机制,该机制允许提供替代默认行为的策略。在双栈实现中目的地地址选择算法既可用于IPv4地址也可用于IPv6地址,取决于可获得的源地址。算法或许优先选择IPv6地址,IPv4地址次之;或相反。所有IPv6节点,包括主机和路由器,必须执行本标准定义的默认地址选择。目录第1章引言1-1本文件使用的关键词第2章算法运行背景2-1策略表2-2公共前缀长度第3章地址特点3-1范围比较3-2IPv4地址和IPv4映射的地址3-3其他带有嵌入的IPv4地址的IPv6地址3-4IPv6环回地址和其他格式前缀3-5移动性地址第4章候选源地址第5章源地址选择第6章目的地地址选择第7章与路由的相互影响第8章实现考虑第9章安全考虑第10章举例10-1默认源地址选择10-2默认目的地地址选择10-3为IPv6或IPv4配置优先权10-4为成范围地址配置优先权10-5配置多归属地站点第11章参考文献11-1标准类参考文献N11-2信息类参考文献致谢撰写者通讯录完全版权声明第1章引言IPv6地址架构[1]允许为接口分配多个单播地址。这些地址可以有不同可达范围(链路本地(link-local)、站点本地(site-local)或全球)。这些地址也可以是“优先的”或“过时的”[2]。出于保密考虑引入了“公共地址”和“临时地址”概念[3]。移动性架构引入“归属地地址”和“转交地址”[8]。此外,多归属地情况导致每个节点有多个地址。例如,节点可能有多个接口,其中一些是隧道接口或虚拟接口,或者站点可能采用每个ISP的全球前缀,有多个ISP附着。最终的结果是在初始化通信时,IPv6实现常常面对多个可能的源地址和目的地地址。理想的情况是有默认算法,适合所有实现,用于选择源地址和目的地地址,以便开发者和管理者能够推测和预计他们的系统的行为。进一步,采用双栈或混合栈的实现,它们既支持IPv6又支持IPv4,在初始化通信时非常需要在IPv6和IPv4间作出选择。例如,当DNS名称解析既产生IPv6地址又产生IPv4地址时,网络协议栈可获得IPv6源地址也可获得IPv4源地址。在这些情况,总是优先选择IPv6或总是优先选择IPv4的简单策略会导致系统行为不佳。举个例子,假设DNS名称解析系统解析出全球IPv6地址和全球IPv4地址。如果节点已经分配了全球IPv6地址和自动配置的IPv4地址[9]169.254/16,那么IPv6是通信的最好选择。但是如果节点仅分配了链路本地IPv6地址和全球IPv4地址,那么IPv4是通信的最好选择。目的地地址选择算法,用统一的、既在IPv6地址间又在IPv4地址间进行选择的程序,解决了这个问题。本文件中规定的算法,作为一组规则,对可使用的地址集合定义了分别的排序。对于源地址选择,典型情况在节点的多个接口上分配有多个地址,第5章中源地址排序规则定义了“最好”使用哪一个地址。对于目的的地址选择,DNS可能返回一组针对给定名称的地址,应用需要决定首先使用哪一个,以及如果第一个地址不可达应以何种次序尝试其他地址。当面对由DNS返回的一组地址时,第6章中目的的地址排序规则提供了推荐的排序。本文件分别规定源地址选择和目的地地址选择,但是使用共同的背景,以便汇集两种算法,产生有用结果。这些算法尝试选择处于适当范围内和配置状态下(采用RFC2462中概念,优先的和过时的)源地址或目的地地址。进一步,对于缺乏较合适信息,在其它方面等同的地址间的选择,本文件建议优先采用最长匹配前缀方法。本文件也规定了允许管理者替换默认行为的策略手段。例如,使用这些手段管理者能够规定与目的地前缀一起使用的优先的源前缀;或者宁可采用具有某个前缀的目的地地址,而不采用具有另一个前缀的目的地地址。这些手段使管理者可以灵活处理某些多归属地场景和转换场景,但是它们一定不是包治百病的万应药。本文件规定的选择规则必须不被解释为替代应用或上层合法目的地地址或源地址的显示选择。1-1本文件使用的关键词本文件将遵循BCP14,RFC2119[4]的规定使用“MUST”、“MUSTNOT”、“REQUIRED”、“SHALL”、“SHALLNOT”、“SHOULD”、“SHOULDNOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”等关键词。第2章算法运行背景本文件中地址选择的背景来源于最普通的实现架构,那里目的地地址选择和源地址选择是分开的。因此,完成这些任务我们采用两种分开的算法。这些算法被设计为可以一起工作,它们共享管理上的策略替换机制。在这个实现架构中,应用使用类似getaddrinfo()的AIPs[10],该getaddrinfo()返回一个地址列表给应用。此列表或许既包括IPv6地址又包括IPv4地址(有时以IPv4映射的地址(IPv4-mappedaddresses)出现)。接着,应用传递带有connect()或sendto()的目的地地址到网络栈。然后,典型情况,应用尝试该表中第一个地址,逐步查阅整个地址列表,直到它发现工作地址。在任何情况,网络层绝不会处于需要从几个候选者中选择目的地地址。应用也可能规定带有bind()的源地址,但是通常情况源地址留下不做规定。因此,网络层常常从几个候选者中选择源地址。因此,我们打算让getaddrinfo()实现使用这里规定的目的地地址选择算法,来分类getaddrinfo()实现返回的IPv6地址和IPv4地址列表。分开讲,如果应用或上层没有规定源地址,IPv6网络层将使用此源地址选择算法。将本标准应用于IPv4网络层的源地址选择是可能的,但是很难预期对此有进一步研发。行为优异的应用应当迭代通过从getaddrinfo()返回的地址列表,直到应用发现工作地址。这些算法做决定时使用多个准则。组合效果是:对于具有相同范围或类型的两个地址的地址对情况,优先选择目的地地址/源地址对;对于目的地地址,优先选择较小范围而不是较大范围;优先选择非过时的源地址;当可获得本地地址时避免使用过渡的地址;所有其他方面相同时优先选择具有最长可能公共前缀的地址对。对于源地址选择,公共地址[3]优先临时地址。对于移动情况[8],归属地地址优先转交地址。如果地址同时是归属地地址和转交地址(指示移动节点“位于那个地址的归属地”),归属地/转交地址优先仅归属地地址或仅转交地址。作为可选项,本标准允许采取可以替换算法默认行为的管理配置策略。替代策略采用可配置表的形式,该表规定目的地前缀的优先权值和优先源前缀。如果实现不可配置,或者如果实现还不能被配置,那么,应当使用本文件规定的默认策略表。2-1策略表策略表是最长匹配前缀查询(longest-matching-prefixlookup)表,非常像路由表。给定地址A,策略表中的查询生成两个值:优先权值Precedence(A)和类别或标签值Label(A)。优先权值Precedence(A)用于分类目的地地址。如果Precedence(A)Precedence(B),我们说地址A相比地址B有更高的优先权,意味着我们的算法将优先分类目的地地址A,然后才是目的地地址B。标签值Label(A)考虑这样的策略,这些策略优先使用与目的地地址前缀一起使用的特定源地址前缀。如果Label(S)=Label(D),这些算法优先使用与目的地地址D一起的源地址S。IPv6实现应当借助至少和这里定义的策略表一样有力的机制,支持可配置地址选择。注意,截止到写本标准时,根据一组可能的IPv6地址进行选择的策略仅有有限的使用经验。当获得更多经验后,推荐的默认策略有可能改变。因此,当获得更多经验后,实现能够提供改变默认策略的方法是很重要的。第10-3节和10-4节举例说明可能需要的各种改变。如果实现不可配置,或还没有被配置,那么实现应当按照这里规定的算法,连同下述默认策略表一起运行:前缀优先权标签::1/128500::/04012002::/16302::/96203::ffff:0:0/96104此默认策略表的一个作用是优先使用具有本地目的地地址的本地源地址,具有6to4[5]目的地地址的6to4源地址,具有v4兼容(v4-compatible)目的地地址的v4兼容[1]源地址。此默认策略表的另一个作用是优先使用IPv6地址通信,而不是IPv4地址,如果IPv6和IPv4匹配源地址都可得到。成范围地址前缀的策略表条目可以用可选的区域索引限定。如果这样,前缀表条目仅匹配查询期间的地址,如果此区域索引也匹配该地址的区域索引。2-2公共前缀长度我们定义两个地址A和B的公共前缀长度CommonPrefixLen(A,B)为最长前缀长度(参考最高有效位,或最左边位),两个地址共同拥有此最长前缀。其范围从0到128。第3章地址特点在后面各章给出的规则中,不同类型的地址(例如,IPv4、IPv6、多播和单播)被相互比较。这些地址类型中的某些具有不能直接相互比较的特点。例如,IPv6单播地址可以是“优先的”或“过时的”[2],而IPv4地址没有此概念。为了比较这样的地址,使用排序规则(例如,使用“优先的”地址优先于“过时的”地址),定义下述映射。3-1范围比较多播目的地地址有4比特范围字段,它控制多播分组传播。IPv6寻址架构定义如下范围字段值:接口本地(interface-local)(0x1),链路本地(link-local)(0x2),子网本地(subnet-local)(0x3),域本地(admin-local)(0x4),站点本地(site-local)(0x5),组织本地(organization-local)(0x8)和全球(0xE)范围[11]。在存在多播目的地地址情况下使用源地址选择算法,需要比较单播地址范围与多播地址范围。我们映射单播链路本地到多播链路本地,单播站点本地到多播站点本地,和单播全球范围到多播全球范围。例如,单播站点本地等于多播站点本地,它小于多播组织本地,它小于单播全球,它等于多播全球。我们用Scope(A)表示地址A的范围。例如,如果A是链路本地单播地址,B是站点本地多播地址,那么,Scope(A)Scope(B)。此映射暗示合并单播站点边界和多播站点边界[11]。3-2IPv4地址和IPv4映射的地址目的地地址选择算法既在IPv6地址上运行又在IPv4地址上运行。考虑到此,IPv4地址应当由IPv4映射的地址(IPv4-mappedaddresses)[1]表示。例如,为了在策略表中查询IPv4地址的优先权或其他属性,查询相应的IPv4映射的IPv6地址。分配给IPv4地址的范围如下。IPv4自动配置地址[9],它有前缀169.254/16,被分配链路本地范围。IPv4私有地址[12],它有前缀10/8,172.16/12和192.168/16,被