经典前端面试题:进入一个网页,发生了什么?第一章DNS解析

之前我在一家小公司,当前端面试官的时候,我都会问:进入一个网页,发生了什么?为什么问呢。就是因为有些人只会写增删查改业务代码,不思考算法,不思考底层,不懂得优化,这种只能算码农,不能算程序猿。虽然说这道面试题,几乎是必考,但是却能很好的体现出一个人的基础如何。

首先,进入一个网页,发生了什么?

1、DNS解析
2、HTTP三次握手建立TCP
3、浏览器重绘与回流

先说第一个,DNS解析:

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址(IPV4)的工作。DNS就是这样的一位“翻译官”,在TCP/IP协议的第四层,基于UDP,所以也没有TCP三次握手,SNMP也一样。
还是拿域名www.baidu.com举例子,一个域名“www.baidu.com.”由4部分组成(最后的.可以去掉):
第1部分“.”代表根服务器、
第2部分“.com.”代表顶级域名服务器、比如edu教育机构,com商业组织,gov政府机构
第3部分“baidu.com.”代表域名所有者服务器。
第4部分“www.baidu.com.”代表主机域名。

域名解析

域名体系是一个分级体系,最高级是根服务器,最低级是本地服务器(如114.114.114.114),域名查询需要逐级递归查询。

所以是,用户在浏览器输入URL地址,请求,会先在本地DNS发送查询请求,本地地址向根服务器查询.com的地址,再向.com服务器查询baidu.com的地址,再向baidu.com服务器查询www.baidu.com的地址,再返回给浏览器www.baidu.com的地址,其中包含有该主机名对应的IP地址,一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接这样浏览器就可以打开百度了。

深入域名解析

这里就借鉴百度的了,百度的讲的比我详细多了。
查找域名对应的 IP 地址的具体过程
1、浏览器搜索自己的 DNS 缓存(浏览器维护一张域名与 IP 地址的对应表);如果没有命中,进入下一步;
2、搜索操作系统中的 DNS 缓存;如果没有命中,进入下一步;
3、搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);如果没有命中,进入下一步;

操作系统将域名发送至 LDNS (本地区域名服务器),LDNS 查询自己的 DNS 缓存(一般命中率在 80% 左右),查找成功则返回结果,失败则发起一个迭代 DNS 解析请求:
LDNS向 Root Name Server(根域名服务器,如com、net、im 等的顶级域名服务器的地址)发起请求,此处,Root Name Server 返回 im 域的顶级域名服务器的地址;
LDNS 向 im 域的顶级域名服务器发起请求,返回 juejin.im 域名服务器地址;
LDNS 向 juejin.im 域名服务器发起请求,得到 juejin.im 的 IP 地址;
LDNS 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来;操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来。

DNS Prefetch

即 DNS 预获取,是前端优化的一部分。一般来说,在前端优化中与 DNS 有关的有两点:
减少 DNS 的请求次数
进行 DNS 预获取
典型的一次 DNS 解析需要耗费 20-120 毫秒,减少DNS解析时间和次数是个很好的优化方式。DNS Prefetching 是让具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入是串行的网络操作,所以这个方式能减少用户的等待时间,提升用户体验。

你可能感兴趣的:(经典前端面试题:进入一个网页,发生了什么?第一章DNS解析)