DNS域名系统如何工作?这篇文章帮你讲透!
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
什么是DNS?其实,当用户在浏览器输入“example.com”进行访问时,浏览器会自动向 DNS服务器发送请求,DNS解析器将域名转换为IP地址,然后将 IP返回给浏览器,浏览器再访问该 IP,因此,整个过程中用户无需知道网站的 IP地址,却可轻松访问网站。如下图: 在上述描述中,有一个核心点是 DNS,那么,DNS是什么呢?
网上有很多公用的 DNS服务器,比如 Google的“8.8.8.8”,Cloudflare 公司的“1.1.1.1”等。 DNS工作原理要了解 DNS的工作原理,需要从 DNS服务器和 DNS查询过程两个主要点来进行讲解。 DNS服务器在整个 DNS工作过程中,会经历 4种 DNS服务器,整个请求过程如下图: 1.DNS解析器DNS解析器是一种服务器,负责整个域名转IP的过程,当收到客户端 DNS查询请求时,DNS解析器会根据"DNS查询类型"来查询对应的 IP地址。因此,递归 DNS解析器是域名转IP的 2.根域名服务器根域名服务器是将人类可读的域名转换为 IP地址的第一步,它管理着根域名,根域名用一个点(.)表示,因此,可以把根域名服务器理解成一个 全球共有 13组根域名服务器,它们以英文字母“A到M”依序命名,网域名称格式为“A~M.root-servers.net”,具体信息如下表: 3.顶级域名服务器顶级域名服务器(top-level domain,简写 TLD),托管着一些顶级域名(比如 .com,.io, .net),它是域名转IP的第二步,可以把顶级域名服务器理解成一个 4.权威性域名服务器权威性域名服务器(Authoritative nameserver),它是真实存储具体域名的服务器,比如(example.com,redis.io)等,它是域名转IP的最后一步,如果权威性域名服务器能查询记录,则返回 IP地址,否则做以下处理:
因此,可以把权威性域名理解成一个 需要注意:在某些情况下,主域名的权威名称服务器可能并不直接存储子域名的记录,而是委托给另一个专门管理子域名的名称服务器。 比如,CNAME记录,子域名的记录指向另一个域名,因此,CNAME记录需要额外的查询步骤,以找到实际的 IP地址或进一步的 DNS记录。 DNS是一个分布式系统,内部的域名服务器以及其保存的域名是一个树状结构,如下图: DNS查找过程DNS 查找主要有以下 8个步骤:
上述 8个 DNS查找步骤可以返回“yuanjava.com”的 IP地址后,最后,浏览器使用该 IP地址向服务器发出 HTTP请求,获取对应的数据显示在网页中。 整个过程如下图: DNS 查询类型在上述 DNS工作原理讲解时,我们提到了 DNS查询类型,那么 DNS查询类型有哪些呢? 通常来说,DNS查询类型有 3种: 递归查询在递归查询中,DNS客户端要求 DNS服务器(通常是递归解析器)返回请求的资源记录或错误消息。如果递归解析器找不到记录,就会返回一个错误。 迭代查询在迭代查询中,DNS客户端允许 DNS服务器返回它能提供的最佳答案。如果查询的 DNS服务器没有匹配的记录,它会返回一个指向更低层域名空间的 DNS服务器的引用,客户端再向引用地址发出查询。这个过程会继续,直到找到结果或出现错误或超时。 非递归查询非递归查询通常发生在 DNS解析器客户端查询 DNS服务器时,DNS服务器时能直接查到记录,要么因为它是该记录的权威服务器,要么因为该记录存在于它的缓存中。通常,DNS服务器会缓存 DNS记录以减少带宽消耗和上游服务器的负载。 DNS解析器通过组合上述 3种查询方式,可以优化 DNS解析过程和缩短传输距离。在理想情况下,可以使用缓存的记录数据,从而使 DNS 域名服务器能够返回非递归查询。 DNS查询实例演示为了更好的演示域名的整个 DNS查询过程,本文通过对我的技术博客
在进入正式的解析之前,我们先来了解下 dig指令。 dig
dig的基本语法
使用示例 dig yuanjava.com A # 返回 yuanjava.com的 IPv4地址记录 dig yuanjava.com AAAA # 返回 yuanjava.com的IPv6地址记录 dig yuanjava.com MX # 返回 yuanjava.com的邮件交换记录 dig @8.8.8.8 yuanjava.com #指定 Google公共的 8.8.8.8 DNS服务器查询 yuanjava.com dig @1.1.1.1 yuanjava.com #指定 cloudflare公共的 1.1.1.1 DNS服务器查询 yuanjava.com 2.结果返回
讲解完 dig指令后,我们正式进入 DNS解析的实战演习: 使用指定的DNS服务器首先,使用 13台根域名服务器的任意一台进行解析,这里以"198.41.0.4"为例,指令如下:
指令执行如下图:
因为根域名服务器给不了"yuanjava.com"的 IP地址,所以执行结果中没有 ANSWER SECTION,但是返回了.com对应的顶级域名服务器的 IPv4和 IPv6,选择第一台顶级域名服务器的IPv4,继续解析,指令如下:
指令执行如下图: 顶级域名服务器也给不了"yuanjava.com"的 IP地址,但返回了权威服务器的 IP地址,选择第一台权威域名服务器的 IP,继续解析,指令如下:
指令执行如下图: 最后,权威域名服务器查到了域名对应的 IP,到此,DNS域名解析的整个过程我们就通过手动的方法进行了演示。 使用公开的DNS服务器使用公开的 DNS服务器,会屏蔽内部域名服务器查询过程,最终给出 IP地址,分别执行下面 2个指令:
指令执行结果截图如下(截图中没有 Additional部分): 使用运营商的DNS服务器除了上述两种方式,我们还可以使用运营商自动配置的 DNS服务器,比如下面为家庭 wifi网络的示例截图: DNS缓存因为一个域名对应的 IP地址变动的频率很低,所以,可以将域名和 IP的映射关系缓存起来并且设置一定的失效时间,从而提高数据请求的性能和可靠性。那么,DNS缓存有哪些呢? 浏览器的DNS缓存现代 Web浏览器的设计,默认会将 DNS记录缓存一段时间,当发出对 DNS记录的请求时,能从浏览器缓存拿到记录,大大加速了 DNS解析过程。 在 Chrome浏览器中,可以通过 操作系统的DNS缓存除了浏览器会设置 DNS缓存外,在每一层的域名服务器也会设计对应的 DNS缓存,缓存查询的过程如下:
总结本文通过在浏览器里面输入一个域名为例,详细地分析了 DNS的工作原理,另外,为了更好地理解 DNS域名解析过程,我们通过 3种方式来手动演示整个过程。 最后,归纳一下,通过本文你可以学到什么:
参考资料Building a Recursive DNS Resolver
该文章在 2024/5/29 10:12:47 编辑过 |
关键字查询
相关文章
正在查询... |