当你在浏览器地址栏输入www.baidu.com,www.bilibili.com时,你有想过浏览器是怎么通过域名解析到IP,定位到服务器吗,本文将帮你解决这个疑惑,准备上车!
首先直接上图,整个流程如图所示:
当输入网址后,所要做的工作是通过域名解析到对应的ip地址,这时我们的电脑做了哪些事呢?
-
第一步,去缓存中查找,因为当你每访问一次不同的域名,我们的计算机在缓存中实际是有一个备份的,常用的网址会放到缓存中,如果在缓存中找到域名对应的ip就可以直接通过http协议发送请求目标服务器。
-
第二步,如果缓存中没找到,会去Hosts文件寻找有没有设置域名所对应的ip。
该文件其实是一个纯文本的文件,用普通的文本编辑软件如记事本等都能打开。我们可以通过在Hosts中配置域名和IP的映射关系,这样当我们输入域名计算机就能很快解析出IP,而不用请求网络上的DNS服务器。
如下图所示,我们在hosts文件中配置了域名和IP的映射关系,我们访问adc.com时就会访问到设定的ip对应服务器上(如果是自己的服务器的话不要忘记加端口号哈)
看到这里是不是想到可以在本机把baidu的域名改为自己服务器的ip,在本机访问就可以和小伙伴们装B了,啊哈哈),但是这里要说明的是如果用baidu.com的话,你会发现你并没有访问到配置的ip,而还是访问到百度的网址,这是怎么回事呢,这是因为我们在第一步提到的缓存啊,百度是你经常访问的网址,在你输入baidu.com时,就已经在缓存中找到baidu.com的域名啦 -
第三步,如果以上两步都没有找到对应的ip,那么就要通过访问DNS服务器来解析获得域名对应的ip了。 那么问题来了,我怎么知道DNS服务器的地址呢。
全球有13个根域服务器:1个为主根域服务器,在美国;其余12个为辅助根域服务器,其中9个在美国;欧洲2个,分别在英国和瑞迪;亚洲一个,在日本。也就是说DNS的ip都是定死的,事实上每个浏览器也都记录着DNS的ip,浏览器采取udp协议(会造成网络丢包,但提升了速度)通过向DNS服务器发送请求获得ip地址。下面将详细介绍这一流程。
其实除了国外的13台DNS服务器,国内也有很多代理商,在我们注册网站,访问网站的时候都会做记录的备份,比较出名的就是阿里和腾讯,以防国外不给你用DNS服务器了,国内会网络瘫痪,但是浏览器是不知道这些代理商的ip地址的,所以还是要先访问浏览器中记录的DNS服务器。
这时我们可能会有疑惑,那我们每次访问域名都要访问国外的DNS服务器吗,这时候就要引入国家防火墙,正是有了这一道墙,墙外的人想进来,墙内的人想出去都(费尽心机的找梯子),这道墙会拦截我们的请求,通过其中记录的国内DNS代理服务器的地址(阿里,腾讯),转发给对应的代理服务器,代理服务器进行解析并把解析到的ip返回给发送请求的服务器,这也就导致很多国外的网站访问不了,就是因为代理服务器中没有国外网站的域名解析或是说不让你访问,此过程已做成图解,在本文开篇,可以参考。
以上就是当输入网址后,浏览器和计算机所要做的工作,希望对大家有所帮助,如果有遗漏不妥的地方,欢迎大家指正。