今天咱们来聊聊DNS。
所谓域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它做为能够将域名和IP地址相互映射的一个分布式数据库,能够balabala..省略一万字不表,由于这都不是重点!
重点只有一个,大厂常常问!
没错,正是由于DNS包含着不少大厂常考面试知识点!所以,烟哥认为颇有必要再开一文说明。linux
DNS 的全称是 Domain Name System 或者 Domain Name Service,它主要的做用就是将人们所熟悉的网址 (域名) “翻译”成电脑能够理解的 IP 地址,这个过程叫作 DNS 域名解析。
打个比方,咱们登百度的地址的时候,都是敲www.baidu.com
,进行登录,难道你会去敲IP地址登百度?明显,域名容易记忆。
并且,一个域名每每对应多个DNS地址,以下图所示
若是要所有都记住,嗯,我相信兄台记忆力必定十分惊人!面试
接下来,就不得不说一道经典面试题了
其实回答很简单(俗称天龙八步)chrome
ps:
因为本文不是讲HTTP请求,我提几个思考题,读者本身去思考(没错,我就是故意不说,咬我啊!)数据库
好了,不扯了,本文不是在讲Http协议。
下面咱们着重来讲DNS解析这块浏览器
OK,着重说DNS解析这块,流程图以下
缓存
如图所示,大体就是:浏览器输入地址,而后浏览器这个进程去调操做系统某个库里的gethostbyname函数(例如,Linux GNU glibc标准库的gethostbyname函数),而后呢这个函数经过网卡给DNS服务器发UDP请求,接收结果,而后将结果给返回给浏览器。服务器
这张图其实已经讲明白大体的流程,可是细节上可能有些差别。
例如网络
不过,看到这里!请回忆下这两道面试题?
如今,会回答了么?dom
什么,你还不懂怎么答?把文章拉到开头。从头看过。
不过呢,须要补充说明一下,DNS中也有一个地方用到了TCP协议。那就是区域传送!分布式
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从本身本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它须要与主DNS服务器通讯,并加载数据信息,这就叫作区传送(zone transfer)。 这种状况下,使用TCP协议。
讲到这里。其实面试官是能够深刻追问的,以下所示
针对第一问,为何域名解析用UDP协议?
由于UDP快啊!UDP的DNS协议只要一个请求、一个应答就行了。而使用基于TCP的DNS协议要三次握手、发送数据以及应答、四次挥手。可是UDP协议传输内容不能超过512字节。不过客户端向DNS服务器查询域名,通常返回的内容都不超过512字节,用UDP传输便可。
针对第二问,为何区域传送用TCP协议?
由于TCP协议可靠性好啊!你要从主DNS上复制内容啊,你用不可靠的UDP?
由于TCP协议传输的内容大啊,你用最大只能传512字节的UDP协议?万一同步的数据大于512字节,你怎么办?
讲到这里,我忽然想到一个段子(没办法,头脑中知识太多)!
这个问题,咱们这里当段子来说,改天写一篇《TCP/IP面试指南》!
三次握手:
两次握手:
四次握手:
因此啊。三次握手资源最省(当段子看看就好)!扯回咱们的DNS话题!
如今,讲最后一块DNS解析域名的原理!这块是重中之重!
先介绍linux下一个dig
命令,以显示解析域名的过程。
为了便于说明,咱们来dig
一下天猫的过程
dig www.tmall.com
结果以下图所示
莫方,看不懂没事。
如今咱们来读重点的两段。第一段表明请求参数以下图所示
这段为查询内容。
DNS的查询参数通常有三个
固然,你这个时候要问我一个问题啦(注意上图红框)
烟哥,我输入的明明是www.tmall.com但是命令里解析的地址是www.tmall.com.啊,多了一个.的符号啊?这个.符号是什么意思呢?
因而乎,又扯了一道经典面试题
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就是下面这个东东
(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
能够看到解析过程。有兴趣的读者,本身实验一下。
扯了那么多东西,咱们来看第二段内容,也就是响应体的部分!
以下所示
很明显,第一行就是说www.tmall.com
有一个别名是www.tmall.com.danuoyi.tbcache.com
。后面几行就是这个www.tmall.com.danuoyi.tbcache.com
地址的真实IP。
为何天猫要设一个别名到www.tmall.com.danuoyi.tbcache.com地址呢?
因而乎,又一道经典面试题出现
说句实在话,我当初第一眼,见到这题的时候,我以为应该是方便cdn配置。
回到咱们的例子,若是烟哥的猜想正确,www.tmall.com.danuoyi.tbcache.com
这个地址,应该是淘宝的一个cdn地址。
所以,我特地去查了域名备案记录。以下图所示
果真,就是一个淘宝的cdn环境。
那么这么配有什么好处呢?
唉,这题当思考题,快过来探讨留言!
本文讲了DNS的一些常见知识点,但愿你们有所收获。若是有其余关于DNS的问题,欢迎留言咨询。
(啊,呸,我就随便说说,不要当真,千万别问,万一我不会,不是暴露了我是个水货)!