202实习面试常见知识点梳理1-02-25

实习面试常见知识点梳理

实际上在实习生阶段已经整理了很多被问到的问题以及部分问题写了一下自己的解答(还有很大一部分坑没填呢),秋招阶段感觉其实万变不离其宗,问来问去都是那么几个问题,所以就没做记录了。在此依据记忆在几个主要的方向写出几个最常见的问题吧。

计算机网络

简述从输入网址到浏览器显示的过程

当我们将网址输入到浏览器后,第一件事就是解析URL得到域名,通过DNS协议得到改域名IP地址,接着通过IP地址与服务器通过TCP三次握手建立链接,然后构建HTTP请求,将HTTP的传输工作交给操作系统的协议栈;发送请求成功后,浏览器会从服务器那里得到HTML文件和资源文件,接着进行页面渲染,最后就是我们看到的模样。
这个过程中重要的几个知识点是DNS解析、HTTP请求、TCP/IP协议栈、页面渲染等,只用挑一两个着重介绍,其它略过。当然也可以继续扩展,HTTP和HTTPS的区别和联系,还可以说到对称加密和非对称加密,还可以说网络安全等,主要目的是让整个面试过程跟着你的技术栈走,而不是被面试官带到你不会的地方。
DNS解析:
浏览器拿到URL后,首先会对URL进行解析,将域名与实际文件路径分离,然后通过DNS协议得到该域名的IP地址。
首先浏览器会查询浏览器缓存,看有没有这个域名的IP地址,如果没有才会进一步访问本机缓存,若本机缓存也没有的话才会发起DNS请求。
DNS的服务器是一个树状结构,对于域名来说是倒着解析的,根节点是根DNS服务器,他的子节点是.com、.cn这种顶级域名服务器,然后进一步向下解析。
以baidu.com为例,电脑会先对根DNS服务器发起请求,根服务器IP地址一般每个电脑上都有,我们一般设置为8.8.8.8或114.114.114.114,电脑在访问根域名服务器后会得到.com域服务器的IP地址,然后访问.com域服务器得到baidu.com的IP地址。
HTTP请求
在解析URL时,我们可以得到域名、网站资源路径、端口号和参数,通过DNS请求得到域名IP地址后,浏览器就可以构建并发送HTTP或HTTPS请求,HTTPS就是在HTTP协议上加了一个TLS协议进行数据加密;
HTTP请求有很多种,但对资源的操作离不开增删查改,也就对应着POST、DELETE、GET、PUT。最常用的是GET和POST,其区别是GET请求的参数在URL中,而POST请求的参数在body中。很少用DELETE和PUT,这几个请求只是语义上不同,是为了让你的应用程序能够清晰的进行通讯,对HTTP本身来讲没什么区别,都能完成相同的功能。
以GET为例,当浏览器发送HTTP请求时,同样也不是直接发送了,先去查看浏览器缓存,分为强缓存和协商缓存,浏览器发起HTTP请求会首先根据HTTP头信息判断是否有强缓存,若强缓存命中且未过期,就不会向服务器发送请求了;如果强缓存没命中,浏览器就会发送HTTP请求,这个请求的header头会带有浏览器最后一次请求该资源的时间和资源校验码(使用资源修改时间、资源大小等信息生成),服务器收到请求后会判断协商缓存是否过期,如果过期就会返回新的资源,未过期就会返回304状态码,表示该资源位更新,可以继续使用。
TCP->网络连接层
HTTP发出请求后会将数据包交给下层协议栈处理,在传输层和运输层会被分别加上TCP头和IP头,并且被发送出去,沿路的网关会收到这个数据包并进行识别和转发,直到该数据包被服务器收到,并按相同的流程返回数据包。
HTTPS
由于HTTP是明文传播,会有窃听篡改冒充的可能,所以HTTPS在HTTP基础上加了SSL层,通过加密的方式保证数据安全。
SSL通过加密防止窃听,通过签名防止篡改,通过证书防止冒充。
HTTPS协议在客户端和服务器进行通信之前,会进行密钥协商,通过一轮非对称加密,一般是RSA加密传递后续通讯用的对称加密密钥,由于非对称加密太慢,所以后续通讯用对称加密。在密钥协商过程中,服务器会将证书发给客户端,客户端到CA机构验证证书的摘要的合法性,从而防止中间人攻击。
中间人攻击:SSL劫持攻击、SSL剥离攻击、针对SSL算法的攻击;
SSL 劫持攻击即 SSL 证书欺骗攻击,攻击者为了获得HTTPS传输的明文数据,需要先将自己接入到客户端和目标网站之间;在传输过程中伪造服务器的证书,将服务器的公钥替换成自己的公钥,这样中间人就可以解密客户端和服务端的数据传输内容。可以通过在网站前端加入证书校验来预防 SSL 劫持攻击。
SSL 剥离攻击,即将 HTTPS 连接降级到 HTTP 连接。假如客户端直接访问 HTTPS 的 URL,攻击者是没办法直接进行降级的,该攻击方式主要是利用用户并不会每次都直接在浏览器上输入 https 来访问网站或者有些网站并非全网 HTTPS,中间人攻击者在劫持了客户端与服务端的 HTTP 会话后,将 HTTP 页面里面所有的 https:// 超链接都换成 http:// ,用户在点击相应的链接时,是使用 HTTP 协议来进行访问。可以通过在网站前端检查 URL 是否被篡改来预防 SSL 剥离攻击。
针对 SSL 算法的攻击:低版本的 SSL 协议是存在漏洞的,这些漏洞可能会被公共者利用,及时升级服务端的 SSL 配置可以预防针对 SSL 算法的攻击。

TCP三次握手

在这里插入图片描述
最开始客户端和服务器都是closed状态,主动打开的是客户端。
1.TCP服务器先创建传输控制块TCP,时刻准备接受客户端的连接请求,此时服务器进入listen状态。
2.TCP客户进程也是先创建传输控制块TCP,然后向服务器发送请求报文,报文首部中同步位SYN=1, 同时选择一个初始序列seq = x,此时客户端进入SYN-SENT(同步已发送)状态。TCP规定,SYN=1,的报文段不能携带数据,但要消耗一个序列号。
3.TCP服务器收到请求报文后,如果同意连接,则发送确认报文。确认报文首部中确认序列号标志ACK=1,同步位SYN=1,确认号ack=x+1,同时自己也选择一个初始序列seq=y,此时服务器进入SYN-RCVD状态(同步收到)。
4.TCP客户进程收到确认报文后,还要向服务器发出确认报文。确认报文首部中确认序号标志位ACK=1,确认号ack=y+1,自己序列号seq=x+1;此时,TCP建立连接,客户端进入ESTABLISHED状态。TCP规定ACK报文段可以携带数据,如果不携带数据则不消耗序号。
5.服务器收到报文后,服务器进入ESTABLISHED状态。此后双方就可以通信了。

为什么要三次握手,而不是二次或四次呢

三次握手防止失效的连接请求被服务器接受。假设为两次握手,客户端发送一个连接请求,由于网络原因,迟迟未到服务器,客户端没收到确认报文,认为服务器没收到,就又发送了一个连接请求,与服务器建立连接,传输完成后,与服务器断开连接。假设之前滞留的那个请求报文又到了服务器,就会让服务器与客户端再次建立连接,这是服务器就一直等待客户端发送数据,造成了资源的浪费。如果是三次握手,就算之前滞留的请求报文到了服务器,服务器接受了那个失效的报文并向客户端发送的确认报文,而客户端不会再次发送确认报文,由于服务器收不到确认报文,也就不会再次建立连接了。
两次握手智能保证单向链路可以通信,理论上,双向链路通信需要四次,但服务器收到确认报文和发送同步报文可以合为一次握手,让服务器SYN和ACK数据包合在一起,所以实际上只需要三次握手即可。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Justdoforever/article/details/114088510