DNS 查询:域名如何被解析为 IP 地址

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 在网页和页面资源加载之前,DNS 必须被解析为 IP 地址,然后浏览器才能建立 TCP 连接来发起 HTTP 请求。除此以外,对于每个使用 URL 引用的外部资源,DNS 解析必须在发起 HTTP 请求之前完成相同的解析步骤(针对每个域名)。当用户在浏览器地址栏输入 URL 地址并敲下回车时 DNS 解析过程就开始。此时,浏览器向操作系统请求特定页面,在例子中即为 google.com 。

在 Catchpoint 我们认为快速的 DNS (Domain Name Server)解析像内容一样重要。DNS 负责将域名( www.google.com ) 解析为 IP 地址供浏览器使用。该系统是网页性能的基础,然而大多数人并不完全理解它是如何工作的。因此,为了帮你更好的理解网站可用性及性能,我们会发布一系列博客文章,从基础知识开始,来阐明有时复杂的 DNS 世界。

为了简单期起见,本文假设不存在 DNS 缓存。因此,这是最差的场景。我们会在未来的文章中讨论 DNS 缓存。

在网页和页面资源加载之前,DNS 必须被解析为 IP 地址,然后浏览器才能建立 TCP 连接来发起 HTTP 请求。除此以外,对于每个使用 URL 引用的外部资源,DNS 解析必须在发起 HTTP 请求之前完成相同的解析步骤(针对每个域名)。当用户在浏览器地址栏输入 URL 地址并敲下回车时 DNS 解析过程就开始。此时,浏览器向操作系统请求特定页面,在例子中即为 google.com 。

  1. OS 向 DNS Resolver 发起 递归查询

因为操作系统并不知道 www.google.com 是什么,它向 DNS Resolver 发起请求。操作系统向 DNS Resolver 发起的请求带有特殊的标记表明它是一个 递归查询。这意味着 DNS Resolver 必须完成递归且响应必须为 IP 地址或错误。

对大多数用户而言,他们的 DNS Resolver 由他们的 ISP (网络运营商提供)。或者使用一个开源替代方案,比如:Google DNS(8.8.8.8) 或者 OpenDNS(208.67.222.222)。可以在你的网络或路由器配置查看或配置。此时,DNS Resolver 执行一个递归步骤来将域名解析为 IP 地址。

  1. DNS Resolver 向根服务器发起 迭代查询

Resolver 从向 一个 根 DNS Server 请求 www.google.com 的 IP 地址开始。该请求并不包含递归标记,因此是一个迭代请求,意味着它的响应必须是一个地址,权威名称服务器地址或错误。根域在域名最后以隐藏的"."表示。不需要额外输入“.”,浏览器会自动加上。

有 13 个名为 A-M 根服务器集群, 服务器分布在 380 个地区。他们被 12 个不同的组织管理,并汇报给 IANA(Internet Assigned Numbers Authority) ,比如:Verisign 管理着 A 和 J 集群。所有的服务器都是 IANA 运行的一个主服务器的副本。

  1. 根服务器响应

这些根服务器拥有所有顶级域名(TLDs)的位置,如 .com、.de、.io,以及较新的通用顶级域名,如 .camera。

根域并没有 "www.google.com" 的 IP 信息,但是它知道 .com 可能知道,所以它返回 .com 服务器的位置。根域返回 13 个 .com 的 gTLD 服务器的位置列表,以 NS 或者 name server 记录形式列出。

  1. DNS Resolver 向 TLD 服务器发起 迭代查询

下一步 resolver 请求向其中一个 .com 名称服务器请求 google.com 的位置。就像根服务器一样,每个顶级域名都有 4-13 集群的名称服务器存在于多个位置。有两种类型的顶级域名(TLD): 由政府组织管理的国家代码(ccTLD, Country Code Top Level Domain),以及通用域名(gTLD, Generic Top Level Domain)。每个通用顶级域名都有一个不同的商业实体负责运行这些服务器。在当前的例子中,我们将使用由 Verisign 负责运行 gTLD 服务器,Verisign 负责管理通用顶级域名中的 .com, .net, .edu, .gov。

  1. TLD 服务器响应

每个 TLD 服务器有 TLD 中每个域名的所有权威名称服务器列表。例如, 13 个 .com 的 gTLD 服务器中的每个服务器都有每个 .com 域名 的所有名称服务器列表。.com 的 gTLD 服务器并没有 google.com 的 IP 地址,但是知道 google.com 的名称服务器。.com 的 gTLD 服务器响应一个包含所有 google.com NS 记录的列表。当前例子中 Google 有 4 个名称服务器, 从 ns1.google.com 到 ns4.google.com。

  1. DNS Resolver 向 Google.com NS 发起 迭代查询

最终, DNS resolver 向 Google 其中一个名称服务器请求 www.google.com 的 IP 地址。

  1. Google.com NS 响应

这次被请求的名称服务器知道 IP 地址, 并分别针对 IPv4 和 IPv6(取决于请求类型) 返回 A 或 AAAA 记录。

  1. DNS Resolver 响应 OS

此时, resolver 完成了递归步骤并可以给最终用户的操作系统返回一个 IP 地址。

  1. 浏览器发起 TCP 握手

此时操作系统已经拿到 www.google.com 的 IP 地址,将其提供给应用程序(浏览器),浏览器初始化 TCP 连接开始加载页面。关于该过程的更多信息,我们写了一篇博客 剖析 HTTP。

如前所述,就完成解析的时长而言,这是最糟糕的情况。就大多数情况而言,如果用户最近访问过相同域名的 URL , 或者其他依赖相同 DNS resolver 的用户发起过类似请求,将不需要 DNS ,或将限制在本地 DNS 解析器上的查询。 我们将在后续文章讨论这个问题。

在这种没有 DNS 缓存的情况下,涉及 4 套 DNS 服务器,所以可能会出现很多问题。最终用户并不知道幕后发生了什么;他们只是等待页面加载,所有 DNS 查询必须在浏览器请求前发生。

这就是为什么我要抢到快速 DNS 的重要性。你可以有一个快速且后见良好的站点,但如果你的 DNS 很慢,你的网页将依然响应缓慢。

目录
相关文章
|
29天前
|
网络协议 Linux Docker
在Linux中,如何指定dns服务器,来解析某个域名?
在Linux中,如何指定dns服务器,来解析某个域名?
|
18天前
|
网络协议
DNS正向解析实现
文章介绍了DNS正向解析的实现,包括资源记录的定义、配置区域解析记录的步骤,并通过实际操作展示了如何为"yinzhengjie.com"域名配置DNS解析记录。
26 2
DNS正向解析实现
|
3天前
|
网络协议 网络虚拟化
接收网络包的过程——从硬件网卡解析到IP
【9月更文挑战第18天】这段内容详细描述了网络包接收过程中机制。当网络包触发中断后,内核处理完这批网络包,会进入主动轮询模式,持续处理后续到来的包,直至处理间隙返回其他任务,从而减少中断次数,提高处理效率。此机制涉及网卡驱动初始化时注册轮询函数,通过软中断触发后续处理,并逐步深入内核网络协议栈,最终到达TCP层。整个接收流程分为多个层次,包括DMA技术存入Ring Buffer、中断通知CPU、软中断处理、以及进入内核网络协议栈等多个步骤。
|
23天前
|
Prometheus 监控 Cloud Native
Prometheus 查询语言(PromQL):深入解析
【8月更文第29天】Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。
29 2
|
29天前
|
域名解析 存储 缓存
在Linux中,DNS进行域名解析的过程是什么?
在Linux中,DNS进行域名解析的过程是什么?
|
1月前
|
域名解析 网络协议 Linux
在Linux中,如何配置DNS服务器和解析服务?
在Linux中,如何配置DNS服务器和解析服务?
|
20天前
|
SQL 数据库
|
29天前
|
网络协议 Linux
在Linux中,如何改IP、主机名、DNS?
在Linux中,如何改IP、主机名、DNS?
|
29天前
|
域名解析 缓存 负载均衡
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
|
29天前
|
域名解析 网络协议 数据中心
【应用服务 App Service】当遇见某些域名在Azure App Service中无法解析的错误,可以通过设置指定DNS解析服务器来解决
【应用服务 App Service】当遇见某些域名在Azure App Service中无法解析的错误,可以通过设置指定DNS解析服务器来解决

相关产品

  • 云解析DNS
  • 推荐镜像

    更多