大家好,我是辉夜真是太可爱啦 。故事的开始,要从一道经典的面试题开始说起, 从输入 URL 到页面加载完成,发生了什么? 相信大家应该对这个题目也很耳熟了。本系列是我 《一文搞懂JS系列》 之后的第二个系列。旨在让大家搞懂这个加载过程,从简答以及深入解答都能够对答如流!
前言
首先,有一点,互联网计算机都是通过 IP 地址进行标识和通信的 。
所以,当我们在通过域名,比方说是通过 https://www.baidu.com/
访问百度网站的时候,其实,都是内部经过了域名解析,找到百度的 IP
地址,再从对方的服务器中获取加载页面所需要的资源文件( HTML + CSS + JS
或者是图片视频文件等...)
所以,并不是大家所想的那样,是直接可以通过域名进行通信的。
而记 IP 地址,往往对人不是那么友好,为了方便记忆,采用域名来代替IP地址标识站点地址。
而域名解析,总共可以分为两个过程,先是请求缓存,缓存找不到,再去寻找 DNS
服务器,我们就主要按这两种类型来接下去往下面分析。
缓存解析
浏览器缓存
当用户在浏览器中输入 URL
地址,敲下回车的时候,那么,我们的域名解析工作就开始了。
首先呢,浏览器会检查缓存中是否有这个域名对应的 IP 地址,如果有,那么解析到这就已经结束了。
当然,也并不是每次都能那么幸运,缓存中刚好就有。
因为浏览器的缓存域名也是有限制的。不仅浏览器缓存的大小受限制,同样地,它的时间也会有相应限制。通常情况下为几分钟到几小时不等。
而这个缓存时间,太长或者太短都不好,因为太短的话下一次又要重新解析,有点浪费资源。但是太
长的话,如果这个域名绑定的 IP 地址已经有所更换,那么,一直通过缓存定向到旧的服务器地址,页面一直是老的。亦或者是对方直接索性更换服务器了呢,那不是直接连页面都打不开了。(人家都搬家了,你还一直找别人的老住址,这不是人都傻了!)
操作系统缓存
当然,如果上面的浏览器缓存没找到,我们的操作系统也有相应的缓存,计算机的设计还挺靠谱。
在 Windows
中可以通过 C:\Windows\System32\drivers\etc\hosts
文件来设置,你可以将任何域名解析到任何能够访问的 IP 地址。你也可以自己指定域名对应的 IP 地址。但就是那么一个小小的功能,让黑客有了可乘之机。
通过程序修改系统的域名解析系统,将你想访问的域名,解析到他指定的 IP 地址上,这种时候,就发生了所谓的域名劫持 。
所以,在后来的更新中,将 hosts
改为了只读文件,无法修改,才避免了上述的问题。
路由器缓存缓存
如果操作系统也没有缓存,就会查找路由器中是否有该 IP
地址解析的结果。
需要注意的是,(缓存只是将解析的结果保存下来,两者并没有实际能完成域名解析的能力)
DNS
概念
DNS(Domain Name System),域名解析系统,是互联网基础资源的核心服务,主要用于承载 IP 地址和互联网域名之间的转换。它的主要作用就是相当于互联网 IP 地址的电话簿。
LDNS
当然,如果上述缓存中,都没有相应的域名解析结果,就会真正的请求域名服务器来请求结果了,首先请求的就是 LDNS
,即本地 DNS
。这些服务器一般架设在离用户不远的地方,而且性能都很好,所以一般都会缓存域名解析结果,大约80%的域名解析都会在这一步完成。所以 LDNS
承担了主要的域名解析工作。
当缓存服务器中也没有的时候,就会把信息传递给根域名服务器。
DNS服务器
在 DNS
服务器中,主要分为三种
在全球一共有13组根域名服务器(注:这里并不是指13台服务器,是指13个ip地址,按字母a-m编号),根域名服务器不会直接解析域名,而是把不同的解析请求分配给下面的其它服务器来完成。
以 https://www.baidu.com
为例:
当根域名接收到本地 DNS
的解析请求后,获知后缀是 .com
,于是就把负责 .com
的顶级域名服务器 IP 地址返回给本地 DNS
。
然后本地 DNS
再向负责 .com
的顶级域名服务器发起请求, .com
顶级域名服务器也检查自己是否有这个域名的解析结果,没有的话,则将 qq.com
的权威 DNS
服务器的 IP 地址返回给本地 DNS
,依次再是 www.qq.com
,如此往复,根据域名的层级来依次递归。
可以看到我们的域名和 DNS
服务器的层级,有着密不可分的关系。
得以将互联网庞大的网络进行分层处理。
网友评论