参考:
在浏览器中输入URL并按下回车后会发生什么?
DNS域名详细解析过程
1.URL解析拿到域名
当用户输入URL并回车后,浏览器对拿到的URL进行识别,抽取出域名字段,比如https://www.baidu.com,它的域名就是www.baidu.com
2.DNS域名解析
将域名转换为IP地址。
可以在浏览器中输入域名得出网页内容,也可以输入对应的IP地址得到网页内容。虽然得出的内容是一样的,但调用的过程不一样,输入IP地址是直接从主机上调用内容,输入域名是通过对应的域名解析服务器指向对应的主机IP地址,在从主机中调用网址的内容。
(1)在浏览器输入域名后,操作系统会先检查浏览器缓存中有没有这个域名对应的解析过的IP地址,如果有,解析过程结束。
缓存有时间限制(太长:域名IP映射发生变化,不能及时获取;太短:每次访问网站都有重新解析域名)
(2)如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有对应的解析结果。
即自己本地的hosts文件是否有这个域名-ip映射,如果有映射就调用这个IP地址映射,完成域名解析
(3)如果本地hosts文件也没有,就找本地DNS解析器缓存。
每个完整的内网通常都会配置本地DNS服务器,例如用户是在学校或工作单位接入互联网,那么用户的本地DNS服务器肯定在学校或工作单位里面。它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。大约80%的域名解析到这里就结束了,后续的DNS迭代和递归也是由本地DNS服务器负责。
windows配置本地DNS服务器:控制面板-》网络和共享中心-》更改适配器设置-》选中目标适配器右键选择属性-》Internet协议版本4(TCP/IPv4)-》配置DNS地址。
Linux在这设置:vim /etc/resolv.conf
如:nameserver 114.114.114.114
(4)如果本地DNS服务器没有,就找根DNS服务器请求解析
(5)根DNS服务器返回给本地DNS域名服务器一个顶级DNS服务器地址,它是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。
(6)本地DNS服务器再向上一步获得的顶级DNS服务器发送解析请求。
(7)本地DNS服务器询问顶级DNS,接受请求的顶级DNS服务器查找并返回此域名对应的Name Server域名服务器的地址。
这个Name Server服务器就是我要访问的网站域名提供商的服务器(权威DNS服务器),其实该域名的解析任务就是由域名提供商的服务器来完成
比如我要访问www.baidu.com,而这个域名是从A公司注册获得的,那么A公司上的服务器就会有www.baidu.com的相关信息。
(8)本地DNS服务器询问权威DNS,Name Server服务器会查询存储的域名和IP的映射关系表,再把查询出来的域名和IP地址等等信息,连同一个TTL值返回给本地DNS服务器。
(9)返回该域名对应的IP和TTL值,本地DNS服务器会缓存这个域名和IP的对应关系,缓存时间由TTL值控制。
(10)把解析的结果返回给本地电脑(客户端),本地电脑根据TTL值缓存在本地系统缓存中,域名解析过程结束在实际的DNS解析过程中,可能还不止这10步,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能会影响域名解析过程。
3.建立TCP三次握手连接
第一次握手:客户端向服务器端发送请求(SYN=1) 等待服务器响应;
第二次握手:服务器收到请求并确认,回复一个指令(SYN=1,ACK=1);
第三次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。
4.发生HTTP请求
5.服务器处理相关请求
6.返回响应结果
7.关闭TCP连接,四次挥手
8.HTML解析与页面渲染
1.浏览器获取到 html 资源后开始解析 html (dom tree)
2.解析到 css 后根据 css 生成 css 规则树 (style rules)
3.在 dom 树和 css 规则树都生成完后,通过 dom 树和 css 规则树生成渲染树( render tree )
4.渲染树构建完成后,浏览器开始计算元素的大小和位置( layout )
5.根据计算好的节点信息将内容绘制到屏幕上( painting )