什么是DNS
域名系统(DNS)是因特网的电话簿。人类通过域名在线访问信息,如nytimes.com或espn.com。Web浏览器通过Internet协议(IP)地址进行交互。DNS将域名转换为IP地址,以便浏览器可以加载Internet资源。

连接到Internet的每个设备都有一个唯一的IP地址,其他计算机可以使用该IP地址来查找设备。DNS服务器无需人类记忆IP地址,如192.168.1.1(在IPv4中),或更复杂的新字母数字IP地址,如2400:cb00:2048:1 :: c629:d7a2(在IPv6中)。

DNS如何工作?

DNS解析过程涉及将主机名(例如www.example.com)转换为计算机友好的IP地址(例如192.168.1.1)。Internet上的每个设备都会获得一个IP地址,该地址是查找相应Internet设备所必需的 - 就像使用街道地址查找特定的家庭一样。当用户想要加载网页时,必须在用户键入其Web浏览(example.com)和找到example.com网页所需的机器友好地址之间进行翻译。

为了理解DNS解析背后的过程,了解DNS查询必须在其间传递的不同硬件组件非常重要。对于Web浏览器,DNS查找“在幕后”发生,除了初始请求之外,不需要来自用户计算机的交互。

加载网页涉及4个DNS服务器:

  • DNS recursor - recursor可以被认为是一个图书管理员,被要求在图书馆的某个地方找到一本特定的书。DNS recursor是一个服务器,旨在通过Web浏览器等应用程序从客户端计算机接收查询。通常,recursor负责发出其他请求以满足客户端的DNS查询。
  • 根名称服务器 - 根服务器是将人类可读主机名转换(解析)为IP地址的第一步。它可以被认为是图书馆中指向不同书籍书籍的索引 - 通常它可以作为对其他更具体位置的参考。
  • TLD名称服务器 - 顶级域名服务器(TLD)可以被视为库中特定的书架。此名称服务器是搜索特定IP地址的下一步,它托管主机名的最后一部分(在example.com中,TLD服务器是“com”)。
  • 权威名称服务器 - 这个最终名称服务器可以被认为是书架上的字典,其中可以将特定名称翻译成其定义。权威名称服务器是名称服务器查询中的最后一站。如果权威名称服务器可以访问所请求的记录,它将把请求的主机名的IP地址返回给发出初始请求的DNS Recursor(图书管理员)。

权威DNS服务器和递归DNS解析器之间有什么区别?

这两个概念都指的是与DNS基础结构不可分割的服务器(服务器组),但每个服务器执行不同的角色并且位于DNS查询管道内的不同位置。考虑差异的一种方法是递归解析器位于DNS查询的开头,而权威的名称服务器位于最后。

递归DNS解析器

递归解析器是响应来自客户端的递归请求并花时间跟踪DNS记录的计算机。它通过发出一系列请求直到它到达请求记录的权威DNS名称服务器(或者如果没有找到记录则超时或返回错误)来完成此操作。幸运的是,递归DNS解析器并不总是需要发出多个请求才能跟踪响应客户端所需的记录; 缓存是一种数据持久性过程,它通过在DNS查找中提前提供请求的资源记录来帮助缩短必要的请求。

权威DNS服务器

简而言之,权威DNS服务器是实际持有并负责DNS资源记录的服务器。这是DNS查找链底部的服务器,它将使用查询的资源记录进行响应,最终允许Web浏览器发出请求以访问访问网站或其他Web资源所需的IP地址。权威的名称服务器可以满足来自其自身数据的查询,而无需查询其他来源,因为它是某些DNS记录的最终真实来源。

值得一提的是,在查询针对子域(如foo.example.com或blog.cloudflare.com)的情况下,将在权威名称服务器之后添加一个额外的名称服务器,该名称服务器负责存储子域的CNAME记录。

许多DNS服务与Cloudflare提供的服务之间存在关键差异。不同的DNS递归解析器(如Google DNS,OpenDNS和Comcast等提供商)都维护DNS递归解析器的数据中心安装。这些解析器允许通过优化的DNS优化计算机系统集群进行快速简便的查询,但它们与Cloudflare托管的名称服务器根本不同。

Cloudflare维护基础设施级名称服务器,这些服务器是Internet功能不可或缺的一部分。一个关键的例子是远程服务器网络,Cloudflare部分负责托管。F根是负责每天数十亿Internet请求的根级DNS名称服务器基础结构组件之一。我们的Anycast网络使我们处于一个独特的位置,可以在不中断服务的情况下处理大量DNS流量。

DNS查找的步骤是什么?

在大多数情况下,DNS涉及将域名转换为适当的IP地址。要了解此过程的工作原理,有助于在从Web浏览器到DNS查找过程再次返回时遵循DNS查找的路径。我们来看看这些步骤。

注意:DNS查找信息通常会在查询计算机内部缓存或在DNS基础结构中远程缓存。DNS查找通常有8个步骤。缓存DNS信息时,将从DNS查找过程中跳过步骤,这样可以更快地完成。下面的示例概述了没有缓存任何内容时的所有8个步骤。

DNS查找中的8个步骤:

  1. 用户在Web浏览器中键入“example.com”,查询将进入Internet并由DNS递归解析程序接收。
  2. 解析器然后查询DNS根名称服务器(。)。
  3. 然后,根服务器使用顶级域(TLD)DNS服务器(例如.com或.net)的地址响应解析器,该服务器存储其域的信息。在搜索example.com时,我们的请求指向.com TLD。
  4. 解析器然后向.com TLD提出请求。
  5. 然后,TLD服务器使用域名服务器example.com的IP地址进行响应。
  6. 最后,递归解析器向域的名称服务器发送查询。
  7. 然后,example.com的IP地址将从名称服务器返回到解析程序。
  8. 然后DNS解析器使用最初请求的域的IP地址响应Web浏览器。

一旦DNS查找的8个步骤返回了example.com的IP地址,浏览器就能够发出对网页的请求:

  1. 浏览器向IP地址发出HTTP请求。
  2. 该IP处的服务器返回要在浏览器中呈现的网页(步骤10)。

什么是DNS解析器?

DNS解析器是DNS查找中的第一站,它负责处理发出初始请求的客户端。解析器启动查询序列,最终导致URL被转换为必要的IP地址。

注意:典型的未缓存DNS查找将涉及递归和迭代查询。

区分递归DNS查询和递归DNS解析器很重要。查询是指对需要解析查询的DNS解析器发出的请求。DNS递归解析器是接受递归查询并通过发出必要请求来处理响应的计算机。

DNS查询的类型有哪些?

在典型的DNS查找中,会发生三种类型的查询。通过使用这些查询的组合,用于DNS解析的优化过程可以导致行进距离的减少。在理想情况下,缓存记录数据将可用,允许DNS名称服务器返回非递归查询。

3种类型的DNS查询:

  1. 递归查询 - 在递归查询中,DNS客户端要求DNS服务器(通常是DNS递归解析程序)将使用请求的资源记录响应客户端,或者如果解析程序无法找到记录,则会响应错误消息。
  2. 迭代查询 - 在这种情况下,DNS客户端将允许DNS服务器返回它可以的最佳答案。如果查询的DNS服务器与查询名称不匹配,则它将返回对域名称空间的较低级别具有权威性的DNS服务器的引用。然后,DNS客户端将对引用地址进行查询。此过程将继续使用查询链中的其他DNS服务器,直到发生错误或超时。
  3. 非递归查询 - 通常在DNS解析器客户端向DNS服务器查询其有权访问的记录时会发生这种情况,因为它对记录具有权威性,或者记录存在于其缓存中。通常,DNS服务器将缓存DNS记录以防止额外的带宽消耗和上游服务器的负载。

什么是DNS缓存?DNS缓存在哪里发生?

缓存的目的是将数据临时存储在一个位置,从而提高数据请求的性能和可靠性。DNS缓存涉及将数据存储在更靠近请求客户端的位置,以便可以更早地解析DNS查询,并且可以避免在DNS查找链中进一步查询,从而改善加载时间并减少带宽/ CPU消耗。DNS数据可以缓存在各种位置,每个位置将存储DNS记录一段时间,该时间由生存时间(TTL)决定。

浏览器DNS缓存

默认情况下,现代Web浏览器设计为在一段时间内缓存DNS记录。这里的目的很明显; DNS缓存越接近Web浏览器,为了检查缓存并对IP地址发出正确的请求,必须采取的处理步骤越少。当请求DNS记录时,浏览器缓存是为请求的记录检查的第一个位置。

在chrome中,您可以转到chrome:// net-internals / #dns查看DNS缓存的状态。

操作系统(OS)级DNS缓存

操作系统级DNS解析程序是DNS查询离开计算机之前的第二个也是最后一个本地停止。设计用于处理此查询的操作系统内部的进程通常称为“存根解析程序”或DNS客户端。当存根解析器从应用程序获取请求时,它首先检查自己的缓存以查看它是否具有该记录。如果没有,则它将本地网络外部的DNS查询(带有递归标志集)发送到Internet服务提供商(ISP)内的DNS递归解析器。

递归解析器DNS缓存

当ISP内部的递归解析器收到DNS查询时,如同之前的所有步骤一样,它还将检查所请求的主机到IP地址转换是否已存储在其本地持久层内。

递归解析器还具有其他功能,具体取决于它在缓存中的记录类型:

  1. 如果解析程序没有A记录,但确实拥有权威名称服务器的NS记录,它将直接查询这些名称服务器,绕过DNS查询中的几个步骤。此快捷方式可防止从root和.com名称服务器(在我们的example.com搜索中)中进行查找,并有助于更快地解析DNS查询。
  2. 如果解析器没有NS记录,它将向TLD服务器发送查询(在我们的例子中为.com),跳过根服务器。
  3. 万一解析器没有指向TLD服务器的记录,它将查询根服务器。此事件通常在清除DNS缓存后发生。

什么是DNS?的更多相关文章

  1. 6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置

    网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis DNS服务器部署不清楚的可以看上一篇:ht ...

  2. Liunx下配置DNS服务

    当Ping 主机名时可以映射出该主机的IP地址,反之亦然.配置并指定DNS服务器可以快速部署集群,不需要每台主机都去修改HOSTS文件即可实现IP与主机名的相互解析.而在Linux下的DNS是用bin ...

  3. ★Kali信息收集~4.DNS系列

    ★.1host:DNS信息 参数: 一般情况下,host查找的是A,AAAA,和MX的记录 案例: DNS服务器查询  host -t ns 域名 A记录和MX记录查询  host 域名(host - ...

  4. Node.js:DNS模块的使用

    Nodejs的DNS模块包涵有关DNS查询和操作的方法,下面介绍该模块的基本用法以及实现一个DNS查询小工具. 1.获取DNS服务器地址 使用getServers方法,该方法返回一个IP地址组成的数组 ...

  5. Java DNS查询内部实现

    源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...

  6. DNS报文格式(RFC1035)

    一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions)      2.1 格式          后面分析报文的时候详细解释.   ...

  7. DNS原理及其解析过程 精彩剖析

    本文章转自下面:http://369369.blog.51cto.com/319630/812889 DNS原理及其解析过程 精彩剖析 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址 ...

  8. CentOS7 查看IP、Gateway、DNS、Hostname

    1.查看IP# ip addr 2.查看路由# ip route 3.查看DNS# cat /etc/resolv.conf 4.查看主机名# hostname

  9. linux查看本机IP、gateway、DNS

    IP:     ifconfig gateway:[root@localhost ~]# netstat -rnKernel IP routing tableDestination     Gatew ...

  10. Centos6.2设置静态ip和dns

    参考了如下文章:https://gist.github.com/fernandoaleman/2172388http://www.lifelinux.com/how-to-configure-stat ...

随机推荐

  1. Python学习记录8-继承2

    继承 单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类允许继承多个类 >>> class A(): pass >>> class B(A): pass ...

  2. docker搭建单机ELK

    yum -y install epel-release yum -y install python-pip // 更新pip pip install --upgrade pip // 安装docker ...

  3. 清除keil编译中间文件的脚本

    清除keil编译生成的中间文件,减小项目体积. keykill.bat del *.bak /s del *.ddk /s del *.edk /s del *.lst /s del *.lnp /s ...

  4. IT基础架构

  5. 页面Header自适应屏幕

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  6. jQuery属性遍历、HTML操作

    jQuery 拥有可操作 HTML 元素和属性的强大方法. jQuery 遍历函数 jQuery 遍历函数包括了用于筛选.查找和串联元素的方法.    .add() 将元素添加到匹配元素的集合中. . ...

  7. LoadRunner生成测试报告

     loadrunner笔记(三):设置.运行场景和生成测试报告   //上一篇的代码有点问题,问题出在 web_reg_find()函数中,这个函数简单的说是搜索下一步操作的请求对象(html)页面中 ...

  8. 若干简单的进程和作业调度的C++模拟程序

    进程调度(时间片轮转,动态优先级,链表形式): #include<cstdio> #include<cstdlib> struct PCB { ]; char state; / ...

  9. vue param和query两种传参方式

    1.传参方式 query传参方式 this.$router.push({ path: "/home", query: {code:"123"} }) param ...

  10. 转 java 中int String类型转换

    转自licoolxue https://blog.csdn.net/licoolxue/article/details/1533364 int -> String int i=12345;Str ...