从输入URL到页面展示的详细过程(面试必考)

这是常考点,仔细理理发现里面涉及到的知识点还是非常的多。
这个问题在我秋招已经遇到过无数次了。
下面我就来个大概的总结。

1)首先在地址栏输入一个url,查找一下有没有历史记录,有没有缓存,如果有就展示页面。
2)DNS解析。首先浏览器会查看本地硬盘的hosts文件,看看其中有没有和这个域名对应的规则,如果有就直接使用Hosts文件里面的Ip地址。如果没有找到对应的IP地址,浏览器会发出一个DNS请求到本地DNS服务器。本地DNS服务器会首先查询缓存记录,如果有就直接返回结果,此过程是递归查询,如果没有,本地服务器向DNS服务器进行查询,根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到昱服务器上去继续查询,并给出服务器地址,这里采用的是迭代查询。最后,本地服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器就把IP地址返回给用户,同时进行缓存。
3)建立TCP连接(三次握手)。首先,客户端将SYN设置为1,随机产生一个seq=j的数据包发送到服务器,客户端A进入SYN-SENT状态,等待服务器端B的确认;其次,服务端B收到数据包后给客户端一个响应,此时SYN=1,ACK=1,随机产生一个seq=k,ack=j+1;并将该数据包发送给客户端A确认连接,服务器进入SYN_RCVD状态。最后,客户端A收到确认后,客户端A给服务器端一个确认,此时ACK=1,seq = j+1,ack = k+1,服务端和客户端进入ESTABLISHED状态。然后就可以开始传输数据了。
常考:三次握手是为了防止已失效的连接请求报文端突然又传送到服务器端,因而产生错误。
4)客户端发送HTTP请求。(包括请求头)
5)服务器处理请求。后端从固定的端口接收到TCP报文开始,它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。客户端不是直接通过HTTP协议访问某网站应用服务器,而是先请求到Nginx,Nginx再请求应用服务器,然后将结果返回给客户端,这里Nginx的作用是反向代理服务器。
6)服务器返回HTTP响应。(状态行,响应头,响应正文)
7)浏览器展示HTML。解析html以构建dom树(自上而下加载,并在加载过程中进行解析渲染,在解析过程中,如果遇到请求外部资源时,如图片、外链的CSS、iconfont等,请求过程是异步的,并不会影响html文档进行加载。) -> 构建render树 -> 布局render树 -> 绘制render树.在这个过程中可能会引起重流和重绘,因为他们会消耗性能,所以我们要减少reflow和repain。在加载过程中遇到js时,会挂起渲染的线程,不仅要等文档中js文件加载完毕,还要等待解析完毕,才可以恢复HTML文档的渲染线程。所以我们要尽量把js放到尾部。

8)断开TCP连接(四次挥手)。
现在A和B都处于ESTABLISHED状态,A应用进程先向TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,此时报文首部FIN=1,其序号seq=u,这时A处于FIN_WAIT-1状态,等待B确认。
B收到释放连接报文段后即发出确认,确认号ack=u+1,而这个报文段的字号是v,此时B进入CLOSE_WAIT状态。此时A到B的连接就释放了,TCP处于半关闭状态,即A已经没有数据要发送了,但若B要发送数据,A仍要接收,说明B到A没有关闭。
A收到来自B的确认后,就进入FIN_wait-2状态,等待B发出的连接释放报文段。若B已经没有向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的释放报文段FIN=1,此时B进入LAST_ACK状态,等待A确认。
A在收到B的释放报文段后,必须对此发出确认。确认报文段中ACK=1,此时A进入到TIME-WAIT状态,此时TCP连接还没有释放掉,在经过2MSL(最长报文段寿命)后,A才进入closed。
可能会问:为什么A在TIME-WAIT状态必须等待2MSL的时间呢?
(1)为了保证A发送的最后一个ACK报文段能够到达B。
(2)为了防止已失效的请求报文段出现在本连接中。

NOTE:B结束TCP连接的时间要比A早一些。B只要收到A的确认,就进入closed状态,同样,B在撤销相应的传输控制块TCB后,就结束了这次TCP连接。

参考
https://blog.youkuaiyun.com/wlk2064819994/article/details/79756669

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值