关于DNS不得不说的一些事

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/fujiandiyi008/article/details/100026139

引言

今天我们来聊聊DNS。大厂经常问!

正文

概念

DNS 的全称是 Domain Name System 或者 Domain Name Service,它主要的作用就是将人们所熟悉的网址 (域名) “翻译”成电脑可以理解的 IP 地址,这个过程叫做 DNS 域名解析。www.baidu.com,进行登陆,难道你会去敲IP地址登百度?明显,域名容易记忆。

640?wx_fmt=png

流程

接下来,就不得不说一道经典面试题了

640?wx_fmt=png

其实回答很简单(俗称天龙八步)
  • 1.根据域名,进行DNS域名解析;

  • 2.拿到解析的IP地址,建立TCP连接;

  • 3.向IP地址,发送HTTP请求;

  • 4.服务器处理请求;

  • 5.返回响应结果;

  • 6.关闭TCP连接;

  • 7.浏览器解析HTML;

  • 8.浏览器布局渲染;

ps:由于本文不是讲HTTP请求,我提几个思考题,读者自己去思考(没错,我就是故意不说,咬我啊!)

  • 1、一个 TCP 连接可以对应几个 HTTP 请求?(提示,这在问你HTTP1.0和1.1的区别)

  • 2、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?(提示,这就是在问你HTTP2.0和HTTP1.1协议的区别)

  • 3、浏览器对同一Host建立TCP连接到数量有没有限制?(拜托,一个网站那么多图片,开一个TCP连接,按顺序下载?那不是等到死?)

好了,不扯了,本文不是在讲Http协议。

解析

OK,着重说DNS解析这块,流程图如下

640?wx_fmt=png

这张图其实已经讲明白大致的流程,但是细节上可能有些差异。

  • (1)我们在用chrome浏览器的时候,其实会先去浏览器的dns缓存里头查询,dns缓存中没有,再去调用gethostbyname函数

  • (2)gethostbyname函数在试图进行DNS解析之前首先检查域名是否在本地 Hosts 里,如果没找到再去DNS服务器上查

不过,看到这里!请回忆下这两道面试题?

640?wx_fmt=png

现在,会回答了么?

什么,你还不懂怎么答?把文章拉到开头。从头看过。区域传送

DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。这种情况下,使用TCP协议。

讲到这里。其实面试官是可以深入追问的,如下所示

640?wx_fmt=png

针对第一问,为什么域名解析用UDP协议?

针对第二问,为什么区域传送用TCP协议?

讲到这里,我突然想到一个段子(没办法,头脑中知识太多)!

640?wx_fmt=png

640?wx_fmt=png

两次握手:

640?wx_fmt=png

四次握手:

640?wx_fmt=png

所以啊。三次握手资源最省(当段子看看就好)!扯回我们的DNS话题!

原理

现在,讲最后一块DNS解析域名的原理!这块是重中之重!先介绍linux下一个dig命令,以显示解析域名的过程。为了便于说明,我们来dig一下天猫的过程

dig www.tmall.com

结果如下图所示

640?wx_fmt=png

莫方,看不懂没事。 现在我们来读重点的两段。第一段代表请求参数如下图所示

640?wx_fmt=png

这段为查询内容。 DNS的查询参数一般有三个
  • (1)域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称

  • (2)Class:在设置DNS方案时,互联网之外的网络也考虑到了,而Class就是用来识别网络的,不过现在只有互联网,所以它的值永远都是代表互联网的IN

  • (3)记录类型:标识域名对应何种类型的记录。类型为A,表示域名对应的IP地址。类型为MX时,表示域名对应的是邮件服务器。类型为PTR,表示根据IP地址反查域名。类型为CNAME,表示查询域名相关别名。

当然,你这个时候要问我一个问题啦(注意上图红框)烟哥,我输入的明明是www.tmall.com可是命令里解析的地址是www.tmall.com.啊,多了一个.的符号啊?这个.符号是什么意思呢?

于是乎,又扯了一道经典面试题

640?wx_fmt=png

OK,好,要讲明白这个问题。我们要先把域名的结构讲清楚!www.tmall.com对应的真正的域名为www.tmall.com.末尾的.称为根域名,因为每个域名都有根域名,因此我们通常省略。

根域名的下一级,叫做"顶级域名"(top-level domain,缩写为TLD),比如.com、.net

再下一级叫做"次级域名"(second-level domain,缩写为SLD),比如www.tmall.com里面的.tmall,这一级域名是用户可以注册的;

再下一级是主机名(host),比如www.tmall.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。

那么解析流程就是分级查询 (1)先在本机的DNS里头查,如果存在就直接返回了。本机DNS就是下面这个东东

640?wx_fmt=png

(2)本机DNS里头发现没有,就去根服务器里查。根服务器发现这个域名是属于 com 域,因此根域DNS服务器会返回它所管理的 com 域中的DNS 服务器的IP地址,意思是“虽然我不知道你要查的那个域名的地址,但你可以去 com 域问问看” (3)本机的DNS接到又会向 com 域的DNS服务器发送查询消息。 com 域中也没有 www.tmall.com 这个域名的信息,和刚才一样, com 域服务器会返回它下面的 tmall.com 域的DNS服务器的IP地址。 以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标DNS服务器

ps:温馨提醒,dig +trace www.tmall.com 可以看到解析过程。有兴趣的读者,自己实验一下。

扯了那么多东西,我们来看第二段内容,也就是响应体的部分!如下所示

640?wx_fmt=png

很明显,第一行就是说 www.tmall.com 这个域名地址拥有一个别名是 www.tmall.com.danuoyi.tbcache.com 。那么,很显然,后面几行就是这个 www.tmall.com.danuoyi.tbcache.com 地址的真实IP。

为什么天猫要设一个别名到www.tmall.com.danuoyi.tbcache.com地址呢?

640?wx_fmt=png

说句实在话,我当初第一眼,见到这题的时候,我觉得应该是方便cdn配置。 回到我们的例子,如果烟哥的猜测正确, www.tmall.com.danuoyi.tbcache.com 这个地址,应该是淘宝的一个cdn地址。 因此,我特意去查了域名备案记录。如下图所示

640?wx_fmt=png

果然,就是一个淘宝的cdn环境。 那么这么配有什么好处呢? 唉,这题当思考题,快过来探讨留言!

总结

本文讲了DNS的一些常见知识点,希望大家有所收获。如果有其他关于DNS的问题,欢迎留言咨询。

(啊,呸,我就随便说说,不要当真,千万别问,万一我不会,不是暴露了我是个水货)

猜你喜欢

转载自blog.csdn.net/fujiandiyi008/article/details/100026139