写这篇文章意在自己作为笔记,方便自己理解。没有参考过多资料,通过其他博客和一些自己的理解整理而来。
浏览器
浏览器作为一个客户端,它的主要作用就是展示可访问的资源。不管这些资源是本地资源还是网络请求获取到的资源。
浏览器的构成
- 用户界面:包括地址栏、后退/前进按钮、书签目录、刷新按钮等
- 浏览器引擎:用来查询和操作渲染引擎的接口
- 渲染引擎:用来处理资源内容,并显示处理结果,也就是我们所说的内核
- 网络:完成网络的调用
- UI后端:用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用用户的操作系统接口
- JS解释器:用来解释并执行JS脚本
- 数据存储:占用一定的硬盘实现数据的存储
页面的渲染过程
- 地址栏输入地址触发网络请求,获取资源文件
- HTML解析器解析HTML文件构建成DOM树
- 遇到CSS通过CSS解析器解析构建成CSSOM树
- 遇到JS通过JS解析器解析
- DOM Tree和CSSOM Tree构建呈现树
- 呈现书根据结构样式确定节点的位置(布局或者回流)---回流
- 确定好位置以后,根据外观样式绘制---重绘
- 通过UI后台和用户界面组件把内容显示到浏览器主窗口
输入网址后DNS的解析过程
DNS的缓存从离浏览器的距离排序依次是:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名缓存、顶级域名缓存、主域名服务器缓存
- 输入网络地址,发起请求,浏览器解析域名,先在本地硬盘中的hosts文件查找是否有对应的ip地址
- 如果在本地硬盘中没有找到相应的ip,浏览器发送一个DNS请求到本地DNS服务器,本地DNS服务器会查询它的缓存记录,缓存中有记录则直接返回结果;如果没有,本地DNS服务器向DNS根服务器进行查询
- DNS根服务器如果没有具体的域名和ip地址对应的关系,会告诉本地DNS服务器向域服务器去查找并给出域服务器地址
- 本地DNS服务器向顶级域名服务器(如:.com域名)发出请求,顶级域名服务器收到请求后,将本地服务发送的域名服务器地址告诉本地DNS服务器
- 本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名有对应的关系ip地址
TCP/IP连接的三次握手和四次挥手
建立连接的三次握手
- 客户端发送一个带有SYN标志的数据包给服务端(请求报文)
- 服务端接收到请求数据包后回传一个带有SYN/ACK标志的数据包以示传达确认信息(应答-请求报文)
- 最后客户端回传一个带有ACK标志的数据包,表示握手结束,连接成功(应答报文)
关闭连接的四次挥手
- 客户端发送关闭连接请求(FIN)
- 服务端接收到请求后回传一个ACK,确认请求收到
- 服务端确认无数据可传输,发送确认关闭的FIN请求到客户端
- 客户端回传一个ACK,确认关闭连接