站内搜索

 

最近更新
推荐文章
全球域名统计
总注册数量:
38,937,992
.COM域名:
30,831,113
.NET域名:
4,977,193
.ORG域名:
3,129,686

 









 

 您的位置:首页 > 网络知识 > 域名相关 > 域名知识 > 基本常识 >  正文

IPv6时代的域名系统

 


CNNIC研究开发部 张鸿

摘要:IPv6协议是取代IPv4的下一代网络协议,它具有许多新的特性与功能。域名系统(DNS)是Internet的基础架构,IPv6的新特性也需要DNS的支持。因此,DNS势必要升级以满足IPv6的需求。本文从IPv6 DNS的体系结构、IPv6的地址解析、IPv6地址自动配置和即插即用、IPv4到IPv6的过渡等几方面对IPv6时代的DNS进行了分析和研究。


关键词:IPv6 域名系统


一. 简介


    域名系统(Domain Name System,简称:DNS)的主要功能是通过域名和IP地址之间的相互对应关系,来精确定位网络资源,即:根据域名查询IP地址,反之亦然。DNS是当今Internet的基础架构,众多的网络服务(如Http,Ftp,Email等等)都是建立在DNS体系基础之上的。权威人士指出:"一旦你理解了DNS,你才真正懂得了Internet"。因此,DNS的重要性是不言而喻的。


    IPv6协议是用来取代IPv4的互联网协议。IPv6具有很多优点。首先,它提供了巨大的地址空间,这实际上是推广IPv6的最大动力。其次,IPv6的地址结构和地址分配采用严格的层次结构,以便于进行地址聚合,从而大大减小了路由器中路由表的规模。再次,IPv6协议支持网络节点的地址自动配置,可以实现即插即用功能。而且,IPv6协议对主机移动性有较好的支持,适合于越来越多的互联网移动应用。另外,IPv6协议在安全性、对多媒体流的支持性等方面都具有超过IPv4的优势。


    IPv6网络中的DNS非常重要,一些IPv6的新特性和DNS的支持密不可分。本文从IPv6 DNS的体系结构、IPv6的地址解析、IPv6地址自动配置和即插即用、IPv4到IPv6的过渡等几方面对IPv6时代的DNS进行了分析和研究。


二. IPv6域名系统的体系结构


    IPv6网络中的DNS与IPv4的DNS在体系结构上是一致的,都是采用树型结构的域名空间。(如图1所示)IPv4协议与IPv6协议的不同并不意味着需要单独两套IPv4 DNS体系和IPv6 DNS体系,相反的是,DNS的体系和域名空间必须是一致的,即,IPv4和IPv6共同拥有统一的域名空间。在IPv4到IPv6的过渡阶段,域名可以同时对应于多个IPv4和IPv6的地址。以后随着IPv6网络的普及,IPv6地址将逐渐取代IPv4地址。


    图1的最上方是DNS树形结构中唯一的一个根(Root),用点号"."表示。根的下一级称为顶级域(Top Level Domain, 简称:TLD),也称一级域。顶级域的下级就是二级域(Second Level Domain, 简称:SLD),二级域的下级就是三级域,依次类推。每个域都是其上级域的子域(Sub Domain),比如 ".net.cn"是".cn"的子域,而"cnnic.net.cn"既是"net.cn"的子域,同时也是".cn"的子域。


    DNS树上的每一个节点都有一个标识(Label),根节点的标识是"空"(即长度为0),其它节点的标识的长度在1到63字节之间。一个节点的域名是由从这个节点到根节点的路径上的所有标识从左到右顺序排列组成的,标识之间用"."分隔。例如www.cnnic.net.cn。
 



 


 



 



    DNS的整个域名空间划分成许多的区(Zone),见图1中的椭圆标记,数据采用分布式存储。每个区都有域名服务器(包括主服务器和辅服务器),以资源记录(Resource Record)的形式来存储域名信息。资源记录包括了主机名(域名)和IP地址的对应,以及子域服务器的授权等多种类型。


    用户在使用DNS服务时,可以对不必细致地了解DNS域名空间的树型结构体系,只须在设置网络时指定一个DNS服务器或使用动态主机配置(DHCP)等相关技术。从而用户的应用程序可以通过操作系统内嵌的解析器(Resolver)访问DNS系统,查询域名相关的网络资源信息。关于DNS详细的描述可以参考[1][2]。


三. IPv6地址及其表示方法


IPv6地址长度为128比特,地址按照其传输类型分为3种[3]:


    单播地址(Unicast Address):用来标识单一网络接口。目标地址是单播地址的数据包将发送给以这个地址标识的网络接口。


    任播地址(Anycast Address):用来标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。


    多播地址(Multicast Address):用来标识一组网络接口的标识(通常属于不同的节点)。发送到多播地址的数据包发送给本组中所有的网络接口。在IPv6中没有广播地址(Broadcast Address),用多播地址取代。


    其中,单播地址按照地址的传输范围分为可聚合全局单播地址(Aggregatable Global Unicast Addresses)、NSAP地址、IPX层次地址、站点本地地址(Site-Local address)和链路本地地址(link-Local address)等。所有的网络接口至少要有一个链路本地地址,同时还可以拥有多个地址(包括单播地址,任播地址和多播地址)。


    IPv6的地址在表示和书写时,用冒号将128比特分割成8个16比特的部分,每个部分包括4位的16进制数字,例如


    1080:0000:0000:0000:0008:0800:200C:123A


    在每个4位一组的十六进制数中,如其高位为0,则可省略。例如将0800写成800,0008写成8,0000写成0。于是 1080:0000:0000:0000:0008:0800:200C:123A可缩写成1080:0:0:0:8:800:200C:123A。为了进一步简化,规范中导入了重叠冒号的规则,即用重叠冒号置换地址中的连续16比特的0。例如,将上例中的连续3个0置换后,可以表示成如下的缩写形式。1080::8:800:200C:123A。重叠冒号的规则在一个地址中只能使用一次。例如,地址0:0:0:BA98:7654:0:0:0可缩写成::BA98:7654:0:0:0或0:0:0:BA98:7654::,但不能记成::BA98:7654::。


    另外,可以用"IPv6地址/前缀长度"来表示地址前缀。这个表示方法类似于CIDR中IPv4的地址前缀表示法。这里IPv6地址是上述任一种表示法所表示的IPv6地址,前缀长度是一个十进制值,指定该地址中最左边的用于组成前缀的比特数。例如,对32比特的前缀10800000(十六进制),可以如下表示:


    1080::8:800:200C:123A/32


    1080::/32


四. DNS对IPv6地址层次性的支持


    IPv6可聚合全局单播地址是在全局范围内使用的地址,必须进行层次划分及地址聚合。它的层次结构如下表所示: 
 



 


 

 

3

 
13

 
8

 
24

 
16

 
64比特

 

 

 

FP

 
TLAID

 
RES

 
NLAID

 
SLAID

 
Interface ID

 

 


 



其中:


    FP(001):用于可聚合全局单播地址的格式前缀(FP:Format Prefix)(3比特);


    TLA ID:顶级聚合标识符(Top-Level Aggregation Identifier);


    RES:为将来使用而保留;


    NLA ID:次级聚合标识符(Next-Level Aggregation Identifier);


    SLA ID:站点级聚合标识符(Site-Level Aggregation Identifier);


    INTERFACE ID: 接口标识符;


    IPv6全局单播地址的分配方式如下:顶级地址聚合机构TLA(即大的ISP或地址管理机构)获得大块地址,负责给次级地址聚合机构NLA(中小规模ISP)分配地址,NLA给站点级地址聚合机构SLA(子网)和网络用户分配地址。IPv6地址的层次性在DNS中通过地址链技术可以得到很好的支持。下面从DNS正向地址解析和反向地址解析两方面进行分析。


4.1 正向解析


    IPv4的地址正向解析的资源记录是"A"记录。IPv6地址的正向解析目前有两种资源记录,即,"AAAA"和"A6"记录。其中,"AAAA"较早提出[4],它是对"A"记录的简单扩展,由于IP地址由32位扩展到128位,扩大了4倍,所以资源记录由"A"扩大成4个"A"。"AAAA"用来表示域名和IPv6地址的对应关系,并不支持地址的层次性。


    "A6"在RFC2874[5]中提出,它是把一个IPv6地址与多个"A6"记录建立联系,每个"A6"记录都只包含了IPv6地址的一部分,结合后拼装成一个完整的IPv6地址。"A6"记录支持一些"AAAA"所不具备的新特性,如地址聚合,地址更改(Renumber)等。


    首先,"A6"记录方式根据TLA、NLA和SLA的分配层次把128位的IPv6的地址分解成为若干级的地址前缀和地址后缀,构成了一个地址链。每个地址前缀和地址后缀都是地址链上的一环,一个完整的地址链就组成一个IPv6地址。这种思想符合IPv6地址的层次结构,从而支持地址聚合。


    其次,用户在改变ISP时,要随ISP改变而改变其拥有的IPv6地址。如果手工修改用户子网中所有在DNS中注册的地址,是一件非常繁琐的事情。而在用"A6"记录表示的地址链中,只要改变地址前缀对应的ISP名字即可,可以大大减少DNS中资源记录的修改。并且在地址分配层次中越靠近底层,所需要改动的越少。


    在下例中,节点host.example.com地址由example.com(SLA)分配, example.com的地址由example1.net(NLA)分配,而example1.net的地址则是由ISP-A.net(TLA)分配。下面的多条记录就组成了一个完整的IPv6 DNS地址链。如果example1.net改变ISP,需要改变其DNS中的ISP地址前缀,而它的网络用户example.com则无需改变DNS设置。


例1:IPv6DNS地址链:


$ORIGIN example.com. 

host IN A6 64 0:0:0:0:42::1 company.example1.net.

$ORIGIN example1.net.

company IN A6 32 0:0:201:1860:: SUBSCRIBER-X.ISP-A.net

$ORIGIN ISP-A.net.

SUBSCRIBER-X IN A6 0 3ffe:8050::


例2:把例1中的地址翻译成"AAAA"记录表示的形式:


$ORIGIN example.com.

host IN AAAA 3ffe:8050:201:1860:0:0:0:0:42::1 


4.2 反向解析


    IPv6反向解析的记录和IPv4一样,是"PTR",但地址表示形式有两种。一种是用 "."分隔的半字节16进制数字格式(Nibble Format),低位地址在前,高位地址在后,域后缀是"IP6.INT."。另一种是二进制串(Bit-string)格式,以"\["开头,16进制地址(无分隔符,高位在前,低位在后)居中,地址后加"]",域后缀是"IP6.ARPA."。半字节16进制数字格式与"AAAA"对应,是对IPv4的简单扩展。二进制串格式与"A6"记录对应,地址也象"A6"一样,可以分成多级地址链表示,每一级的授权用"DNAME"记录。和"A6"一样,二进制串格式也支持地址层次特性。


    总之,以地址链形式表示的IPv6地址体现了地址的层次性,支持地址聚合和地址更改。但是,由于一次完整的地址解析分成多个步骤进行,需要按照地址的分配层次关系到不同的DNS服务器进行查询。所有的查询都成功才能得到完整的解析结果。这势必会延长解析时间,出错的机会也增加。因此,需要进一步改进DNS地址链功能,提高域名解析的速度才能为用户提供理想的服务。


五. IPv6中的即插即用与DNS


    IPv6协议支持地址自动配置[6][7],这是一种即插即用的机制,在没有任何人工干预的情况下,IPv6网络接口可以获得链路局部地址、站点局部地址和全局地址等,并且可以防止地址重复。IPv6支持无状态地址自动配置和有状态地址自动配置两种方式。


    在无状态地址自动配置方式下,需要配置地址的网络接口先使用邻居发现机制获得一个链路本地地址。网络接口得到这个链路本地地址之后,再接受路由器宣告的地址前缀,结合接口标识得到一个全局地址。而有状态地址自动配置的方式,如DHCP(动态主机配置协议),需要一个DHCP服务器,通过客户机/服务器模式从DHCP服务器处得到地址配置的信息。


    IPv6节点通过地址自动配置得到IPv6地址和网关地址。但是,地址自动配置中不包括DNS服务器的自动配置。如何自动发现提供解析服务的DNS服务器也是一个需要解决的问题[8]。正在研究的DNS服务器的自动发现的解决方法可以分为无状态和有状态两类。


    在无状态的方式下,需要为子网内部的DNS服务器配置站点范围内的任播地址。要进行自动配置的节点以该任播地址为目的地址发送服务器发现请求,询问DNS服务器地址、域名和搜索路径等DNS信息。这个请求到达距离最近的DNS服务器,服务器根据请求,回答DNS服务器单播地址、域名和搜索路径等DNS信息。节点根据服务器的应答配置本机DNS信息,以后的DNS请求就直接用单播地址发送给DNS服务器。


    另外,也可以不用站点范围内的任播地址,而采用站点范围内的多播地址或链路多播地址等。还可以一直用站点范围内的任播地址作为DNS服务器的地址,所有的DNS解析请求都发送给这个任播地址。距离最近的DNS服务器负责解析这个请求,得到解析结果后把结果返回请求节点,而不像上述做法是把DNS服务器单播地址、域名和搜索路径等DNS信息告诉节点。从网络扩展性,安全性,实用性等多方面综合考虑,第一种采用站点范围内的任播地址作为DNS服务器地址的方式相对较好。


    在有状态的DNS服务器发现方式下,是通过类似DHCP这样的服务器把DNS服务器地址、域名和搜索路径等DNS信息告诉节点。当然,这样做需要额外的服务器。


六. IPv6过渡阶段与DNS 


    在IPv4到IPv6的过渡过程中,作为Internet基础架构的DNS服务也要支持这种网络协议的升级和转换。IPv4和IPv6的DNS记录格式等方面有所不同,为了实现IPv4网络和IPv6网络之间的DNS查询和响应,可以采用应用层网关DNS-ALG结合NAT-PT的方法[9],在IPv4和IPv6网络之间起到一个翻译的作用。例如,IPv4的地址域名映射使用"A"记录,而IPv6使用"AAAA"或"A6"记录。那么,IPv4的节点发送到IPv6网络的DNS查询请求是"A"记录,DNS-ALG就把"A"改写成"AAAA",并发送给IPv6网络中的DNS服务器。当服务器的回答到达DNS-ALG时,DNS-ALG修改回答,把"AAAA"改为"A",把IPv6地址改成DNS-ALG地址池中的IPv4转换地址,把这个IPv4转换地址和IPv6地址之间的映射关系通知NAT-PT,并把这个IPv4转换地址作为解析结果返回IPv4主机。IPv4主机就以这个IPv4转换地址作为目的地址与实际的IPv6主机通过NAT-PT通信。示意如图2。 
 



 


 



 



    对于采用双协议栈方式的过渡方法,在DNS服务器中同时存在"A"记录和"AAAA"(或"A6")记录。由于节点既可以处理IPv4协议,也可以处理IPv6协议,因此无需类似DNS ALG的转换设备。无论DNS服务器回答"A"记录还是"AAAA"记录,都可以进行通信。 


七. 总结


    随着Internet技术的不断发展,IPv6已经离我们越来越近。DNS作为IPv4时代的网络基础服务,对Internet起着重要的作用。在即将到来的IPv6时代,新的协议和功能要求DNS不再是仅仅提供传统意义上的简单资源定位,而是一方面提供类似IPv4 DNS的基础功能,另一方面结合IPv6的新特性,和其它协议有机的结合在一起,提供新的功能,使网络的配置、维护、使用变的更加简单方便,让用户感觉到新技术带来的新体验。






参考文献


[1] P. Mockapetris,RFC1034"DOMAIN NAMES - CONCEPTS AND FACILITIES",November 1987 

[2] P. Mockapetris,RFC1035"DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION",November 1987

[3] R. Hinden, RFC2373:"IP Version 6 Addressing Architecture", July 1998

[4] S. Thomson, RFC1886:"DNS Extensions to support IP version 6", December 1995

[5] M. Crawford, RFC2874:"DNS Extensions to Support IPv6 Address Aggregation and Renumbering", July 2000

[6] T. Narten, RFC2461:"Neighbor Discovery for IP Version 6 (IPv6)", December 1998

[7] S. Thomson, RFC2462:"IPv6 Stateless Address Autoconfiguration", December 1998

[8] Dave Thaler, draft-ietf-ipngwg-dns-discovery-analysis-00.txt,"Analysis of DNS Server Discovery Mechanisms for
IPv6", July 2001

[9] G. Tsirtsis, RFC2766:"Network Address Translation - Protocol Translation (NAT-PT)", February 2000
 



打印】【 】【评论】【关闭】【顶部

 相关链接