DNS原理
DNS 原理DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它主要是用来通过用户亲切而友好的名称代替
DNS 原理
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它主要是用来通过用户亲切而友好的名称代替枯燥而难记的IP 地址以定位相应的计算机和相应服务。因此,要想让亲切而友好的名称能被网络所认识,则需要在名称和IP 地址之间有一位“翻译官”,它能将相关的域名翻译成网络能接受的相应IP 地址。DNS 就是这样的一位“翻译官”,它的工作原理可用图1来表示。

图1
域名的查询过程
在Internet 上,一个域名要由两台域名服务器提供“权威性的”域名解析。这里的“权威性”,指的是被服务的域名的所有记录是由这两台服务器唯一决定的。虽然Internet 上的其他域名服务器上都可能保存有该域名的记录,但那些记录是从这两台“权威性”的域名服务器上拷贝过去的,是非权威性的。这两台域名服务器,和您的域名一起被登记在域名注册管理机构的数据库中。如果是国际域名,域名注册管理机构就是InterNIC (国际互联网络信息中心);如果是国内域名,域名注册管理机构就是CNNIC (中国互联网信息中心)。这两台“权威性的”服务器,一主一辅,保存着相同的记录,主要是为了提高可靠性。域名注册管理机构的数据库的记录最终体现在“根”域名服务器上。目前在Internet 上的最顶级“根”域名服务器共有13台,它们被完善地维护着。如果它们全都不工作,Internet 就崩溃了(网络仍通,但域名及电子邮件完全不能工作)。根服务器中保存的记录的最本质的信息,就是一个域名由哪两台域名服务器提供解析服务。
以下结合实例讲述域名的查询过程:当您打开浏览器,访问某个站点时,例如www.hichina.com ,您的电脑需要知道这个站点的IP 地址是多少。于是它会自动向您的“主控D NS”服务器发出询问,即“www.hichina.com的IP 是多少?”,如果这台域名服务器对hichina.com 这个域名不是“权威性”的,起初它上面并没有关于hichina.com 的记录,于是它向根服务器发出一个查询:“hichina.com由什么服务器提供域名解析服务”?根服务器的回答将是:“哦,去问dns1.hichina.com 或者dns2.hichina.com 吧。他们的IP 地址是203.196.4.70及203.196.4.10”。您的主控DNS 服务器继而会询问dns1.hichina.com 这台域名服务器,还是那个问题,即“www.hichina.com的IP 是多少?”,dns1.hichina.com 将给出“权威性的”回答。您的主控DNS 服务器收到这个回答,一方面将该信息告诉您的电脑,另一方面它会把该信息保存在自己的缓冲区内,如果它再次接到相同的查询,它就直接将刚才缓存了的记录回答给下一个询问者。但是这个缓存的记录有一个失效期,当失效期到达后,您的主控DNS 服务器将会自动丢弃缓存的记录。当再有电脑发出同样的查询请求时,将重复前面叙述的完整的过程。主控DNS 服务器“代理”了电脑的查询过程,一级一级地进行了查
,询,我们称之为“递归式”的查询。对于国内域名,如www.domain.com.cn ,查询过程将更加复杂一些。您的电脑向您的主控DNS 服务器发出查询请求: “www.domain.com.cn的IP 地址是多少?”,如果您的主控DNS 服务器不是该域名的“权威性”的服务器,它上面没有关于www.domain.com.cn 的记录,于是它向根服务器发出询问:“com.cn由什么服务器提供域名服务?”,根服务器的回答将是:“哦,去问ns.cnc.ac.cn 或者sns.edu.cn 吧。他们的IP 地址是159.226.1.1及202.112.0.34”(注:根服务器实际共列出了7个域名服务器,经笔者测试,其中有些域名服务器查询的结果不正确)。您的主控DNS 服务器继而向ns.cnc.ac.cn 发出查询:“domain.com.cn由谁提供域名服务?”,nc.cnc.ac.cn 将回答:“去问dns1.hichina.com 或者dns2.hichina.com 吧,他们的IP 地址是203.196.4.70及203.196.4.10。”您的主控DNS 服务器接着会询问dns1.hichina.com 这台域名服务器,“www.domain.com.cn 的IP 是多少?”,dns1.hichina.com 将给出“权威性的”回答。同样,您的主控DNS 服务器也将缓存这个记录直至失效期到来。在域名系统中,象ns.cnc.ac.cn 或sns.edu.cn 这样的服务器就是国内域名的根服务器。
请注意,根服务器不能作为您的“主控DNS”服务器。因为它不会帮助您进行“递归式”的查询。
客户机发送的每条查询消息都包括3条信息,以指定服务器应回答的问题。
● 指定的 DNS 域名,表示为完全合格的域名 (FQDN) 。
● 指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。
● DNS 域名的指定类别。
对于DNS 服务器,它始终应指定为 Internet 类别。例如,指定的名称可以是计算机的完全合格的域名,如hosta.hello.company.com ,并且指定的查询类型用于通过该名称搜索地址资 源记录。系统将把D NS 查询当作客户机向服务器提出的两部分问题,如“对于名为 hostname.hello.company.com 的计算机,你有没有地址资源记录?”当客户机从服务器接收应答时,它读取并解释应答的地址资源记录,以了解它通过名称提问的计算机的 IP 地址。
DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。
另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代。
总之,DNS 的查询过程按两部分进行:首选,名称查询从客户机开始并传送至解析程序(DNS客户服务) 进行解析; 其次,不能就地解析查询时,可根据需要查询DNS 服务器来解析名称。DNS 查询的过程如下图所示。
,
如查询过程的初始步骤所示,DNS 域名由本机的程序使用。该请求随后传送至 DNS 客户服务,以通过使用就地缓存的信息进行解析。如果可以解析查询的名称,则查询将被应答,并且此过程完成。其中,本地解析程序的缓存可从以下2个可能的来源获取名称信息:
● 如果主机文件就地配置,则来自该文件的任何主机名称到地址的映射都将在DNS 客户服务启动时预先加载到缓存中。
● 从以前DNS 查询应答的响应中获取的资源记录将被添加至缓存并保留一段时间。
如果此查询不匹配缓存中的项目,则解析过程继续进行,客户机查询 DNS 服务器来解析名称。 接下来查询 DNS 服务器,当本地的DNS 不能就地解析查询时,可根据需要查询 DNS 服务器来解析名称。如图4-1所示,客户机将查询首选 DNS 服务器。在此过程中使用的实际服务器是从全局列表中选择的。当 DNS 服务器接收到查询时,首先检查它能否根据在服务器的就地配置区域中获取的资源记录信息作出权威性的应答。如果查询的名称与本地区域信息中的相应资源记录匹 配,则服务器作出权威性的应答,并且使用该信息来解析查询的名称。
如果查询的名称没有区域信息,则服务器检查它能否通过本地缓存的先前查询信息来解析名称。如果从中发现匹配的信息,则服务器使用它应答查询。接着,如果首选服务器可使用来自其缓存的肯定匹配响应来应答发出请求的客户机,则此次查询完成。
如果查询名称在首选服务器中未发现来自缓存或区域信息的匹配应答,则查询过程可继续进行,使用递归来完全解析名称,包括来自其他 DNS 服务器的支持,以帮助解析名称。在默认情况下,DNS 客户服务要求服务器在返回应答前使用递归过程来代表客户机完全解析名称。在大多数情况下,DNS 服务器的默认配置支持递归过程,如下图所示。
,
图4-2 递归解析过程
为了使 DNS 服务器正确执行,首先需要在DNS 域名空间内存放其他DNS 服务器的一些有用的联系信息。该信息以根线索的形式提供,它是记录初步资源的一个列表,可用来定位一些 DNS 服务器,这些服务器对 DNS 域名空间树的根具有绝对控制权。根服务器对 DNS 域名空间树中的根域和顶级域具有绝对控制权。DNS 服务器可通过使用根线索搜索根服务器来完成递归过程。
例如,当客户机查询单个DNS 服务器时,考虑使用递归过程来定位名称 host.example.microsoft.co m 。此过程在 DNS 服务器和客户机首次启动,并且没有可帮助解析名称查询的当地缓存信息时进行。 首先,首选服务器分析全名并确定对于顶级域com 具有绝对控制权的服务器的位置。随后,对com DNS 服务器使用迭代查询,以获取microsoft.com 服务器的参考信息。然后参考性应答从microsoft.com 服务器传送到 example.microsoft.com 的 DNS 服务器。最后,与服务器 example.microsoft.com 联系上。因为该服务器包括作为其配置区域一部分的查询名称,所以,它向启动递归的源服务器作出权威性的应答。当源服务器接收到表明已获得对请求查询的权威 性应答的响应时,它将此应答转发给发出请求的客户机,这样,递归查询过程就完成了。
怎样确定一个域名是否得到了正常的域名服务?
(1)在根服务器中有记录,这实际上就是进行了域名的注册;
(2)在“权威性的”域名服务器上有记录,即它们为您的域名提供了域名解析服务。这些“权威性的”服务器,就是登记在根服务器中,指定为您的域名提供“权威性”服务的服务器。“权威性的”域名服务器中记录了一个域名下的多个主机的IP 地址,如www 主机、ftp 主机、mail 主机等,还有该域名的电子邮件如何投递的记录、上述的失效期等。可能给该域名本身也指定一个IP 地址,我们创联万网就是这样做的,其好处就是让用户访问您的网站时,不用写“www”也可以访问得到。
一个域名如果得到了正确的域名服务,那么在世界上的任何地方,Internet 用户使用各种软件都能够查询到,如浏览器、telnet 、ftp 、ping 等。
值得指出的是,即使一个域名得到了正确的解析服务,但如果该域名相应的服务器未正常工作(例如没有开机、当机或服务不正常),您仍然访问不到它们。判别它们的方法很简单,因为您的机器的给您的报告不同:域名解析服务不正常时,结果是:找不到该主机;而服务器不正常得到的回答是:主机没有响应。
,如果您的域名找不到,如何查找问题?
有时,一个域名在Internet 上访问不到,问题在哪里呢?首先,您需要根据浏览器返回的结果判断是属于解析有问题还是您的web 服务器出了问题(注:IE 提供的信息比较含糊,Netscape 提供的信息更准确)。对于域名解析上的问题,为了帮助用户了解自己域名的工作状况,创联万网开发了Web 界面的查询工具“域名追踪器”,它可以帮助您断定域名出现无法访问时的问题所在。因为您看完了本文前面的介绍,知道了域名是怎样工作的,您就可以借助于“域名追踪器”进行查看。“域名追追踪器”可以帮助您查看:
(1) 根服务器是否给您的域名做了正确的解析服务。
(2) 您的域名所登记的“权威性的”服务器是否给您的域名提供了正确的解析服务。
一般,如果根服务器没有您的域名的记录,有以下几种可能:
(1) 您的域名是刚刚注册;
(2) 您的域名于付款问题或其他问题被停止了服务;
如果您的域名的“权威性的”服务器未给您的域名提供服务,其原因可能是:
(1) 管理该服务器的机构(网络服务提供商)未做域名解析服务(DNS );
(2) DNS 设置错误等;
如何解决DNS 解析故障:
当我们的计算机出现了DNS 解析故障后不要着急,解决的方法也很简单。
(1)用nslookup 来判断是否真的是DNS 解析故障:
要想百分之百判断是否为DNS 解析故障就需要通过系统自带的NSLOOKUP 来解决了。
第一步:确认自己的系统是windows 2000和windows xp 以上操作系统,然后通过“开始->运行->输入CMD”后回车进入命令行模式。
第二步:输入nslookup 命令后回车,将进入DNS 解析查询界面。
第三步:命令行窗口中会显示出当前系统所使用的DNS 服务器地址,例如笔者的DNS 服务器IP 为20
2.106.0.20。
第四步:接下来输入你无法访问的站点对应的域名。例如笔者输入www.softer.com ,假如不能访问的话,那么DNS 解析应该是不能够正常进行的。我们会收到DNS request timed out ,timeout was 2 second s 的提示信息。这说明我们的计算机确实出现了DNS 解析故障。
小提示:如果DNS 解析正常的话,会反馈回正确的IP 地址,例如笔者用www.sohu.com 这个地址进行查询解析,会得到name:sohu.com,addresses :61.135.133.103,61.135.133.104的信息。
2) 查询DNS 服务器工作是否正常:
这时候我们就要看看自己计算机使用的DNS 地址是多少了,并且查询他的运行情况。
第一步:确认自己的系统是windows 2000和windows xp 以上操作系统,然后通过“开始->运行->输入CMD”后回车进入命令行模式。
第二步:输入ipconfig /all命令来查询网络参数。
,第三步:在ipconfig /all显示信息中我们能够看到一个地方写着DNS SERVERS ,这个就是我们的DNS 服务器地址。例如笔者的是202.106.0.20和202.106.46.151。从这个地址可以看出是个外网地址,如果使用外网DNS 出现解析错误时,我们可以更换一个其他的DNS 服务器地址即可解决问题。
第四步:如果在DNS 服务器处显示的是自己公司的内部网络地址,那么说明你们公司的DNS 解析工作是交给公司内部的DNS 服务器来完成的,这时我们需要检查这个DNS 服务器,在DNS 服务器上进行nsloo kup 操作看是否可以正常解析。解决DNS 服务器上的DNS 服务故障,一般来说问题也能够解决。
(3)清除DNS 缓存信息法:
当计算机对域名访问时并不是每次访问都需要向DNS 服务器寻求帮助的,一般来说当解析工作完成一次后,该解析条目会保存在计算机的DNS 缓存列表中,如果这时DNS 解析出现更改变动的话,由于DNS 缓存列表信息没有改变,在计算机对该域名访问时仍然不会连接DNS 服务器获取最新解析信息,会根据自己计算机上保存的缓存对应关系来解析,这样就会出现DNS 解析故障。这时我们应该通过清除DNS 缓存的命令来解决故障。
第一步:通过“开始->运行->输入CMD”进入命令行模式。
第二步:在命令行模式中我们可以看到在ipconfig /?中有一个名为/flushdns的参数,这个就是清除DN S 缓存信息的命令。
第三步:执行ipconfig /flushdns命令,当出现“successfully flushed the dns resolver cache”的提示时就说明当前计算机的缓存信息已经被成功清除。
第四步:接下来我们再访问域名时,就会到DNS 服务器上获取最新解析地址,再也不会出现因为以前的缓存造成解析错误故障了。
(4)修改HOSTS 文件法:
修改HOSTS 法就是把HOSTS 文件中的DNS 解析对应关系进行修改,从而实现正确解析的目的。因为在本地计算机访问某域名时会首先查看本地系统中的HOSTS 文件,HOSTS 文件中的解析关系优先级大于DNS 服务器上的解析关系。
这样当我们希望把某个域名与某IP 地址绑定的话,就可以通过在HOSTS 文件中添加解析条目来实现。 第一步:通过“开始->搜索”,然后查找名叫hosts 的文件。
第二步:当然对于已经知道他的路径的读者可以直接进入c:windowssystem32driversetc目录中找到HOSTS 文件。如果你的系统是windows 2000,那么应该到c:winntsystem32driversetc目录中寻找。 第三步:双击HOSTS 文件,然后选择用“记事本”程序将其打开。
第四步:之后我们就会看到HOSTS 文件的所有内容了,默认情况下只有一行内容“127.0.0.1 localhost”。(其他前面带有#的行都不是真正的内容,只是帮助信息而已)
,第五步:将你希望进行DNS 解析的条目添加到HOSTS 文件中,具体格式是先写该域名对应的IP 地址,然后空格接域名信息。例如笔者添加了“211.153.80.1 www.ftedu.gov.cn”与“10.82.0.1 www.ftedu.gov.cn”两个条目。
第六步:设置完毕后我们访问www.f tedu.gov.cn 时就会自动根据是在内网还是外网来解析了。
两种真正DNS 的查询模式
有两种询问原理,分为Recursive 和Interactive 两种。前者是由DNS 代理去问,问的方法是用Intera ctive 方式,后者是由本机直接做Interactive 式的询问。由上例可以看出,我们一般查询名称的过程中,实际上这两种查询模式都是交互存在着的。
递归式(Recursive):DNS客户端向DNS Server 的查询模式,这种方式是将要查询的封包送出去问,就等待正确名称的正确响应,这种方式只处理响应回来的封包是否是正确响应或是说是找不到该名称的错误讯息。
交谈式(Interactive):DNS Server 间的查询模式,由Client 端或是DNS Server上所发出去问,这种方式送封包出去问,所响应回来的资料不一定是最后正确的名称位置,但也不是如上所说的响应回来是错误讯息,他响应回来告诉你最接近的IP 位置,然后再到此最接近的IP 上去寻找所要解析的名称,反复动作直到找到正确位置。
A 记录
A (Address) 记录是用来指定主机名(或域名)对应的IP 地址记录。用户可以将该域名下的网站服务器指向到自己的web server 上。同时也可以设置您域名的子域名。通俗来说A 记录就是服务器的IP , 域名绑定A 记录就是告诉DNS, 当你输入域名的时候给你引导向设置在DNS 的A 记录所对应的服务器。
子域名
子域名道理等同二级域名,不过比二级域名更加延伸,比如我们继续扩展该域名的主机名,设置主机名为bbs.at, 那么就可以建立一个三级域名:bbs.at.abc.com ,当然也可以建立四级域名bbs.at.go.abc.com ,五级域名bbs.at.go.home.abc.com……,依次类推,可以建立无限级别的域名,我们统称这些域名为顶级域名abc.com 的子域名。
CNAME 别名指向记录
CNAME (Canonical Name) 记录,通常称别名指向。在这里,您可以定义一个主机别名,比如设置ftp.***.com,用来指向一个主机www.***.com,那么以后就可以用FTP .***.com来代替访问www.***.com了。
MX 记录
MX 记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。您只需在线填写您服务器的IP 地址,即可将您域名下的邮件全部转到您自己设定相应的邮件服务器上。简单的说,通过操作MX 记录,您才可以得到以您域名结尾的邮局。
TXT 记录
TXT 记录,一般指为某个主机名或域名设置的说明,如:
admin IN TXT "管理员, 电话: 13901234567"
mail IN TXT "邮件主机, 存放在xxx , 管理人:AAA"
Jim IN TXT "contact: abc@mailserver.com"
也就是您可以设置 TXT ,以便使别人联系到您
,SRV 记录
SRV 记录:一般是为Microsoft 的活动目录设置时的应用。DNS 可以独立于活动目录,但是活动目录必须有DNS 的帮助才能工作。为了活动目录能够正常的工作,DNS 服务器必须支持服务定位(SRV )资源记录,资源记录把服务名字映射为提供服务的服务器名字。活动目录客户和域控制器使用SRV 资源记录决定域控制器的IP 地址。
TTL 值
TTL 值全称是“生存时间(Time T o Live)”,简单的说它表示DNS 记录在DNS 服务器上缓存时间。要理解TTL 值,请先看下面的一个例子:
假设,有这样一个域名myhost.abc.com (其实,这就是一条DNS 记录,通常表示在abc.com 域中有一台名为myhost 的主机)对应IP 地址为1.1.1.1,它的TTL 为10分钟。这个域名或称这条记录存储在一台名为dns.abc.com 的DNS 服务器上。
现在有一个用户在浏览器中键入一下地址(又称URL ):http://myhost.abc.com 这时会发生什么呢?
该访问者指定的DNS 服务器(或是他的ISP , 互联网服务商, 动态分配给他的)8.8.8.8就会试图为他解释myhost.abc.com ,当然8.8.8.8这台DNS 服务器由于没有包含myhost.abc.com 这条信息,因此无法立即解析,但是通过全球DNS 的递归查询后,最终定位到dns.abc.com 这台DNS 服务器,dns.abc.com 这台DNS 服务器将myhost.abc.com 对应的IP 地址1.1.1.1告诉8.8.8.8这台DNS 服务器,然有再由8.8.8.8告诉用户结果。8.8.8.8为了以后加快对myhost.abc.com 这条记录的解析,就将刚才的1.1.1.1结果保留一段时间,这就是TTL 时间,在这段时间内如果用户又有对myhost.abc.com 这条记录的解析请求,它就直接告诉用户1.1.1.1,当TTL 到期则又会重复上面的过程。
泛域名与泛解析
泛域名是指在一个域名根下,以 *.Domain.com 的形式表示这个域名根所有未建立的子域名。
泛解析是把*.Domain.com 的A 记录解析到某个IP 地址上, 然后别人通过任意的前缀.domain.com 访问都能访问到你解析的站点上
例:
域名根 name.com 只建立了 www.name.com 和 name.com 这两个域名记录,
那么 ftp.name.com mail.name.com bbs.name.com 等域名记录是不存在的,
但为域名根 name.com 建立泛域名记录 *.name.com 后,
*.name.com 就涵盖了 ftp.name.com mail.name.com bbs.name.com 等所有不存在的子域名记录。
您可以定义 *.name.com 指向一个 IP ,那么当访问者无论是输入 ftp.name.com mail.name.com 或 bbs.name.com 的时候,
访问者都将直接访问您定义 *.name.com 的那个 IP 。
域名绑定
域名绑定是指,域名绑定是指域名和主机(即某个服务器) 的空间进行关联绑定, 其实就是在虚拟服务器上设置或者WEB 服务器上设置,使一个域名被引导向服务器上的某一特定空间(某一个特定站点),访问者访问你的域名的时候就会打开你存放在该空间上的网页,简单来说其实就是把域名解析到服务器IP , 然后
,在服务器上设置该域名有权限访问的过程。一般虚拟主机有控制面板给进行绑定域名,如果没有面板就需要自己在服务器上的IIS 里面设置。
域名转向
域名转向我们又称为域名(URL)指向或域名转发,当用户地址栏中输入您的域名时,将会自动跳转到您所指定的另一个网络地址(URL )。
假设abc.com 是您注册的域名,则通过URL 转发服务可以实现当用户访问http://www.abc.com时,自动转向访问另外一个URL ,如:我的空间不支持绑定到目录功能, 所以为了方便访问者, 我就设置:http://bbs.bnxb.com来访问, 这个是设置了通过URL 转发服务转发到http://www.bnxb.com/bbs上面来实现的,这样您就可以轻松实现多个域名指向一个网站或网站子目录;另外,通过URL 转发服务,可以方便的实现将您的中文域名,设置自动转发到您的英文域名主站点。域名转发的另外一个好处就是可以把长域名压缩, 用短域名的转向代替, 让你的访客不需输入那么长的域名