前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DNS 的工作原理

DNS 的工作原理

作者头像
Lemon黄
发布2024-08-02 13:37:30
1280
发布2024-08-02 13:37:30
举报
文章被收录于专栏:Lemon黄

在我们通过浏览器打开页面时,幕后都在使用 DNS。那么什么是 DNS 呢?DNS 代表域名系统。它允许我们打开网站而无需记住访问网站的 IP 地址。当我们访问 www.baidu.com 时,浏览器是不知道 baidu.com 是什么。它只识别 110.242.68.66 等 IP 地址。DNS 帮助我们将 www.baidu.com 等人类可读的域名转换为其实际 IP 地址(110.242.68.66),以便我们可以访问该网站。它是将域名转换为 IP 地址的互联网目录。我们访问的每个网站都会经过 DNS,但它的速度非常快,以至于我们在日常生活中甚至没有注意到它。有没有想过它在幕后是如何运作的?本文,我们将探索这一个过程的所有步骤,从浏览器开始,直到 DNS 返回 IP 地址。但在这之前,我们首先需要了解域名的结构,了解这一点对于理解 DNS 是如何有效工作是至关重要的。

域名的结构

我们已 www.baidu.com 为例,来分解域名的 3 个部分。

  1. 子域名:这是域名的最前面部分,没有提及时默认为 www。例如我们上述域名的子域名就是 www
  2. 域名:实际域名的名称,例如我们上述域名的域名名称就是 baidu
  3. 顶级域名:域名最后一个点之后的最后一段。它们是域名层次结构的顶层。例如我们上述域名的顶级域名就是 .com

下文中我们将会用到这些术语,所以需要对其有一个基本的了解。

DNS 如何工作

以下是 DNS 工作原理的分步过程:

  1. Local Cache:本地缓存。首先,浏览器会检查自己的缓存,看是否有网站的 IP 地址。对于经常访问的网站或流行的网站,如 Baidu、Google 等,浏览器将使用缓存的 IP。如果浏览器在其缓存中找不到该 URL,它将询问操作系统缓存中是否有该域的 IP 地址。缓存由浏览器和操作系统共同维护(例如 cURL 等工具)。
  2. DNS Query:DNS 查询。当两个缓存都没有返回任何结果时,操作系统会将 DNS 查询发送给 DNS 解析器。查询通常是对解析器的 UDP 请求,它是无状态的并且比 TCP 快得多。
  3. DNS Resolver:DNS 解析器。操作系统使用的 DNS 解析器通常由我们的 ISP(互联网服务提供商)提供,也可以来自 Google (8.8.8.8) 或 Cloudflare (1.1.1.1)。与前面的步骤一样,DNS 解析器也有一个缓存,它通过每个域名所有者设置的 TTL(生存时间)来维护(稍后会详细介绍),因此如果域名缓存存在,那么它将直接返回 IP,否则将继续下一步。
  4. Root Name Servers:根服务器。DNS 解析器如果在缓存中找不到 IP,就会查询其中一个根域名服务器。根域名服务器是最具权威性的域名服务器,全球只有 13 个命名的根服务器(命名为 a - m),由 ICANN 管理。根域名服务器将返回 TLD 域名服务器。例如,如果我们查询 www.baidu.com,根域名服务器将返回 .com TLD 的域名服务器列表。
  5. TLD Name Servers:TLD 名称服务器。现在,解析器将查询最近的 TLD 名称服务器(通过 Anycast 功能),并向其询问管理域名的权威名称服务器。请注意,TLD 名称服务器并不知道域名的 IP,但它会返回一个实际管理域名的附加名称服务器。
  6. Authoritative Name Servers:权威名称服务器。解析器将向权威名称服务器查询域名的 IP 地址。该名称服务器实际上存储了该域名的 DNS 记录,如 A、AAAA、CNAME 等(稍后详述)。它将返回域名的 IP 地址。
  7. Returning the IP:返回 IP。解析器从权威名称服务器获取 IP 地址后,会缓存 IP,并将 IP 返回操作系统,由操作系统再次缓存,然后再返回浏览器。

从缓存查询到 DNS 解析器的整个过程称为 DNS 查询。您可以使用以下工具对任何网站进行查询:

代码语言:javascript
复制
nslookup {domain_name}

例如:

代码语言:javascript
复制
$ nslookup www.baidu.com
Non-authoritative answer:
DNS request timed out.
    timeout was 2 seconds.
Server:  UnKnown
Address:  10.198.1.1

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
Name:    www.baidu.com
Addresses:  240e:ff:e020:966:0:ff:b042:f296
          240e:ff:e020:9ae:0:ff:b014:8e8b
          183.2.172.185
          183.2.172.42

现在,让我们来谈谈 DNS 记录、它们的含义以及添加 DNS 记录的过程。

DNS 记录

DNS 记录是各种类型记录中关于域名的信息。这些信息存储在权威名称服务器中(Authoritative Name Servers)。记录有多种类型,其中包括:

  1. A Record:A 记录。该记录存储域名的 IPv4 地址。
  2. AAAA Record:AAAA 记录。该记录存储域名的 IPv6 地址。
  3. CNAME Record:CNAME 记录。该记录是域名的规范名称记录。它用于为域名的不同子域设置别名。
  4. MX Record:MX 记录。它指向域名的邮件交换服务器。
  5. ... 还有更多

添加 DNS 记录会发生什么?

  1. 当有人从注册商(如 阿里云)购买域名时,他可以选择由谁来管理该域名。它可以由注册商(使用自己的名称服务器)或任何其他自定义名称服务器(例如 Cloudflare 或自制)提供。
  2. 一旦他为自己的域名选择了一个域名服务器,他就可以为该域名添加一个 DNS 记录和一个 TTL,以告诉解析器何时使系统中的 DNS 记录缓存过期。
  3. 一旦 DNS 记录被填充,该信息就会传播到域名的顶级域名服务器,这样当解析器尝试查询 IP 时,就会知道哪个权威域名服务器拥有该信息。向整个 DNS 网络共享这一传播信息可能需要一些时间。

DNS 安全

由于大多数 DNS 查询使用 UDP 协议进行,这使得 DNS 查询容易受到攻击,因为任何黑客都可以拦截从操作系统发送到解析器的网络数据包,并且可以知道客户端 IP 及其尝试访问的站点。还有另一种称为 DNS 欺骗的攻击,其中黑客在域名解析器中存储错误信息,因此,该数据被缓存在解析器中,导致某人访问受感染的站点,直到 TTL 过期。为确保 DNS 安全采取了多种措施,如 DNSSEC[1]DNS over HTTPS (DoH)[2],但由于缺乏认识,这些措施仍未被广泛采用。

结论

DNS 是运行互联网的支柱,它让我们意识到,如果没有它,互联网就不会是今天的样子。对于那些想进一步了解该主题的人,可以查看:

  • 什么是 DNS:https://www.cloudflare.com/learning/dns/what-is-dns/

参考资料

[1]

DNSSEC: https://www.cloudflare.com/learning/dns/dns-security/

[2]

DNS over HTTPS (DoH): https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 莫奈黄 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 域名的结构
  • DNS 如何工作
  • DNS 记录
  • 添加 DNS 记录会发生什么?
  • DNS 安全
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档