第二节 域名系统
因网络进行通信最终需要使用二进制地址,因此需要一些机制把ASCII串网络名转换为二进制网络地址。
域名系统DNS(Domain Name System ):主要用来把主机名和电子邮件地址映射为IP地址,其核心是分级的、基于域的命名机制,以及为了实行这个命名机制的分布式数据库系统。
DNS的使用方式:应用程序调用一种名叫解析器(resolver)的库过程,参数为网络名字,解析器将UDP分组传送到本地DNS服务器上,本地DNS服务器查找名字并将IP地址返回给解析器,解析器再把它返回给调用者。
7.2.1 计算机域名的结构
语法上,每台计算机的域名由一系列由字母和数字构成的段组成。
例如,吉林大学具有域名:www.jlu.edu.cn 。
概念上,因特网被分为几百个顶层域,每个域可包含多个主机,也可被分为若干子域;可以用树结构表示域的划分,树叶代表没有子域的域,一个树叶域可以包含一台主机,也可以包含上千台的主机。
DNS的顶层:域名系统规定的最高域的值。

域名的层次规则:最重要的部分位于右边,最左边的段是单台计算机的名字,其他段标识拥有该域名的机构。
域名的段规则:一个域名有几个段,除了规定最高域的选择方法外,域名系统既不规定每个域名中段的个数,也不规定这些段代表什么,每个组织能够选择该组织内计算机域名中段的数目以及这些段所代表的意义。
域名对大小写不敏感,成员名最长达63个字符,路径全名不超过255个字符。
当一个组织希望参加域名系统时,必须申请其中一个顶层域下的一个域名,大多数公司选择登记在com域下。
一旦一个组织被指派到一个域,后缀将为该组织保留,其他组织将不会被指派到相同的后缀。
域名最高域段的值一旦一个新的域被创建和登记,建子域,无须征得树的上级同意。命名遵循组织界限,而非物理网络。
最早域名 |
归属于 |
新增域名 |
单位表示 |
com |
商业组织 |
firm |
公司企业 |
edu |
教育机构 |
shop |
销售公司和企业 |
gov |
政府组织 |
web |
突出万维网活动的单位 |
mil |
军事组织 |
arts |
突出文化、娱乐活动的单位 |
net |
主要网络支持中心 |
rec |
突出消遣、娱乐活动的单位 |
org |
上述以外的组织 |
info |
提供信息服务的单位 |
arpa |
临时ARPA域(仍使用) |
nom |
个人 |
int |
国际组织 |
|
|
7.2.2 资源记录
DNS的功能:把域名映射到资源记录上。
每个域(无论是主机还是顶层域)都有相关的资源记录集合;当解析器给DNS一个域名,DNS取回的是与该域名有关的资源记录。
资源记录的格式:Domain_name Time_to_live Type Class Value
Domain_name(域名):指出这条记录所指向的域。
Time_to_live(生存时间):指出记录的稳定性。
Type(类型):指出记录的类型。
Class(类别):对于因特网信息总是IN;非因特网信息则使用其他代码。
Value(值):可以是数字、域名或ASCII串。其语义基于记录类型。
大多数情况下资源记录以ASCII文本显示,每条资源记录一行。
7.2.3 名字服务器
DNS的一个主要特点——自治:DNS系统允许每个组织为计算机指派域名或改变域名而不必通知中心机构。
自治的实现:
命名体系通过允许组织使用特定后缀控制所有域名(层次域名)来帮助自治。
例如:IBM公司可以自由地创建或改变任何域名,只要这些域名以ibm.com结尾。
DNS运用客户一服务器交互来帮助自治。
整个域名系统以一个大的分布式数据库方式工作:大多数具有Intemet连接的组织运行一个域名服务器;每个服务器包含连向其他域名服务器的信息,结果这些服务器形成一个大的、地位同等的域名数据库。
DNS服务器按照域名层次安排其层次
——每个服务器作为域名体系中一部分的管辖者(authority);一个根服务器(root server)占领着这个层次体系的顶部,是顶层域(如.Com)的管辖者。
根服务器并不包含所有可能的域名,但包含如何到达其他服务器的信息!
例如:虽然根服务器不知道IBM公司的计算机的名字,但它知道如何找到处理对ibm.com的请求的服务器。
一个公司可以选择将它所有的域名都放在一个服务器上;也可以选择运行几个服务器!
如图所示:Foobar公司可能选择的、将其域名层次安排在两个服务器上的两种方法。

域名解析:将域名转换为对等的IP地址的过程,即域名被解析为地址。
域名解析器(或简称解析器)软件:完成地址转换工作的软件。
许多操作系统提供域名解析器软件作为应用程序可以调用的库例程。
例如:在UNIX系统中,应用程序可以调用库例程gethostbyname来进行域名解析。
gethostbyname有一个参数并返回一个结构,参数是一个包含待查域名的字符串;
如果解析成功,gethostbyname返回一个结构,其中包含一个或多个对应于该域名的IP地址的表;
如果解析失败,gethostbyname返回一个NULL指针。
因UDP对单个请求的开销较小,解析器大多数被配置为使用UDP。
工作过程:
每个解析器被配置在一个本地域名服务器上解析器将指定的域名放在一个DNS请求报文中,并向本地服务器发送这个报文;
解析器接着等待服务器发回一个包含答案的DNS应答(DNS reply)报文当服务器发现收到的请求中,指定的域名属于自己的管辖范围时,就直按回答这个请求当服务器发现到达请求中的域名不在自己的管辖范围时,临时成为另一个域名服务器的客户在第二个服务器返回一个回答后,原先的服务器向发送请求的解析器发送一个该回答的副本DNS服务器并不知道其他哪个DNS是给定域名的管辖者,根据根服务器的地址得到解析!
例如:假设图(b)中一个远程站点的解析器(如一个大学的)发送一个请求给它的本地服务器L,域名为:venus.walnut.candv.foobar.com。
反复查询解析:在服务器层次间逐步寻找管辖一个域名的服务器的过程,仅在服务器要解析域名时使用。
当一个服务器成为另一个服务器的客户时,可以请求反复解析,在服务器层次间每次一层地逐步查找。
递归查询解析:请求完全解析——递归请求的回答,要么是要查看的IP地址,要么是一个表示没有这个域名的声明。
主机上的解析器软件往往请求递归解析,将一个域名解析为一个对等的地址。


|