当前位置: 首页 > 知识库问答 >
问题:

前端 - 在浏览器输入网址 DNS 查询的顺序是如何的?

邢勇
2024-05-31

假如我的电脑是一台全新的电脑,我使用 chrome 查询 www.baidu.com 以后,DNS 的查询是什么规则呢?

我目前的理解如下: (以下步骤皆按照查询失败来进行下一步)

  1. chrome 先查询浏览器缓存
  2. 查询本地 /etc/hosts 文件
  3. 查询本地 DNS服务器
  4. 查询 “.” 根服务器,获取 .com 服务器的地址
  5. 查询 “.com” 顶级域名服务器,获取 baidu.com 一级域名服务器的地址
  6. 查询到 www.baidu.com 的 DNS 服务器
  7. 拿到真正的 ip

不确定是否其中哪一步骤有错误,希望指正。

共有1个答案

金承嗣
2024-05-31

您的理解大部分是正确的,关于 DNS 查询的顺序。不过,我可以帮您更准确地梳理一下这个过程:

  1. 浏览器缓存:Chrome 浏览器首先会检查自己的缓存中是否已经有 www.baidu.com 的 IP 地址记录。如果有,则直接使用这个 IP 地址,而不会发起 DNS 查询。
  2. 操作系统缓存:如果浏览器缓存中没有找到,Chrome 会请求操作系统进行 DNS 解析。操作系统会先检查自己的 DNS 缓存。大多数现代操作系统都会维护一个 DNS 缓存来存储最近解析过的域名和对应的 IP 地址。
  3. /etc/hosts 文件(针对 Unix-like 系统):如果操作系统缓存中也没有找到对应的记录,并且您使用的是 Unix-like 系统(如 Linux 或 macOS),操作系统会查询本地的 /etc/hosts 文件。这个文件通常包含静态的 IP 地址到域名的映射。
  4. 本地 DNS 服务器:如果 /etc/hosts 文件中也没有找到,操作系统会向配置的本地 DNS 服务器发送查询请求。这个本地 DNS 服务器可能是您的网络服务提供商提供的,或者是您在公司或学校网络中配置的。
  5. 根域名服务器:如果本地 DNS 服务器无法解析该域名,它会向根域名服务器发送查询请求。根域名服务器会返回负责 .com 顶级域名的权威 DNS 服务器的地址。
  6. .com 顶级域名服务器:本地 DNS 服务器然后会向 .com 顶级域名服务器发送查询请求,获取 baidu.com 的权威 DNS 服务器的地址。
  7. baidu.com 权威 DNS 服务器:最后,本地 DNS 服务器会向 baidu.com 的权威 DNS 服务器发送查询请求,获取 www.baidu.com 的 IP 地址。
  8. 返回 IP 地址:一旦本地 DNS 服务器从权威 DNS 服务器那里获得了 www.baidu.com 的 IP 地址,它就会将这个 IP 地址返回给操作系统,操作系统再返回给 Chrome 浏览器。浏览器最后使用这个 IP 地址来建立与服务器的连接。

需要注意的是,在查询的过程中,一旦在某一环节找到有效的 IP 地址记录,就会停止后续的查询。而且,为了提高效率,本地 DNS 服务器和操作系统通常会对查询结果进行缓存,以便在后续请求中直接使用,减少网络延迟。

您的理解中,步骤的顺序和描述大致正确,但需要注意的是,操作系统和本地 DNS 服务器的缓存也是 DNS 查询过程中的重要环节。而且,现代操作系统和浏览器通常会使用多种优化策略来提高 DNS 查询的效率和可靠性。

 类似资料:
  • 我使用一个可以操作JCR节点的应用程序,通常可以重命名、移除、删除或移动它们。 使用JCR API,我可以访问存储库中的节点,并以与JCR中相同的顺序返回一组节点。 我希望能够使用JCR SQL2查询实现同样的功能。我没有发现任何关于这个的信息 例如,如果我有一个JCR树,比如: 当使用JCR SQL2进行查询时,它将以不同的顺序返回它们:childNode1、childNode2、childNo

  • demo import java.io.IOException; import java.net.*; /**  * 查找IP地址  */ public class TestFindDNS {   public static void main(String[] args) throws IOException {     //     String href = "http://

  • 我正在探索Azure CosmosDB,在理解如何查询我的收藏时遇到了问题。我创建了一个web应用程序来添加和查询数据,但我想在Azure中搜索,不知道如何构造查询。 目前,我查询我的集合以返回所有内容。 这将返回大量信息。下面是数据的示例。 有没有办法只查询某个“searchTerm”(我的CosmosDB中的一个字段)。我似乎无法掌握过滤我的查询的语法。我已经尝试了在SQL中看起来有意义的东西

  • 本文向大家介绍浏览器输入网址到页面渲染全过程相关面试题,主要包含被问及浏览器输入网址到页面渲染全过程时的应答技巧和注意事项,需要的朋友参考一下 参考回答: DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束

  • vue-cli 我需要输出一些日志到开发vue的电脑上

  • 如何检查网页是否已被手机浏览器或电脑浏览器打开。我试过这个: 但它给出了这些类型的结果: 对于Fedora Firefox浏览器:Mozilla/5.0(X11;Linux i686;rv:13.0)Gecko/20100101 Firefox/13.0 从以上两个结果中,我无法区分网页是被手机还是电脑访问的。我该怎么做? 如果我能在Java做到这一点,那就太好了。