面试篇:前端求职中必须掌握的网络知识点
Posted WF帆少
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试篇:前端求职中必须掌握的网络知识点相关的知识,希望对你有一定的参考价值。
这篇文章是作者在求职过程所总结的前端网络相关面试题及其答案。
浏览器地址栏输入url,回车发生什么?
这是一个很经典的问题,我在过去的求职过程中,几乎每一家公司的面试都会问到这个问题,我这里也是利用这个问题来引出其他知识点。
浏览器地址栏输入url之后,按下回车,一共会触发以下5个过程。分别是查找HTTP缓存、DNS解析域名、TCP三次握手建立连接、解析和渲染html页面、TCP四次挥手断开连接。
然后呢,面试官可能会对每一个过程展开来对你进行提问。
查找HTTP缓存过程
浏览器先根据这个资源的http头信息来判断是否命中强缓存。如果命中则直接加载缓存中的资源,并不会将请求发送到服务器。
如果未命中强缓存,则浏览器会将资源加载请求发送到服务器。服务器来判断是否命中协商缓存。如果命中,则服务器并不会返回资源信息,浏览器继续从缓存加载资源。
如果未命中协商缓存,则服务器会将完整的资源返回给浏览器,浏览器加载新资源,并更新缓存。
然后这里,可以围绕着强缓存和协商缓存展开提问。后续篇会补上这一块。
DNS解析过程
先去查看浏览器缓存是否能解析该域名。如果不能,则去查看本机的host文件是否能解析。如果不能,向路由器查看是否能解析。如果不能,则向逐层地向上一层路由器查看是否能解析,直到顶层路由器。如果不能,则向DNS服务器查看是否能解析。如果不能,则逐层向上一层DNS服务器查看是否能解析,直到全局DNS服务器,全局DNS服务器一定会将域名对应的ip逐层地返回,并且同时会在每个节点进行缓存。
TCP三次握手的原理
1.客户端向服务器发送连接请求报文段,报文段中同步位SYN=1,同时选择一个初始化序号seq=x,此时客户端进入SYN-SEND(同步位已发送)
2.服务器收到客户端的请求报文段后,如果确认要建立连接,则向客户端发送一个确认报文段,报文段中SYN位和ACK位都置1,确认号ack=x+1,同时选择一个初始化序号seq=y,此时服务器进入SYN-RECE(同步位已接收)
3.客户端收到服务器的确认报文段,它会向服务器发送一个确认报文段。报文段中ACK位置1,确认号ack=y+1,序号seq=x+1,此时客户端进去ESTABLISHED(已建立连接)
4.服务器收到客户端的确认报文段之后,它会进入ESTABLISHED(已建立连接)
这里可以继续问客户端为什么最后还要发送一次确认?主要是因为为了防止已失效的连接请求报文段突然又发送给服务器而引发错误。
解析和渲染HTML页面的过程
浏览器采用流式布局模型,浏览器会把 HTML 解析成 DOM,把 CSS 解析成 CSSOM,DOM 和 CSSOM 合并就 产生了渲染树(Render Tree)。 有了 RenderTree,我们就知道了所有节点的样式,然后计算他们在页面上的大 小和位置,最后把节点绘制到页面上。遇到脚本资源会暂停解析,直到脚本加载并执行后才会开始解析。
然后这里,可以围绕着异步JS展开提问。后续篇会补上这一块。
TCP四次挥手的原理
0.当前客户端和服务器处在ESTABLISHED(连接已建立)状态。
1.客户端向服务器发送链接释放报文段,报文段中FIN = 1,序号 seq = u (u一般是客户端发送过的数据的最后一个字节序号 + 1)。此时客户端进入FIN-WAIT-1(终止等待1)状态。
2.服务器收到客户端的请求后,会向客户端发送确认报文段,报文段中ACK = 1,确认号ack = u + 1, 序号是v(v一般服务器发送过的数据的最后一个字节序号 + 1),此时服务器进入CLOSE-WAIT(关闭等待)状态。客户端收到服务器的确认报文段之后,进入FIN-WAIT-2(终止等待)状态
3.服务器如果没有要想客户端发送的数据,便发起连接释放报文段,报文段中FIN = 1, ACK = 1, 确认号 ack = u + 1,序号是w,此时服务器进入LAST-ACK(最后确认)状态。
4.客户端收到服务器的请求后,向服务器发送确认报文段,报文段中ACK = 1, 确认号 ack = w + 1, 序号seq = u+ 1。此时客户端进入TIME-WAIT(时间等待状态)。需要等待2MSL之后才能进入CLOSED(关闭)状态。服务器收到客户端的确认请求后,进入CLOASED(关闭)状态
这里可以提问为什么客户端在TIME-WAIT状态必须等待2MSL的时间呢?
为什么客户端在TIME-WAIT状态必须等待2MSL的时间呢
为了保证客户端发送的最后一个ACK确认报文段能够到达服务器。
这个ACK报文段有可能丢失,因而使处于LAST-ACK状态的服务器接收不到客户端发送的ACK报文段。服务器会超时重传这个FIN+ACK报文段,而客户端就能在2MSL时间内收到这个重传的FIN + ACK报文段。接着客户端重传一次ACK报文段,重新启动2MSL计时器。最后客户端和服务器都进入了CLOSED状态。
如果客户端没有等待2MSL而是在发送完ACK报文段之后就是释放连接,那么就无法收到服务器重传的FIN + ACK报文段,因此不会再发送ACK确认报文段。导致了服务器都不能进入CLOSED状态
感谢
感谢大家的关注,想了解更多内容的可以关注新运营的公众号,以后发布文章同时也会同步到公众号中。
以上是关于面试篇:前端求职中必须掌握的网络知识点的主要内容,如果未能解决你的问题,请参考以下文章