一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情
前言
虽然这是老生常谈的知识点,但是这篇文章是我个人的理解,也算对这个知识点的巩固吧,是可能有些方面不到位,望见谅哈~~
大纲
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务端接收请求并返回数据
- 浏览器渲染页面
- 关闭TCP连接
DNS解析
假设我们输入的是 www.hao123.com,然而这个网站不是真实的 IP 地址,它只是一个 域名,需要解析成二进制,解析的过程可以参考下图。
输入 m.xyz.com -> 本地域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权限域名服务器 ,一层一层往上找,如果找不到则返回 无法访问此网站 找到之后则进行下一步。
TCP连接
TCP是一种面向可靠的传输,过程有 三次握手,四次挥手。
三次握手
第一次握手:
客户端发送syn包到服务器,等待服务器确认(客户端向服务端请求建立连接)。
第二次握手:
服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN,即SYN+ACK包,此时服务器进入SYN_RECV状态(服务端答应请求并向客户端发包)。
第三次握手:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手(客户端收到确认后,通知服务端,我已收到,可以开始传输数据啦)。
为什么要三次握手,两次行不行?
如果只有一次握手,Client不能确定与Server的单向连接,更加不能确定Server与Client的单向连接; 如果只有两次握手,Client确定与Server的单向连接,但是Server不能确定与Client的单向连接; 只有三次握手,Client与Server才能相互确认双向连接,实现双工数据传输。
发送HTTP请求
HTTP Request 对象,分别由 请求头、请求报文、响应报文组成。
发送的是HTTP还是HTTPS 呢?
若是HTTPS(HTTP + SSL) 则会做加密处理。
服务端接收请求并返回数据
对TCP连接进行处理,按照格式封装成 HTTP Response 对象,返回三个东西:
- 状态码
- 响应抱头
- 响应报文
浏览器渲染页面
- 浏览器发送请求下载了所有的
HTML资源,然后解析HTML, 生成DOM树,解析CSS,生成CSSOM树。 - 将
DOM树和CSSOM树结合,生成 渲染树(Render Tree) 。 - 根据生成的渲染树,进行 回流(Layout) ,得到节点的几何信息(位置,大小)。
- 根据 渲染树 以及 回流 得到的几何信息,重绘(Painting) 得到节点的绝对像素。
- 将像素发送给GPU,展示(Dsiplay) 在页面上 。
关闭TCP连接
四次挥手
第一次挥手:
客户端告诉服务端,我们要关闭连接了哟
客户端发送一个FIN,用来关闭客户端到服务器的数据传送。
第二次握手:
服务端告诉客户端,好的,我们可以断开了
服务器收到FIN包后,发送一个ACK给对方并且带上自己的序列号seq。
第三次握手:
服务端告诉客户端,我们的数据发送完毕咯,我们要分开了,5555
服务器发送一个FIN,用来关闭服务器到客户端的数据传送。
第四次握手:
客户端告诉服务端,好的,那我们可以关闭连接了
客户端收到FIN后,发送一个ACK给被服务端。
总结
以上就是本次分享的全部内容~~
如果觉得文章写得不错,对你有所启发的,请不要吝啬 点个 赞 和 关注 并在 评论区 留下你宝贵的意见哦~~😃