在互联网中,要想把一个数据包发给另外一台主机,我们需要依靠 IP 进行定位,而但是我们在上网的时候好像也没有靠 IP,浏览器输入网址回车之后就到我们想要看的网址了。这是因为 DNS 帮我们把网址解析成了 IP 地址。在上一篇中我们讲了 HTTP 协议,当前之讲了 HTTP,对于支撑 HTTP 的 TCP 协议和 IP 协议我们并没有说,这些我们放到后续慢慢讲,在这一篇我们要讲的是 DNS 域名解析协议,这也是一个应用层的协议,在看完这一篇文章之后,你将会了解到 DNS 在网络中的作用,以及 DNS 是怎么把一个网址映射到一个 IP 地址的。

浏览器输入网址后的过程

相信这一部分大家了解的肯定都不少了,关于“浏览器输入网址后摁下回车后发生了什么”,这件事情貌似是老生常谈了,我们现在就专门来研究其中的 DNS 的部分。

比如我们在浏览器里面敲下了下面的网址:

www.example.com

在我们输入完网址敲下回车之后,开始域名解析的过程,首先会查缓存

  • 浏览器缓存:查询浏览器的缓存,如果之前缓存过这个域名对应的 ip 地址,可以直接从浏览器中的缓存中找到对应的 ip 地址
  • 操作系统缓存:查询本地操作系统缓存,操作系统也会维护 DNS 缓存,比如你换了一个浏览器,没有之前浏览器的缓存了,但是操作系统本身有缓存,就可以在其中找到域名的映射关系。还可能会查 HOST 文件

如果上述的缓存都没有查到我们的域名,就会进行下面的查询流程

  • 本地 DNS 服务器:本地 DNS 服务器也叫 DNS 递归解析器,DNS 递归解析器这个名字就暴漏了 DNS 解析的方式。首先如果本地 DNS 服务器查不到对应的域名,此时会向根域名解析器询问
  • 根域名解析服务器:根域名解析器对应的是 .com 后面的 “.”,没错 .com 后面还有个点呢,根域名解析器通常不会给出最终的 ip,而是告知顶级域名解析服务器的地址
  • 顶级域名解析服务器:顶级域名解析服务器对应的就是 .com,它也不会直接告知要查询的域名对应的 ip,而是告知权威域名解析服务器的地址
  • 权威域名解析服务器:权威域名解析服务器对应的就是 example.com,到这就是到家了,这个权威域名解析服务器会保存这个域名对应的 ip 地址,然后把这个 ip 地址返回给本地 DNS 域名解析服务器
  • 此时本地 DNS 解析服务器会缓存对应的映射关系,再返回给操作系统,操作系统也会缓存,再返回给浏览器,浏览器再缓存

这其中就设计递归查询和迭代查询

  • 递归查询:递归查询说的就是本地 DNS 服务器,在把域名交给本地 DNS 服务器之后,就不会管你后面怎么查了,让递归 DNS 服务器负责后续的查询,我们只要结果。
  • 迭代查询:迭代查询说的就是我们这个 DNS 解析的过程,当我们询问根 DNS 解析服务器 ip 的时候,它不会直接告诉我们对应的 ip,而是把下一级的 DNS 服务器的地址给我,让我们去问下一级
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐