国际化域名系统分析

张鸿1, 邓翔2, 钱华林1(1.中科院计算机网络信息中心, 北京市 100080;2. 中国互联网信息中心, 北京市 100080)E-mail: zhangh@cnnic.net.cn; deng

张鸿1, 邓翔2, 钱华林1

(1.中科院计算机网络信息中心, 北京市 100080;2. 中国互联网信息中心, 北京市 100080)

E-mail: zhangh@cnnic.net.cn; deng@cnnic.net.cn;hlqian@mimi.cnc.ac.cn 摘要:域名系统(Domain Name System 简称DNS) 为当今的互联网提供基础的网络资源定

位服务, 它的正确性, 安全性, 可靠性和稳定性关系到全球网络系统能否正常高效地运行.

现有的DNS 系统中只能使用63个ASCII 字符("a-z","A-Z","0-9","-")来表示网络

主机名, 这给非英语国家的用户造成了极大的不便. 随着互联网国际化的发展趋势, 为了让

用户可以在DNS 中使用本国的文字, 迫切需要一个能够支持多种语言文字的国际化域名系

统. 本文中首先对现行域名系统进行简单介绍, 然后分析了目前处于研究阶段的国际化域名

系统推荐解决方案IDNA(Internationalizing Domain Names In Applications), 并针对

国际化域名系统中的一个重要组成部分 -- 中文域名系统的一些实现问题进行了阐述.

关键词:DNS,IDN,国际化域名

文献标识码:1理论与应用研究学术论文

,

Analysis On Internationalized Domain Name System

Zhang Hong 1, Deng Xiang 2 ,Hualin Qian 1

(1.Computer Network Information Center, Chinese Academy of Sciences, Beijing 100080; 2. Chinese Internet

Information Center, Beijing 100080)

E-mail: zhangh@cnnic.net.cn; deng@cnnic.net.cn; hlqian@mimi.cnc.ac.cn; Abstract: Domain Name System (DNS) provides resource location in the network, and it is the

base for many services on Internet today. The current DNS only use 63 ASCII characters in

domain name, which brings great inconvenience for people who do not speak English. A solution

for Internationalized DNS that allows people to use their native characters in Domain Name is

quite urgent. This paper gives a brief introduction to DNS and its working mechanism, and

continues with an analysis on the Internationalizing Domain Names In Applications (IDNA),

which is the recommended solution by IDN Workgroup in IETF, finally gives some comments on

introducing IDNA into Chinese Domain Name.

Keyword: DNS, IDN, Domain Name System

1. 简介

域名系统(Domain Name System,简称:DNS)的主要功能是通过域名和IP 地址之间

的相互对应关系, 来精确定位网络资源, 即:根据域名查询IP 地址, 反之亦然. 它是当今

1

Internet 的基础架构, 众多的网络服务(如Http,Ftp, Email等等) 都是建立在DNS 体系

基础之上的. 权威人士指出:"一旦你理解了DNS, 你才真正懂得了Internet". 因此,DNS

的重要性是不言而喻的.

DNS 定义的域名空间的结构是树状层次化的, 如图1所示. 图的最上方是

,

DNS 树形结

构中唯一的一个根(Root),用点号"." 表示, 根的下一级称为顶级域(Top Level Domain,

简称:TLD),也称一级域. 顶级域的下级就是二级域(Second Level Domain, 简称:SLD),

二级域的下级就是三级域, 依次类推. 每个域都是其上级域的子域(Sub Domain), 比如

".net.cn" 是".cn" 的子域, 而"cnnic.net.cn" 既是"net.cn" 的子域, 同时也是".cn" 的子域.

三级域

二级域

顶级域

区(Zone)

www …

com

cnnic

net

jp cn

orgnet com

"." 根

图1 DNS的树型结构

图1中DNS 树上的每一个节点都有一个标识(Label),根节点的标识是" 空"(即长度

为0), 其它节点的标识的长度在1到63字节之间. 一个节点的域名是由从

,

这个节点到根节

点的路径上的所有标识从左到右顺序排列组成的, 标识之间用"." 分隔. 例如

www.cnnic.net.cn.

DNS 的整个域名空间划分成许多的区(Zone),见图1中的椭圆标记, 数据采用分布式

存储. 每个区都有域名服务器(包括主服务器和从服务器), 以资源记录(Resource Record)

的形式来存储域名信息. 资源记录包括了主机名(域名) 和IP 地址的对应, 以及子域服务

器的授权等多种类型.

用户在使用DNS 服务时, 可以对不必细致地了解DNS 域名空间的树型结构体系, 只须

在设置网络时指定一个DNS 服务器或使用动态IP 等相关技术. 从而用户的应用程序可以通

过操作系统内嵌的解析器(Resolver)访问DNS 系统, 查询域名相关的网络资源信息. 关于

DNS 详细的描述可以参考[1][2].现有的DNS 系统只支持七位(7bit)的ASCII 字符编码的子

集. 在RFC1035中规定, 域名的标识只能由字母(a-z, A-Z),数字(0-9),和"-" 组成, 称

为LDH(letter, digital, hyphen),而且只能以字母开头, 以字母或数字结尾, 其它文字和符

,

2

号一律无效. 现在的许多基于文本的网络协议, 比如HTML, XML, IMAP, FTP 等已经支持

或者部分支持国际化字符集(Universal Character Set,简称:UCS),而在现有的域名系统中

还不能使用国际化字符集, 这无疑影响了Internet 的发展.

国际化域名 [3](Internationalized Domain Name,简称IDN) 是指使用国际化字符的域名.

这里的国际化字符来自国际化字符集[4] UCS ,即Unicode 字符集标准, 字符的编码用"U "

16进制整数来表示. 例如:汉字" 中" 的Unicode 是U 4E2D.

在由传统的DNS 演变成支持国际化域名的IDN 过程中, 要考虑以下几点因素:

域名长度:域名由一串标识组成, 每串标识的长度是1-63字节, 这些标识串的总

长度(也就是域名的长度) 不能超过255字节.

兼容性和互操作性:由于DNS 在Internet 中的基础性地位, 国际化域名系统必须

与现有DNS 保持良好的兼容性和互操作性, 并且要尽量减小对现有建立在DNS

之上的各种网络应用协议的影响.

国际化考虑:在DNS 的域名和资源记录中允许使用的国际化字符应该依据Unicode

,

字符标准.

2. 国际化域名方案

IETF(Internet Engineering Task Force,国际互联网络技术工程组织) 成立了国际化域

名工作组(IDN Working group)负责研究, 确立国际化域名标准.IDN 工作组提出的技术

实现方案[5]称为:Internationalizing Domain Names in Applications(简称IDNA), 即:在应用

程序中实现国际化域名.

IDNA 方案无需修改DNS 服务器端, 而是在用户的应用程序中对国际化域名进行规范

化及字符转换处理, 采用ASCII 兼容的编码方式(ASCII Compatible encoding, 简称:ACE)

把国际化域名转换成由ASCII 字符表示的域名. 这些都发生在DNS 处理过程内部, 对于使

用DNS 服务的用户是完全透明的. 无论用户输入的是英文域名还是各国文字所构成的国际

化域名, 都可以正确的使用DNS 服务, 无缝的实现现有域名系统到国际化域名系统的升级.

IDNA 方案的结构如图2所示, 图中的左半部分表示国际化域名的处理过程, 右半部分

表示的是应用程序与各种应用服务器之间的交互处理过程, 与DNS 无

,

关.

2.1用户输入

IDNA 的结构并不影响用户和应用程序的接口, 用户可以采用应用程序接受的任何字符

来输入域名. 用户输入的字符通常是本地字符集的编码(中文如GB2312,GB13000,GB18030,

Big5等), 要先把本地字符编码转换成Unicode 编码后才能进行后续处理.

支持IDNA 的应用程序(如:浏览器, 电子邮件等) 应该能够以两种形式接受国际化域

名的输入, 即, 国际化字符形式和ACE 形式. 但ACE 形式是一串无规律的ASCII 字符串, 所

以并不推荐用户直接使用ACE 形式, 但不排除程序员在软件调试中使用.

3

2.2 Nameprep

Nameprep[6](Name preparation)是指对域名中字符的预处理, 包括进行字符映射, 字

符规范化处理, 以及对禁止字符的检查三个步骤. 只有通过Nameprep 检查的字符才能出现

在国际化域名中.

应用服务器 DNS 服务器

应用程序依据特定的

,

应用协议与相应的应

用服务器进行通讯.

解析器

ACE 转换

Nameprep

应用程序(本地字符集到Unicode 转换)

IDNA

用户输入

图2 IDNA的结构

2.3 ACE转换

ACE[7](ASCII-compatible encoding)转换是指用域名中允许的63个ASCII 字符来表

示国际化字符.ACE 算法详见下一节.

2.4 应用程序和解析器

,

应用程序与解析器实际上是通过一个应用程序接口(API)进行交互, 输入解析器和解

析器输出的域名均为ACE 格式. 解析器返回给应用程序的域名是以ACE 表示的, 应用程序应

该对ACE 进行解码, 以正常的字符形式显示给用户.

4

2.5 解析器和DNS 服务器

支持国际化域名的操作系统中应该包含实现IDNA 的库函数. 库函数的输入是应用程序

使用的字符集中的字符, 它对现有的LDH 字符组成的域名没有影响, 但对于国际化域名, 输

出的是ACE 格式的域名. 因此, 解析器和DNS 服务器之间交互的仍然是ASCII 字符组成的域

名.

3.ACE 算法

经过Nameprep 处理过的国际化域名是以Unicode 序列的形式表示的. 但现有的DNS

系统只支持用ASCII 字符表示的域名, 所以要对Unicode 序列进行ACE 编码, 把Unicode

序列表示的域名转换成ASCII 字符串表示的ACE 域名. 下面介绍IDN 工作组采纳的

PUNYCODE[8]编码算法.

PUNYCODE 是一种高效的ACE 编码方式, 专为国际化域名而设计的. 它

,

可以在Unicode

序列和ASCII 字符串之间进行唯一的和可逆的转换. 转换的过程中,Unicode 序列中的ASCII

字符保持不变, 国际化字符则用字母和数字来表示. 它的实质是一种用数量有限的基本字符

(字母和数字) 来唯一地表示大字符集(Unicode)中的字符的通用算法. 域名中的字符,

包括ASCII 码和Unicode 码, 都是作为整数进行处理.

人们常用的整数有二进制, 八进制, 十进制, 十六进制等. 这些表示法都有两个缺点,

就拿十进制来讲, 一方面, 一个整数可以有多种表示法, 如,0123,00123都等于123; 另

一方面, 如果多个整数连在一起组成数字序列, 就无法分隔出来. 如数字序列123456可能

是123,456, 也可能是1234,56等等.

PUNYCODE 算法的思想是基于:通用可变长度整数的概念

(generalized variable-length

integers ). 通用可变长度整数算法克服了上述两个缺陷, 是一种表示整数序列的巧妙方法.

用这种方法表示的整数是唯一的, 并且连接在一起的多个整数之间不需要分隔符, 而是根据

整数本身的特征进行分隔, 这些特点非常适合于用来表示国际化域名. 国际化域名中的

标签: