DNS工作原理初探

       众所周知,目前互联网通信绝大部分是基于TCP/IP协议的,通信实体之间采用IP地址。但是我们平时访问网页的时候都只是简单地在地址栏中输入域名,便可以访问,这是为什么呢?要讲清楚这个,就不得不提互联网的核心服务之一DNS。

 

什么是DNS?

       DNS是域名系统(Domain Name System)的英文缩写,是一种组织域层次结构的计算机和网络服务命名系统。当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与此名称相关的IP地址信息。DNS就是这样一位“翻译官”,它的基本工作原理如下图所示:


       域名系统作为一个层次结构和分布式数据库,包含各种类型数据,包括主机名和域名。域名包括单个标签分割点,例如jss.jd.com。完全限定的域名FQDN唯一标识在DNS分层树中的主机位置,通过指定的路径中点分割从根引用的主机名称列表。

       DNS域名称的五个类别详见下表,以及每个名称类型实例:

名称类型

说明

实例

根域

DNS域名最高层级,由13个服务器组成,其中9个位于美国,2个位于欧洲,1个位于日本

单个句点或句点用于末尾的名称

顶级域

用来指示某个国家/地区或组织使用的名称

.com

第二层域

个人或组织在Internet

jd.com

子域

已注册的耳机域名派生的域名,通俗的讲就是网站名

www.jd.com

主机名

通常情况下,DNS域名的最左侧的标签标识网络上的特定计算机,如h1

h1.www.jd.com

       DNS数据库中包含的资源记录(RR)。每个RR标识数据库中的特定资源。我们在建立DNS服务器时,经常会用到SOA,NS,A之类的记录,在维护DNS服务器时,会用到MX,CNAME记录。

       常见RR如下图所示:

说明

时间TTL

类型

数据

起始授权机构

互联网

默认值60分钟

SOA

所有者名称

主名称服务器

序列号

刷新间隔

重试间隔

过期时间

最小TTL

主机

互联网

记录特定TTL

A

所有者名称

主机IP地址

名称服务器

互联网

记录特定TTL

NS

所有者名称

名称服务器

邮件交换器

互联网

记录特定TTL

MX

所有者名称

邮件Exchange

DNS名称首选值

别名

互联网

记录特定TTL

CNAME

所有者名称

主机的DNS名称

 

 

DNS解析原理

       当 DNS 客户机需要查询程序中使用的名称时,它会查询本地DNS 服务器来解析该名称。客户机发送的每条查询消息都包括3条信息,以指定服务器应回答的问题。

● 指定的 DNS 域名,表示为完全合格的域名 (FQDN) 。

● 指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。

●DNS域名的指定类别。

    对于DNS 服务器,它始终应指定为 Internet 类别。例如,指定的名称可以是计算机的完全合格的域名,如im.qq.com,并且指定的查询类型用于通过该名称搜索地址资源记录。

    DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。

另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。

下面讲解解析过程:

1、在浏览器中输入www.jd.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(jd.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找jd.com域服务器,重复上面的动作,进行查询,直至找到www.jd.com主机。

6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

从客户端到本地DNS服务器是属于递归查询(一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机),而DNS服务器之间就是的交互查询就是迭代查询(一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求)。

 

DNS故障解决

       当我们的计算机出现了DNS解析故障后不要着急,解决的方法也很简单。

(1)用nslookup来判断是否真的是DNS解析故障:

要想百分之百判断是否为DNS解析故障就需要通过系统自带的NSLOOKUP来解决了。

第一步:确认自己的系统是windows 2000和windows xp以上操作系统,然后通过“开始->运行->输入CMD”后回车进入命令行模式。

第二步:输入nslookup命令后回车,将进入DNS解析查询界面。

第三步:命令行窗口中会显示出当前系统所使用的DNS服务器地址,例如笔者的DNS服务器IP为202.106.0.20。

第四步:接下来输入你无法访问的站点对应的域名。例如笔者输入www.softer.com,假如不能访问的话,那么DNS解析应该是不能够正常进行的。我们会收到DNS request timed out,timeout was 2 seconds的提示信息。这说明我们的计算机确实出现了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服务器上进行nslookup操作看是否可以正常解析。解决DNS服务器上的DNS服务故障,一般来说问题也能够解决。

 

(3)清除DNS缓存信息法:

当计算机对域名访问时并不是每次访问都需要向DNS服务器寻求帮助的,一般来说当解析工作完成一次后,该解析条目会保存在计算机的DNS缓存列表中,如果这时DNS解析出现更改变动的话,由于DNS缓存列表信息没有改变,在计算机对该域名访问时仍然不会连接DNS服务器获取最新解析信息,会根据自己计算机上保存的缓存对应关系来解析,这样就会出现DNS解析故障。这时我们应该通过清除DNS缓存的命令来解决故障。

第一步:通过“开始->运行->输入CMD”进入命令行模式。

第二步:在命令行模式中我们可以看到在ipconfig /?中有一个名为/flushdns的参数,这个就是清除DNS缓存信息的命令。

第三步:执行ipconfig /flushdns命令,当出现“successfully flushed thedns resolver cache”的提示时就说明当前计算机的缓存信息已经被成功清除。

第四步:接下来我们再访问域名时,就会到DNS服务器上获取最新解析地址,再也不会出现因为以前的缓存造成解析错误故障了。

 

(4)修改HOSTS文件法:

修改HOSTS法就是把HOSTS文件中的DNS解析对应关系进行修改,从而实现正确解析的目的。因为在本地计算机访问某域名时会首先查看本地系统中的HOSTS文件,HOSTS文件中的解析关系优先级大于DNS服务器上的解析关系。

这样当我们希望把某个域名与某IP地址绑定的话,就可以通过在HOSTS文件中添加解析条目来实现。

第一步:通过“开始->搜索”,然后查找名叫hosts的文件。

第二步:当然对于已经知道他的路径的读者可以直接进入c:\windows\system32\drivers\etc目录中找到HOSTS文件。如果你的系统是windows 2000,那么应该到c:\winnt\system32\drivers\etc目录中寻找。

第三步:双击HOSTS文件,然后选择用“记事本”程序将其打开。

第四步:之后我们就会看到HOSTS文件的所有内容了,默认情况下只有一行内容“127.0.0.1 localhost”。(其他前面带有#的行都不是真正的内容,只是帮助信息而已)

第五步:将你希望进行DNS解析的条目添加到HOSTS文件中,具体格式是先写该域名对应的IP地址,然后空格接域名信息。例如笔者添加了“211.153.80.1www.ftedu.gov.cn”与“10.82.0.1 www.ftedu.gov.cn”两个条目。

第六步:设置完毕后我们访问www.ftedu.gov.cn时就会自动根据是在内网还是外网来解析了。

 

常用DNS列表

北京:

  202.96.199.133

  202.96.0.133

  202.106.0.20

  202.106.148.1

  202.97.16.195

  202.138.96.2

四川:

  202.98.96.68

61.139.2.69

谷歌:

        8.8.8.8

    8.8.4.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值