新睿云

> 知识库 > 什么是DNS域名解析?新睿云详细给您阐明原理

什么是DNS域名解析?新睿云详细给您阐明原理

作者/来源:新睿云小编 发布时间:2019-09-03

互联网上的每台计算机,无论是网络服务器,家用计算机还是任何其他网络设备都有分配给它的唯一IP地址。由于互联网上有数百万个网站,人们无法记住每个网站的IP地址以便访问它。因此,引入了域名的概念,以便每个网站都可以通过其唯一名称进行识别,这使得人们可以轻松记住。

DNS被认为是一个网站的情况下,最重要的服务。它的失败会影响网站访问,邮件,MySQL服务等。因此,理解DNS对于作为系统管理员工作至关重要。

image.png

什么是域名解析流程?

简单,从域名解析IP地址的过程称为DNS解析。但是有人误以为DNS解析恰好只在互联网等网络系统上进行。但事实并非如此,例如。如果要将“localhost”配置为db主机,系统如何知道需要与之通信的IP?毕竟它只能将数据传输到IP。与使用主机名访问的节点的情况相同。

这意味着即使在没有DNS系统的情况下,操作系统也应该拥有一个执行名称解析的系统。

那么让我们看看名称解析如何从最初的角度发生。

系统解析器

系统解析程序是可供机器上安装的所有应用程序使用的通用解析程序库。操作系统使用系统解析程序来寻找DNS查询的答案。

应用程序调用存根或系统解析程序作为函数调用。解析器函数在调用时读取配置文件。从这些配置文件中,它们确定要查询的数据库,按顺序以及与您的环境相关的其他详细信息。

通常,系统解析器通常被视为存根解析器,因为它们除了搜索系统上的一些静态文件之外不能进行太复杂的操作,并且必须将请求转发到另一个解析器。

系统解析程序的主配置文件是/etc/nsswitch.conf。但是,某些旧版本的Linux仍然使用/etc/hosts.conf。存根解析器读取文件/etc/nsswitch.conf以确定查询操作的顺序。

下面是我的nsswitch文件的配置

~$ cat /etc/nsswitch.conf | grep hosts hosts: files dns

这里系统首先使用系统文件,如果失败,查询将被转发到DNS服务器。

DNS解析器

当解析程序库尝试访问DNS服务器以进行解析时,它应该知道它可以使用的DNS服务器。外部DNS服务器在配置文件/etc/resolv.conf中指定。如果此文件不存在或为空,则解析程序假定您的本地主机本身充当名称服务器。

以下是我的服务器的/etc/resolv.conf条目

$ cat /etc/resolv.conf nameserver 8.8.8.8 nameserver 4.4.4.4

由于名称服务器需要高度可靠,我在这里使用Google IP。在大多数情况下,您的本地ISP详细信息将添加到此处。您也可以使用自己的DNS服务器。

现在让我们看看DNS解析系统如何用于域访问?

考虑一下我们想解决www.abc.com。让它成为域abc.com(一个单独的主机)和托管在其上的网站的Web服务器。另外,请考虑将ftp.abc.com作为其FTP服务器和许多其他服务器。

您正在通过键入域名http://www.abc.com来访问该网站。Web浏览器调用系统解析程序库和函数,例如gethostbyname和gethostbyaddr。如果/ etc / hosts等系统文件中没有abc.com的IP,则需要转发文件/etc/resolv.conf中指定的DNS服务器的查询。

当解析器查询到达我们的NS时,有三种可能性需要考虑:

(i)已缓存有关特定域的信息

考虑使用与我们相同的NS的另一台机器已经查询www.abc.com并成功解析为IP。由于我们的缓存NS,它将缓存(存储)域和名称服务器的IP,其中包含www.abc.com的“A”记录(这称为域abc.com的权威NS)。因此,下次当任何其他机器查询此NS以获取www.abc.com时,它将直接从缓存中获取IP并显示网站。因此,缓存有助于在很大程度上减少其他DNS服务器的负载,因为DNS查询不会超出缓存NS。

(ii)缓存中没有“A”记录信息

如果缓存服务器在其缓存中找不到查询的答案,则必须找到具有答案的另一个DNS服务器。在我们的示例中,它将查找一个服务器,其中包含以“abc.com”结尾的所有名称的答案。在DNS术语中,这样的服务器被称为“域”'abc.com'的“权威”(正如我之前提到的)。

在许多情况下,我们的缓存服务器已经知道'abc.com'的权威服务器的地址。如果有人使用相同的缓存服务器最近冲浪到'ftp.abc.com',那么缓存服务器需要在那时找到'abc.com'的权威服务器,并且作为缓存服务器,自然它缓存了地址权威服务器。因此它将直接联系此NS并获取ww.abc.com的A记录(IP)

(iii)NS缓存完全为空

这是刚刚设置了NS并且缓存完全为空的情况,因此它既不知道查询的答案也不知道'abc.com'的权威服务器在哪里。但是它确实知道可以向'com'的权威服务器询问'abc.com'的问题。根据DNS协议:“如果名称的权威服务器未知,请剥离名称的最左边部分,包括第一个点,并将原始查询发送到该名称的权威服务器”。

需要注意的一点是:在我们的示例中,'com'的权威服务器不知道有关'www.abc.com'的查询的答案,因为'abc.com'服务器保存了该信息,但它知道哪个服务器对'abc.com'查询具有权威性。因此,'com'服务器将回答“abc.com”的权威服务器列表,而不是对查询的回答,这是DNS术语中的推荐。然后'abc.com'的权威服务器将为'www.abc.com'或'ftp.abc.com'提供IP。此外,作为缓存服务器,它将缓存“abc.com”的答案和权威服务器列表以供进一步使用。

但是请坚持,我们假设缓存首先是空的,那么我们的缓存服务器如何知道'com'的权威服务器在哪里?换句话说,一旦我们剥离了域名的所有部分并且仍然不知道在哪里寻找答案会发生什么?

对于这种情况,有一组特殊的权威服务器,DNS根服务器或简单的“根服务器”。他们知道所有权威服务器的地址,其中包含没有点的名称,顶级域名(TLD),例如'org','com','ch','uk'。

根服务器是唯一必须在没有任何其他信息被缓存的情况下找到的DNS服务器。要解决此问题,作为NS的Internet名称空间中的所有服务器都将为所有根服务器预先配置数字地址列表。该列表嵌入了NS软件(BIND等)。启动时,缓存服务器将依次向这些地址中的每个地址发送对根服务器的当前列表的查询,直到获得答案为止。一旦获得当前列表,它就知道在没有点的情况下向名称发送查询的位置。

所以这是发生的事情:

刚刚启动的缓存服务器收到“www.abc.com”地址的查询。启动后,服务器获取了根服务器及其地址的列表。当查询到达时,它将无法在缓存中找到“www.abc.com”的答案,也不会找到“abc.com”的权威服务器的地址,也不会找到“com”的权威服务器的地址。

没有其他选择,它会向根服务器询问“www.abc.com”的地址。根服务器对TLD具有权威性,即它们具有TLD权威NS列表的答案。因此,当我们对“www.abc.com”的查询到达根服务器时,它将剥离不具有权威性的部分。所以'www.abc'将被剥夺。名称的其余部分是'.com',它具有权威性。因此,它会回复一个包含“.com”顶级域名的所有权威服务器列表的推荐。

这个“.com”域名的NS列表将包含“.com”下所有SLD的NS列表。我们的缓存服务器然后将其“www.abc.com”的查询(请注意:它始终发送FQDN)发送给其中一个,他们将剥离“www”,我们将获得所有权威列表的另一个推荐'abc.com'的服务器。当将查询发送给其中一个时,它将得到答案(IP www.abc.com)。所有这些通常在不到一秒钟内发生。

从此处开始,缓存服务器可以一次又一次地从缓存中回答相同的查询,而无需询问另一台服务器。它还可以发送'ftp.abc.com'或'某些东西的任何查询。abc.com'直接发送到'abc.com'服务器并将任何以'.com'结尾的名称的问题直接发送到'.com'的权威服务器。当下一个查询以不同于'.com的内容结束时'它是否必须再次询问根服务器。

快速缓存将包含所有流行域的权威服务器列表,特别是对于所有流行的TLD;通常我们的缓存服务器将不会再次查询此信息几天。此设计确保所有查询中只有一小部分必须由根服务器或TLD的权威服务器处理。

以下是域名解析流程的图示:

image.png

所以这是域名解析过程。我希望你已经获得了基本的了解。

注意:请注意,当查询发送到任何NS(包括根服务器)时,将发送FQDN完全限定域名,即我们在“com”顶级域名查询权威NS的根服务器。为此,解析器不会特别在其查询中发送'com'。它发送它需要IP的完整域名。www.abc.com是FQDN,但abc.com不是。FQDN是包含主机名,域名和TLD的完整名称。然后,特定NS的职责是剥离其不具有权威性的域名部分,然后为其具有权威性的部分提供查询的答案。

热门标签
免费领云产品
在线客服   
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待