DNS域名解析

当年还没毕业的时候去某“大厂”面试,面试官出了一道试题:在百度上输入一行文字,浏览器或者电脑都做了什么?


即使是一年前,当我没有认真学习过网络请求的时候,我依然回答不出来。到现在也只能说自己知道了某些过程,并不精通。下面就写写我说知道的一点,供大家参考,班门弄斧,如有不全面的地方,烦请留言指正。如果你对技术不太感兴趣,那么不妨简单看一看再直接跳到最后。看看一个技术问题是怎么扯到生活问题的。真的是一本正经的吹!


一次请求过程大约经过三步:

    第一,DNS域名解析;

    第二,CDN获取离用户最近的节点;

    第三,建立HTTP连接。


今天和大家聊的是DNS域名解析。


既然是DNS域名解析,那么什么是DNS?

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。


上面那段话简单总结一句就是:你给它一个域名,它还你一个IP。


DNS域名解析示意图如下:



域名解析大体上分为10步:

第一步:浏览器自身解析。

    当用户在浏览器中输入www.exceptionhelp.com敲回车后,浏览器会先检查本身缓存中有没有这个域名对应解析过的IP地址,如果缓存中有,这个解析过程就结束了。如果没有则去系统中查找。

    浏览器缓存大小和缓存时间都是有限制的,一般为几分钟到几小时不等。域名被缓存的时间限制可以通过TTL属性来设置。域名不能被缓存时间太长,如果太长一旦域名对应的IP有变化,会导致用户长时间无法访问网站。如果太短,每次都会进行一次域名解析,造成不必要的资源浪费。


第二步:操作系统解析。

    如果浏览器中没有解析过此域名,那么浏览器会查找操作系统缓存中是否有这个域名对应的解析结果。如果有,解析到此结束,如果没有,继续向下。

    在windows中域名解析的配置文件在C:\Windows\System32\drivers\etc\hosts。linux下配置文件在/stc/hosts。知道这个还是很有用的。例如在测试的时候,可以将一个域名解析到一台测试服务器,而不用修改任何程序。


第三步:请求本地区的域名服务器解析。

    如果前两个步骤都没有完成域名解析,那么接下来就会请求域名服务器来解析这个域名。在我们的网络配置中都会有“DNS服务器地址”这一项。操作系统会把这个域名发送给设置的LDNS,也就是本地区的域名服务器。

    在windows下可以通过ipconfig来查询这个地址。

    在linux下可以通过cat /etc/resolv.conf来查询这个地址。

    大约80%的域名解析都会在这里完成,所以LDNS主要承担域名解析工作。


第四步:请求根域名服务器。

    如果LDNS仍然没有命中,就会直接到Root Server域名服务器请求解析。


第五步:根域名服务器返回gTLDServer地址

    根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLDServer)地址。gTLD是国际顶级域名服务器,如.com  .cn  .org等,在全球只有十几台。


第六步:请求gTLDServer服务器

    本地域名服务器(LDNS)再向上一步返回的gTLD服务器发送请求。


第七步:gTLD服务器返回Name Server域名服务器地址

    接收请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。


第八步:Name Server返回域名和IP的对应关系

    Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下都根据域名得到目标IP记录,连同TTL值返回给DNS域名服务器。


第九步:LDNS缓存域名和IP的对应关系

    返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存时间由TTL值控制。


第十步:解析完成,系统和浏览器换成域名和IP的对应关系

    把解析结果返回给用户,用户根据TTL值缓存在本地系统缓存中。域名解析过程就此结束。


上面只是一个基本的解析过程,实际的过程可能比这个要多,如Name Server也可能有多级或者有一个GTM来负载均衡控制。


看完之后不知道你是什么感觉。一个简单的回车,背后确有这么多的步骤,而且上面的步骤也只是其中三个过程的其中一个。另外两个明天会继续介绍。




这是分界线。这是分界线。这是分界线。这是分界线。这是分界线。



上面和大家说了,如果你不喜欢技术就直接跳到这儿。要开始讲道理(瞎扯)了。


这里可以提炼很多观点。例如:一个事情做成功没有表面那么看起来简单;在一个组织中,总有那么一些人做了整个工作的80%,就像第三步中的LDNS;有些事情你以为这样可以,但是这样恰恰不可以,例如为什么根域名服务不将对应关系直接返回,还要走那么多步;越在低处,做的事情越具体,越在高处,做的越是统筹全局,所以高层不要介入太具体的事情。等等


可以说每一个观点都够我写上一片文章的。本次要说的观点是第一条:好多事情的成功并没有表面上看起来那么简单。你之所以认为简单,因为你不了解整个事情的过程。你只是置身事外,用局外人的眼光看事情。


好多人的成功真的不是外表看来那样简单。


自己的公号【花生读书汇】,不定期的会有技术文章发布。更多的还是聊人生,聊观点。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值