面试题:输入网址到网页显示的过程是什么

1 篇文章 0 订阅

输入网址到网页显示的过程是什么?

1.URL解析
2.缓存查找
3.DNS解析
4.TCP连接,三次握手
5.http请求
6.服务器响应,浏览器解析。
7.浏览器渲染
8.TCP连接断开,4次挥手

从用户输入一个网址到网页最终展现,中间的大致流程如下:

(1)首先浏览器会对 URL 进行解析,分析所需要使用的传输协议和请求的资源的路径。如果URL的协议或者主机名不合法,将会把地址栏中输入的内容传递给搜索引擎。如果没有问题,浏览器会检查 URL 中是否出现了非法字符,如果存在非法字符,则对非法字符进行转义后再进行下一过程。

(2)浏览器会进行缓存查找。判断请求资源是否在缓存里,如果请在并且没有失效,那么就直接使用,否则向服务器发起新的请求。

(3)进行DNS解析,获取URL中域名的 IP 地址,首先会判断本地是否有该域名的 IP 地址的缓存,如果有则使用,如果没有本地 DNS 服务器根域名服务器发起请求,获得负责的顶级域名服务器的地址后,再向顶级域名服务器请求,然后获得负责的权威域名服务器的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后,本地 DNS 服务器再将这个 IP 地址返回给请求的用户。用户向本地DNS服务器发起请求属于递归请求(本地服务器会帮主机进行DNS查询,这一步对主机是透明的。因此是属于递归),本地DNS服务器向各级域名服务器发起请求属于迭代请求。(迭代的查询IP)

img

(4)我们通过DNS解析获取到IP地址后, 需要发起TCP连接请求。 TCP 建立连接需要经历三次握手的过程,首先客户端向服务器发送一个 SYN 连接请求报文段和一个随机序号,服务端接收到请求后向客户端发送一个 SYN ACK报文段和一个随机序号,确认连接请求。客户端接收服务器的确认应答后,进入连接建立的状态,同时向服务器也发送一个 ACK 确认报文段,服务器端接收到确认后,也进入连接建立状态,此时双方的连接就建立起来了。

在TCP报文的报头中,有几个标志字段:
1、 SYN:同步连接序号,TCP SYN报文就是把这个标志设置为1,来请求建立连接;
2、 ACK:请求/应答状态。0为请求,1为应答;
3、 FIN:结束连线。如果FIN为0是结束连线请求,FIN为1表示结束连线;

三次握手.png

(5)握手成功后, 浏览器就可以向服务器发送http请求了。 发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。HTTP请求报文是由三部分组成: 请求行,请求报头和请求正文。

(6)在服务端会监听浏览器端发送的http请求,当浏览器的请求发出后,服务端就会接受该请求,并对相应的信息进行处理,将处理的结果响应给浏览器端。浏览器接收到响应后,开始对 html 文件进行解析,开始页面的渲染过程。

(7)浏览器首先会根据 html 文件构建 DOM 树,根据解析到的 css 文件构建 CSSOM 树。当 DOM 树和 CSSOM 树建立好后,根据它们来构建渲染树。渲染树构建好后,会根据渲染树来进行布局,计算每个节点的几何位置。布局完成后,进入绘制阶段,将各个节点绘制到屏幕上。这个时候整个页面就显示出来了。

(8)最后一步是 断开 TCP连接,需要经历四次挥手过程。

4次挥手大体的过程如下:

  1. 客户端向服务器发送一个FIN连接释放报文段和一个随机序号,通知服务器现在需要断开(第一次挥手)
  2. 服务器接到要断开的请求之后,向客户端发送一个ACK确认报文段和一个随机序号,服务端进入CLOSE_WAIT(关闭等待)状态(第二次挥手)
  3. 如果服务端也想断开连接了,向客户端发送一个FIN连接释放报文段和一个随机序号(第三次挥手)
  4. 客户端接收到服务器消息后,向服务器端发送一个ACK确认报文段和一个随机序号,服务器收到消息后,就处于关闭连接了,处于 CLOSED 状态(第四次挥手)

image.png

一般来说, ACK 报文的序列号值为对方序列号值+1

参考资料:

通俗易懂了解TCP三次握手

三次握手和四次挥手

如何向学妹解释在地址栏中输入网址后发生了什么?

扩展问题

Q:说一说三次握手
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。

Q:为什么需要三次握手,两次不行吗?
弄清这个问题,我们需要先弄明白三次握手的目的是什么,能不能只用两次握手来达到同样的目的。

第一次握手:客户端发送网络包,服务端收到了。
这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。
这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手:客户端发包,服务端收到了。
这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

因此,需要三次握手才能确认双方的接收与发送能力是否正常。


Q:挥手为什么要4次?
关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,"你发的FIN报文我收到了"。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值