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

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 SERVICE 配置工作任务-winserver2

    赛题               2.2.4.辅助DNS SERVICE 配置工作任务 1.辅助DNS配置区域        正向区域        反向区域 2.主DNS权限设置 赛题 2.2.4. ...

  2. 1、请简述DNS的作用,并说明当你输入网址“www.nxtc.edu.cn“按下回车后,DNS是怎么工作的?(关键步骤可以给出相应图示) 2、详细描述域名劫持攻击的过程及防御方式。

    一.请简述DNS的作用,并说明当你输入网址"www.nxtc.edu.cn"按下回车后,DNS是怎么工作的?(关键步骤可以给出相应图示) DNS的作用: 把网址解析转化成ip地址, ...

  3. DNS作用及工作原理

    文章目录 1. DNS作用 2 DNS 三个组成部分: 2.1 客户端 2.2Local DNS 2.3 权威域 DNS 服务器 3 工作过程 1. DNS作用 DNS 分为 Client 和 Ser ...

  4. 路由器DNS代理的工作原理介绍

    DNS 是域名系统的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串,一般来说宽带路由器都有DN ...

  5. 通信网络中DNS服务器的位置在哪,DNS服务器的工作原理及其过程

    DNS服务器所提供的服务是完成将主机名和域名转换为IP地址的工作.为什么需要将主机名和域名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是便 ...

  6. bat文件设置dns服务器,.bat文件设置IP、DNS

    这几天遇到个烦心事,每次开机之后都要去手动去设置一下IP地址,一大串的数字还是有点麻烦,于是就想写个批处理文件设置IP 注意:在DOS下设置IP时需要管理员权限运行 1.查看机子设置IP需要用到的名字 ...

  7. 计算机域名DNS设置,电脑的IP地址和DNS域名服务器如何设置

    电脑的IP地址和DNS域名服务器如何设置 在日常生活出现的网络问题中,除了路由器设置之外,IP地址和DNS设置是最突出的,今天yjbys小编给大家整理的一些有关设置IP地址和DNS域名服务器的方法,希 ...

  8. DNS劫持原理、dns劫持有什么办法解决、DNS劫持原理与操作

    DNS(域名系统)的作用是把网络地址(域名,以一个字符串的形式)对应到真实的计算机能够识别的网络地址(IP地址),以便计算机能够进一步通信,传递网址和内容等.由于域名劫持往往只能在特定的被劫持的网络范 ...

  9. 网站服务器未响应怎么解决,dns服务器未响应,手把手教你dns服务器未响应怎么解决...

    dns服务器未响应是我们日常使用电脑上网时常遇到的网络故障之一.碰到这个情况的用户太多了,但是基本没有同一的解决方法,笔者当然也经常碰到,尤其是这几天,都快砸电脑了,太影响工作了,没有办法自己动手了, ...

最新文章

  1. Google今天的logo
  2. ewebeditor 上传大内容文本注意点
  3. retrofit2 spring接受参数_Spring面试中有可能遇到的问题
  4. Apache Kafka-消费端_批量消费消息的核心参数及功能实现
  5. gRPC-rs:从 C 到 Rust 1
  6. Taro+react开发(95):问答模块02
  7. python环境问题(pycharm)
  8. 使用JSLint提高JS代码质量
  9. 作者:姚前(1970-),男,中国人民银行征信中心副主任、高级工程师,主要研究方向为分布式系统和计算机安全。...
  10. Java案例:读取XML文档
  11. SpringBoot 实现热部署有哪几种方式
  12. 如何聊离职原因,向面试官展示自己的忠诚
  13. 不采用服务器虚拟化的优缺点,为什么要进行虚拟化部署?虚拟化的缺点是什么?...
  14. 古体字与简体字对照表_简体字与繁体字对照表大全.pdf
  15. mysql局域网访问6_mysql局域网访问
  16. 用于视力恢复的脑机接口综述(一)
  17. UHF超高频RFID通信协议实验步骤
  18. python分解word文档为多个_如何将一个word文档按页分割成多个word文档-百度经验...
  19. DNS(域名解析系统)
  20. 商业智能BI的未来,如何看待AI+BI这种模式?

热门文章

  1. swift 中跳转web view的两种方法
  2. Bootstrap4 更新笔记
  3. Unable to complete the scan for annotations for web application
  4. this - 想说爱你不容易
  5. 解决事件多次绑定,执行多次问题
  6. Beaglebone Black教程BeagleBone Black安装最新系统映像
  7. Canvas 的基本原理
  8. android ValueAnimator学习
  9. 软件定义光网络-SDON
  10. 区块链将带来怎样的应用?