DNS

什么是 DNS

DNS 即域名系统,全称是 Domain Name System。对于浏览器来说,DNS 的作用就是将主机名转换成 IP 地址

DNS 是:

  1. 一个由分层的 DNS 服务器实现的分布式数据库
  2. 一个使得主机能够查询分布式数据库的应用层协议

DNS 的查询过程,说白了,就是去向这些 DNS 服务器询问,你知道这个主机名的 IP 是多少吗,不知道?那你知道去哪台 DNS 服务器上可以查到吗?直到查到我想要的 IP 为止。

DNS 服务器有 3 种类型:根 DNS 服务器、顶级域(Top-Level Domain, TLD)DNS 服务器和权威 DNS 服务器。它们的层次结构如下图所示:

DNS 的层次结构.jpeg

 

DNS 缓存

  • 本地DNS缓存
  • DNS服务器缓存

DNS 缓存的原理非常简单,在一个 DNS 查询的过程中,当某一台 DNS 服务器接收到一个 DNS 应答(例如,包含某主机名到 IP 地址的映射)时,它就能够将映射缓存到本地,下次查询就可以直接用缓存里的内容。

本地 DNS 服务器

严格来说,本地 DNS 服务器并不属于 DNS 的层次结构,但它对 DNS 层次结构是至关重要的。那什么是本地 DNS 服务器呢?

每个 ISP 都有一台本地 DNS 服务器,比如一个居民区的 ISP、一个大学的 ISP、一个机构的 ISP,都有一台或多台本地 DNS 服务器。(可以认为是你的网络接入服务器商提供,比如中国电信,中国移动,阿里云等域名供应商),当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,本地 DNS 服务器起着代理的作用,并负责将该请求转发到 DNS 服务器层次结构中。

 

DNS解析

在浏览器输入域名的时候,DNS是怎样解析的呢?分以下几步:

  1. 本地DNS缓存
    • 浏览器会从自身的DNS缓存中去查找(chrome://net-internals/#dns),如果没有则进行下一步
  2. 本地计算机hosts文件
  3. 本地DNS服务器缓存
    • 请求本地域名服务器,如果该服务器有缓存,则直接返回,若没有,则下一步。。。一般80%到这里就可以了(比如你申请一个域名,去阿里云,那么你肯定会写上域名所指向的IP啊)。
  4. DNS服务器递归迭代查找:
     

准备:

  • 首先需要知道的是,根域名服务器和顶级域名服务器全世界大概有十几台,是最顶尖的了,大概知道就行。

  • 其次,实际上我们的网址应该为 test.baidu.com . ,注意看后面有的  ,只不过浏览器为了方便用户都给省略了。

比如解析test.baidu.com. ,是具体怎么解析成IP地址的呢?可以形容为,从右向左

. -> .com -> baidu.com. -> test.baidu.com

(1)请求根域名服务器,带着 test.baidu.com. ,根域名服务器发现是 .com 结尾,然后告诉你,我只知道 com顶级域名服务器 的IP地址,你去问问它试试
(2)然后浏览器就向 com顶级域名服务器 请求,带着 test.baidu.com. ,com顶级域名服务器 只知道 baidu.com. 所在的服务器地址,并不知道 test. 是啥(因为test.这二级域名,只有百度自己知道啊,因为是百度自己设定的,就像crm.credit.cn,是不是只有公司才知道crm是个啥?)。。。所以 com顶级域名服务器 会告诉你,我只知道baidu.com. 所在的IP地址,你去问问它把(百度公司的web服务器)
(3)然后就向 "百度公司域名服务器" 请求,带着 test.baidu.com. ,百度公司自己肯定知道 test 是个啥,所以百度公司,就把最后真正的IP地址,返回给浏览器,到此,迭代查询完成了

思考:为什么需要迭代查询呢?

如果没有分层,那全世界所有的域名都交由根服务器管理?那不是很乱吗?

所以对域名进行分层次的架构,方便管理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

阅读剩余
THE END