其实这个问题每次看的时候都觉得很明白,但是很久之后就忘记了,所以这次准备记录下来。深入到这个过程的各个细节之中,以后多看看。

Step 1 请求缓存信息:

当你在开始访问一个 www.baidu.com 开始,第一件事情就是去访问本地缓存查询是否有缓存了这个地址的 ip 地址。如果能获取到直接返回,然后访问。这个缓存来自于你之前访问之后存下来的,这里还涉及到另外一个概念就是缓存的 TTL。那什么是 TTL (Time To Live)?

TTL (Time to Live)是每个DNS记录的设置,它指定解析器在查询过期之前应该缓存(或记住)DNS查询的时间,还有一个新产生的 DNS 查询记录什么时候过期。

那么当我们之前 retrieve 了一个地址之后,我们会缓存 TTL 这么久的时间,当我们现在再发起一个新请求的时候,查询到有这个缓存就可以直接拿来使用了。

让我们来看下 chrome 再访问过网址之后的 DNS 缓存情况直观的了解一下:

在 chrome 打开地址 chrome://net-internals/#dns

这是在我清理过一次 cache 之后重新访问 google 的解析数据。可以看到这里可以显示  DNS 查询到的 ip 地址和 hostname 的映射,其中还包括过期时间之类的东西。可以很明确看到 TTL 就是经过多少 s 之后过期。 TTL 的单位是毫秒。

Step1 + 查看本地 hosts:

如果浏览器 cache 上没有还活着的记录,会去查询本地操作系统的 hosts 文件。hosts 文件上面存放着对应的 ip 地址和 ns 的关系。如果找到对应的指向就会返回。

Step2 递归查询 ISP server:

如果本地没有查询到缓存,那么这个查询将会以递归的方式去询问 ISP 服务。 ISP 的递归查询服务也有自己的缓存,所以你的查询通常到这里就结束了。

Step3 询问根域名服务器:

如果 ISP 服务器并不知道你查询的域名地址在哪儿,那么就需要去查询根域名服务器。全球 13 个 DNS 服务器根扮演者一个类似于基于 DNS 电话簿一样的角色。他们虽然不知道你查询的地址的 ip 地址是多少,但是他们可以定向你到知道这个地址。

Step4 询问 TDL 服务器:

当根域名服务器在接收到查询请求之后,会将你查询的域名拆开看你的顶级域部分。比如查询 www.baidu.com 。那么会从右往左拿到 .com 并且定向查询到 TDL (顶级域名查询)。不同的顶级域都有不同的查询服务器例如 .tv .cn .org 等等等。这些顶级域查询服务器其实也没有我们需要的直接的答案,也就是我们需要的 ip 地址。但是他们同样可以将我们定向到有这些信息的服务器那里去,根域名服务器如果发现是 .com 之后就会返回 .com 的 ns(name server) 地址。

Step5 询问权威服务器:

顶级域名服务器 TDL 会 review 这个我们的请求并且拿到 baidu.com 这部分,将这个查询定向指定的权威域名服务器上去(同样是通过返回 ns 地址的方法)。这些权威域名服务器负责了解有关特定领域的所有信息通过存储 DNS 记录。这里存储了各种各样的类型的记录,以包含不同类型的信息。打个比方说就是上面我们想要知道的 www.baidu.com 这个地址,那么我们就是在询问权威域名服务器了解 A 地址。

Step6 取回这个查询到的记录:

现在我们查询到这个记录了 ISP 服务器将取回这个记录并且将它记录下来(存进自己的缓存基于 TTL)。如果后面有人再问谁知道 www.baidu.com 这个地址的时候就不再需要去询问根服务器,因为他已经自己缓存得有答案了。当然在 TTL 过期之后,就会重新进行一次 look up process 以保证自己的缓存尽量具有实时性以应对互联网上的改动。

Step7 从 ISP 取回这个记录:

ISP 获得记录之后会返回给发起这个查询的我们的电脑。我们的浏览器也同样会将这个记录缓存起来。然后我们就根据返回的这个地址访问这个 ip 地址并且建立连接(tcp/ip协议)。然后我们就愉快的在浏览器上看到内容了!

这里其实再提一嘴域名的划分问题,这个也是比较容易混淆的地方。

例如 baidu.com 这就是一个顶级域名,

www.baidu.com 不是一个顶级域名,只是顶级域名 baidu.com 上的一个 www 主机。也可以称为是一个二级域名。

a.www.baidu.com 可以称为 一个三级域名。

其实在 顶级域名上面和二级域名上面还有一些争议或者不同的说法。 例如 .com. 其实这才是顶级域名这样的说法似乎也被认可。只需要了解即可,通常的说法就是我前面例举的那种不要搞混淆咯。

Reference:

https://dyn.com/blog/dns-why-its-important-how-it-works/  dns-why-its-important-how-it-works

https://www.verisign.com/en_US/website-presence/online/how-dns-works/index.xhtml  How the Domain Name System (DNS) Works

https://dyn.com/blog/dyn-tech-everything-you-ever-wanted-to-know-about-ttls/  Everything You Ever Wanted To Know About TTLs

http://blog.csdn.net/hanghangaidoudou/article/details/51753695  DNS 的几个基本概念

https://serversforhackers.com/c/hosts-file-and-dns  hosts-file-and-dns

DNS 到底怎么工作的? (How does dns work?)的更多相关文章

  1. DNS查询的工作原理

    二.DNS查询的工作原理 1.DNS查询过程按两部分进行     1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析     2.如果不能再本机解析查询, 可根据设定的查询DN ...

  2. DNS是如何工作的?

    今天很多人都在讲域名系统和互联网作为一个整体是如何工作的,域名系统---也就是大家所熟知的DNS.不幸的是,对于天龙人和普通人来说,他们并不了解DNS到底是什么鬼.今天就来聊聊DNS,和那些想了解DN ...

  3. DNS 系列(二):DNS 记录及工作方式,你了解吗?

    在上一篇<DNS 系列(一):为什么更新了 DNS 记录不生效?>中,我们主要讲解了 DNS 和 DNS 传播,知道了网络通信主要通过 IP 地址来进行,而域名系统(DNS)则是保证用户在 ...

  4. DNS到底是干什么用的

    DNS,DomainNameSystem或者DomainNameService(域名系统或者余名服务).域名系统为Internet上的主机分配域名地址和IP地址.用户使用域名地址,该系统就会自动把域名 ...

  5. linux dns子域授权 split分离解析 缓存dns服务器

    DNS子域授权作用:适用于同一个DNS组织父/子域名的解析工作由不同的dns服务器负责父dns服务器应该有为子域名迭代的能力 上下级区域属于不同的机构管理:.cn与.Anonymous.cn.cn需要 ...

  6. 《DNS攻击防范科普系列2》 -DNS服务器怎么防DDoS攻击

    在上个系列<你的DNS服务真的安全么?>里我们介绍了DNS服务器常见的攻击场景,看完后,你是否对ddos攻击忧心重重?本节我们来告诉你,怎么破局!! 首先回顾一下DDoS攻击的原理.DDo ...

  7. DNS域名解析四种配置实验 ---Linux DNS域名解析服务

    DNS域名解析服务一.BIND域名服务基础1) DNS的定义2)域名结构3)DNS系统的作用① 正向解析:根据域名查找对应的IP地址② 反向解析:根据IP地址查找对应的域名③ DNS系统的分布式数据结 ...

  8. 架构师成长之路6.3 DNS服务器搭建(部署单台DNS)

    点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署单台DNS) 1.安装bind yum -y install bind-utils bind bind-devel bind-chr ...

  9. 防DNS劫持教程,手动修复本地DNS教程

    防DNS劫持教程,手动修复本地DNS教程 该如何避免DNS劫持的问题呢?1. 请不要轻易连接陌生网络.2. 可以通过手动指定DNS(DNS用于将域名正确转换为您想访问的网站的作用),修改后你的网络应用 ...

随机推荐

  1. java递归删除文件夹

    递归删除文件夹 public static void delete(File file) { if(!file.exists()){ return; } if(file.isFile() || fil ...

  2. UVA1627-Team them up!(二分图判断+动态规划)

    Problem UVA1627-Team them up! Total Submissions:1228  Solved:139 Time Limit: 3000 mSec Problem Descr ...

  3. LightGBM介绍及参数调优

    1.LightGBM简介 LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法.它可以说是分布式的,高效的,有以下优势: 1)更快的训练效率 2)低内存使用 3)更高的准确率 4) ...

  4. php实现TXT小说章节解析、小说章节在线阅读

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 要实现TXT文本章节的解析,大概思路是在每个章节加入了特定的字符,然后根据字符的起始位 ...

  5. (五)JavaScript 变量

    JavaScript 变量 与代数一样,JavaScript 变量可用于存放值(比如 x=5)和表达式(比如 z=x+y). 变量可以使用短名称(比如 x 和 y),也可以使用描述性更好的名称(比如 ...

  6. nginx之七:nginx path(root)文件路径配置

    nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了如下,方便大家在应用过程中,快速响应.root和alias主要区别在于如何解释location后面的uri,这会使 ...

  7. Mybatis学习总结(七)——调用存储过程

    一.返回select结果集 1.创建存储过程 DELIMITER // DROP PROCEDURE IF EXISTS proc_queryUser; CREATE PROCEDURE proc_q ...

  8. Generative Adversarial Nets[LSGAN]

    0 背景 在这之前大家在训练GAN的时候,使用的loss函数都是sigmoid_cross_entropy_loss函数,然而xudon mao等人发现当使用伪造样本去更新生成器(且此时伪造样本也被判 ...

  9. Generative Adversarial Nets[AAE]

    本文来自<Adversarial Autoencoders>,时间线为2015年11月.是大神Goodfellow的作品.本文还有些部分未能理解完全,不过代码在AAE_LabelInfo, ...

  10. Netty学习问题总结

    目录 一.HTTP协议分包 二.WebSocket协议分包 三.HTTP和WebSocket协议共用一个端口的问题 四.TIME WAIT状态占用了什么资源 五.关于 本篇记录了Netty学习过程中想 ...