前一段时间国内许多知名的网站无法正常登录,输入域名后一直加载,最后失败,有知道这些网站IP的用户使用IP可以直接登录。为什么使用域名就不能正常访问呢?这就是今天我们要这里着重介绍的DNS的概念。我们在浏览器里输入网站地址访问页面,浏览器做的第一步其实不是去访问这个页面,而是去请求它的DNS服务器,DNS服务器返回给浏览器需要访问网站的IP地址,最后,通过IP地址来正确访问页面了。如果DNS服务器器出了问题,那就会出现域名无法访问而IP可以正常访问了。

   由于DNS内容较多,对DNS的介绍分为多篇进行介绍,本篇为DNS基本工作原理内容介绍。主要内容包括
   什么是DNS

   DNS的名称层次结构

   DNS服务的工作过程

   小结

一、什么是DNS

   在说明什么是DNS前,我们先要明确下,在网络通信中,大部分都是基于TCP/IP协议来完成的,所以计算机只能识别“192.168.1.12”这样的IP地址,数字总是难以记忆和理解的,并且容易出错。因此,我们发明了域名解析的机制,域名解析的服务可以让我们在浏览器的地址里只输入一个易于记忆和理解的域名,“域名解析服务器”帮助我们把域名“翻译”计算机可以识别的IP地址,从而达到计算机之间通过域名来通信。

   其实在计算机中,大部分情况下,都只是识别数字格式的通信请求,因此,在计算机内存在大量的名称解析---将名称转换为数字。比如说,在Linuxi系统中,我们是以用户名的形式登录到系统中的,但是操作系统并不认识我们的登录名,它是通过查询/etc/passwd,获取到用户名对应的uid号来实现权限等验证的。同样,dns也是一种名称解析。

   DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。简单的概括如下图:

   wKiom1Mm7quBr-LjAAIGC-_bV2A797.jpg

   如上图所示,我们客户机需要访问http://www.baidu.com这个网站,在浏览器中输入http://www.baidu.com后,浏览器首先访问的是DNS服务器,从DNS服务器那里得到http://www.baidu.com的IP地址,然后使用IP访问web服务器,从而完成整个通信过程。这里可以清晰的知道,dns的主要工作就是把域名转换成相应的IP地址。这里,域名是不恰当的,通常情况下我们请求的名称称之为FQDN:Full Qualified Domain Name,完全限定域名。

二、DNS的名称层次结构

   DNS作为一种基础性的服务,需要相应的请求量是惊人的,为了应对海量数据的情况,便于管理,它采取了分层机构。如下图所示:

   wKiom1Mm-fyz5jYNAAGSVwxyUaU993.jpg    

名称类型说明示例

根域

这是表示未命名的等级; 目录树的顶部它有时显示为两个空引号 (""),表示空值。DNS 域名中使用时,它规定由尾部句点 (.) 来指定名称位于根或更高级别的域层次结构。在此情况下,DNS 域名被认为是完整和点到准确的位置在树中的名称。名称声明这种方式的 Fqdn。

单个句点 (.) 或句点用于末尾的名称,如"example.microsoft.com"。

顶级域

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

"".com",表示一个名称注册为在 Internet 上的商业使用的业务。

第二层域

可变长度的个体或组织,以便在 Internet 上使用的注册名称。这些名称始终基于相应的顶级域,具体取决于组织或地理位置名称使用的位置的类型。

""microsoft.com。",这是由 Internet DNS 域的名称注册向 Microsoft 注册的二级域名称。

子域

其他名称的组织可以创建从已注册的二级域名派生的。这些功能包括添加到组织中的名称的 DNS 树的增长,并将其分为部门或地理位置的名称。

"example.microsoft.com"。",这是由 Microsoft 指定文档名称示例中用于虚构子域。

主机或资源名称

代表名称的 DNS 树的叶节点并标识特定的资源的名称。通常情况下,DNS 域名的最左侧的标签标识网络上的特定计算机。例如,如果主机 (A) 资源记录中使用此级别的名称,则它用于查找基于其主机名的计算机的 IP 地址。

""主机-a.example.microsoft.com。",其中第一个标签 ("主机-a") 是网络上的特定计算机的 DNS 主机名。

其中,顶级域根据分类依据的不同,可以分为组织域、国家域、反向域。常见的组织域有.com, .org, .mil, .gov, .edu, .net

国家域如.cn, .hk, .tw, .jp, .ir, .iq, .us, .uk

比较特殊的反向域反向域:.in-addr.arpa(这个在后续的博文中会有详细的解释)

三、DNS的工作DNS服务的工作过程

   wKioL1MnAJ2ydMYvAAQ3cpq0r-4515.jpg

1.在浏览器中输入http://www.google.com时,本地hosts文件中查找是否有对应条目;如果没有,向本地dns发出请求,如果本地服务器缓存中有对应映射,直接返回,但有可能由于缓存过期,不具有权威性;若也没有相关条目。本地dns会向根域名发起请求。

要注意的是,在这里有两种不同的查找方法,递归和迭代。

递归客户端向本地dns发起请求查询是使用递归,dns必须对客户端的请求给出应答,期间,本地dns需要查询其他dns服务器,采用迭代的方法同其他dns服务器进行交互
迭代本地dns向其他dns服务器发起查询时的查找方法。本地dns服务器向其他dns服务器付出请求,若对方dns服务器也不是目标服务器,则会返回给参考服务器,以此类推,直到超找到正确的dns服务器。


2.本地dns如果没有查找到,必须向根域名发出查询;根域名服务器接收到请求后,会根据发送的域名分析是由哪个域名服务器授权管理的,然后返回给本地dns

3.本地dns根据根域名返回的参考意见,请求.com.服务器,.com.同样也不负责全,将授权管理的服务器信息发送给本地dns

4.本地dns重新发送请求至.google.com,终于得到了正确的IP地址,并发送给客户机

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询

四、小结

   这里简单介绍了dns的工作流程。下篇,开始正式讲解在Linux系统下,dns服务的具体实现。



Version:1.0 原始版本