计网相关面试题
1.http缓存的方式
缓存是为了重复使用而被存储的,可以减少浏览器和服务器之间通信的次数、降低网络延迟、加速页面加载、提高用户体验性等。不但能使网页打开速度更快,还能减少服务器的压力。
浏览器缓存策略:
强缓存:cache-control/Expires
-
服务器通知浏览器一个缓存时间,在缓存时间内,下次请求直接从本地缓存中读取资源而不发起请求。
-
cache-control是相对时间(http1.1),expires是绝对时间(http1)
-
cache-control优先级高于expires
协商缓存:Etag/Last-modified
如果强制缓存未命中,但协商缓存可用,则会向服务器发送条件请求,请求头中设置了If-Modified-Since 或者 If-None-Match的值, 服务端根据这两个值,去验证是否命中协商缓存。如果命中了协商缓存,会返回 304 状态,直接使用浏览器缓存。
-
Last-Modified / If-Modified-since表示的是服务器的资源最后一次修改的时间;
-
Etag / If-None-match表示的是服务器资源的唯一标识,只要资源变化,Etag就会重新生成;
2.http和https区别
-
安全性:这是HTTP和HTTPS最本质的区别。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等,而HTTPS使用SSL/TLS协议对数据进行加密传输,使得攻击者无法截获并解析数据包中的内容。,安全性大大提高。
-
连接方式:HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。这就说明它们使用的协议是不一样的,前者是超文本传输协议,而后者则是SSL加HTTP的协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
-
响应速度:由于HTTPS协议需要进行加密和解密等操作,因此它的响应速度相对于HTTP来说会有所延迟。然而,随着硬件性能和加密算法的改进,这种差异已经变得越来越小。
-
费用:使用HTTPS协议需要购买SSL证书,并支付一定的费用给证书颁发机构(CA)。而HTTP协议则不需要任何费用。但是,考虑到HTTPS带来的安全性和用户体验的提升,这种费用通常被认为是值得的。
3.tcp和udp的区别
-
TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
-
TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
-
TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
-
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
-
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
-
TCP首部开销20字节;UDP的首部开销小,只有8个字节
-
TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
4.http常见响应码
-
200:请求成功
-
301:永久重定向
-
302:临时重定向
-
304:资源重复请求
-
400:请求格式错误
-
403:服务器拒绝访问
-
404:请求资源不存在
-
500:服务器内部错误
-
501:服务器不支持请求的功能
5.OSI七层模型
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
tcp/ip模型:
网络接口层 、网际层、传输层、应用层
输入url到页面展示出来用到的协议
流程:
输入URL之后,浏览器需要将URL解析为IP地址,解析需要用到DNS协议。
DNS协议是基于UDP的,需要用到UDP协议。
得到iP地址之后,浏览器需要与服务器建立HTTP连接,需要用到HTTP协议。
HTTP生成GET请求报文,传给TCP处理,需要用到TCP协议(如果用的是HTTPS协议的话,传之前会先对报文加密)。
TCP层可能会对HTTP数据包分片,分片是根据路径最大传输单元MTU和最大报文段长度MSS的。然后TCP数据包发送给IP层,需要用到IP协议。
IP层经过路由选择,一跳一跳发送到目的地址。一个网段内的寻址通过以太网协议实现(也可以是其他物理层协议,如PPP,SLIP),以太网协议需要知道目的IP地址的MAC地址,需要ARP协议。
总结: 应用层:DNS,HTTP,HTTPS 传输层:TCP,UDP 网络层:IP,ARP
输入url之后发生了什么
-
url解析:判断输入的是url还是搜索内容
-
查找缓存:查找浏览器缓存,有就返回页面,没有就发起请求
-
DNS域名解析 (DNS协议、UDP协议)
-
TCP三次握手建立连接 (TCP协议)
-
发送http请求 (http协议)(tcp数据包发送给IP层:ip协议)(获取IP地址的MAC地址:ARP协议)
-
服务器响应并返回结果
-
TCP四次挥手断开连接
-
浏览器渲染
-
js引擎解析
6.TCP三次握手、四次挥手
tcp三次握手:
-
第一次握手:客户端向服务器发送syn数据包,告诉服务器要发请求了,客户端进入syn_sent状态,等待服务器响应
-
第二次握手:服务器接收syn包,发送syn+ack包,服务器进入syn_rcvd状态,表示收到消息,同意建立连接
-
第三次握手:客户端收到syn+ack包后,发送ack包,进入establish状态;当服务器收到ack包后,也进入establish状态,自此建立tcp连接
为什么不能是两次握手?
如果第一次握手因为网络阻塞问题,导致服务器在很晚后才收到syn包,这个包已经失效,但服务器会以为是新的请求,于是发送syn+ack包给客户端,虽然客户端没有跟服务器建立连接,但是服务器误以为连接已建立,导致资源浪费
tcp四次挥手:
-
第一次挥手:客户端向服务器发送fin包,告诉服务器准备关闭连接,客户端进入fin_wait_1状态,此时客户端只能接收数据,不能发送数据
-
第二次挥手:服务器收到fin包,向客户端发送ack包,告诉客户端收到消息,准备关闭连接,服务器进入close_wait状态,此时服务器只能发送数据,不能接收数据
-
客户端收到ack包后进入fin_wait_2状态,等待服务器发送fin包
-
第三次挥手:服务器向客户端发送fin包,表示数据发送完毕,准备关闭连接,服务器进入last_ack状态,不能接收也不能发送数据
-
第四次挥手:客户端收到fin包后,发送ack包表示确认关闭,服务器收到后进入close状态,客户端等待一段时间,确保服务器收到ack包后,也进入close状态,释放网络资源
7.介绍下 http1.0
、http1.1
、http2.0
协议的区别?
http1.0
它的特点是每次请求和响应完毕后都会销毁 TCP 连接,同时规定前一个响应完成后才能发送下一个请求。这样做有两个问题:
无法复用连接
每次请求都要创建新的 TCP 连接,完成三次握手和四次挥手,网络利用率低
队头阻塞
如果前一个请求被某种原因阻塞了,会导致后续请求无法发送。
http1.1
http1.1 是 http1.0 的改进版,它做出了以下改进:
长连接
http1.1 允许在请求时增加请求头connection:keep-alive,这样便允许后续的客户端请求在一段时间内复用之前的 TCP 连接
管道化
基于长连接的基础,管道化可以不等第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回。
缓存处理
新增响应头 cache-control,用于实现客户端缓存。
断点传输
在上传/下载资源时,如果资源过大,将其分割为多个部分,分别上传/下载,如果遇到网络故障,可以从已经上传/下载好的地方继续请求,不用从头开始,提高效率
http2.0
http2.0 进一步优化了传输效率,它主要有以下改进:
二进制分帧
将传输的消息分为更小的二进制帧,每帧有自己的标识序号,即便被随意打乱也能在另一端正确组装
多路复用
基于二进制分帧,在同一域名下所有访问都是从同一个 tcp 连接中走,并且不再有队头阻塞问题,也无须遵守响应顺序
头部压缩
http2.0 通过字典的形式,将头部中的常见信息替换为更少的字符,极大的减少了头部的数据量,从而实现更小的传输量
服务器推
http2.0 允许服务器直接推送消息给客户端,无须客户端明确的请求