美文网首页
79.计算机网络-面试题总结

79.计算机网络-面试题总结

作者: wo不是黄蓉 | 来源:发表于2022-03-28 14:44 被阅读0次

    Q1:三次握手?
    A:客户端A主动请求服务器B,初始化时AB的TCP都处于CLOSED(关闭)状态

    A请求B时,B先打开自己的TCB(传输控制块),等待A连接请求,B进入到LISTEN(收听)状态,等待A的连接请求。

    A请求时也会打开自己的TCB,然后在打算建立连接时向B发出连接请求报文段,同步位SYN=1,同时建立一个序列号seq,此时客户端进入到SYN-SEND(同步已发送)状态

    B收到连接请求后,如果同意建立连接向A发送确认消息同步位SYN=1,ACK=1,确认号为ack=x+1,同时建立服务端的序列号y,此时服务端进入SYN-RCVD(同步收到)状态

    客户端收到服务端的确认后,需要给服务端进行确认ACK=1,确认号ack=y+1客户端序列号seq=x+1。客户端进入连接已建立状态。服务端收到确认号后也进入连接已建立状态

    Q2:为什么必须是三次握手?
    A:如果最后一次不进行客户端确认,那么如果客户端发出的报文由于网络原因导致很晚才送到了服务端。

    由于这个报文已经超时了,但是服务端不知道这是一个超时的连接,于是就向客服端发出信号可以传送数据了。

    但是客户端知道自己并没有重新发起请求,因此并不会去进行处理,但此时服务端却认为已经到了要传输数据的阶段了,会一直等待客户端发送数据,浪费服务端的资源。

    Q3:四次挥手?
    A:首先客户端和服务器都处于连接已建立的状态。当客户端想要关闭连接时:

    客户端发出连接释放报文段,并把FIN=1,设置序列号seq=u,此时客户端进入FIN-WAIT-1(等待1)状态,等待服务端确认。

    服务端收到后,发出确认消息,确认好ack=u+1,设置服务端序列号v,B进入到CLOSE-WAIT(关闭等待)状态。此时处于半关闭状态,半关闭状态下服务端如果有要发的东西,客户端仍要接收。

    客户端收到确认后,进入到FIN-WAIT-2(终止等待2)状态,等待服务端发出连接释放报文段。

    如果服务端没有要发的东西了,就通知TCP释放连接,FIN=1,ACK=1,seq=w,重复第一次发的确认号ack=u+1。服务端进入到LAST-ACK(最后确认)阶段。

    客户端收到连接释放报文段后,发出确认,ACK=1确认号ack=w+1进入到time-wait(时间等待)状态。等待一段时间后关闭连接。

    Q4:关闭连接后为什么要等一段时间再关闭?
    A:防止服务端在传输过程中还有未传完的数据,客户端就已经关闭了。

    保证客户端发出的最后一个确认报文能到达服务端。如果最后一个关闭报文没有成功达到服务端时,服务端没收到FIN+ACK报文段就不会正常关闭。

    Q5:计算机网络分为那几层?
    A:

    image-20220328105104886.png

    Http1.0和Http1.1区别:

    http1.0和tttp1.1的区别:

    长连接:http1.1支持长连接和请求流水线处理,在一个TCP连接商可以传送多个http请求和响应,减少了建立和关闭连接的消耗和延迟,在http1.1中默认开启长连接。keep-alive,一定程度上弥补了http1.0每次请求都要创建连接的缺点。

    http1.0需要使用keep-alive来告知服务端要建立一个长连接。

    节约带宽:

    http1.0不支持断点续传

    http1.1支持只发送Header,客户端接收到100才开始把body信息发送到服务器,返回401客户端就可以不用发送请求Body了节约带宽。

    host域

    http1.0每台服务器只能绑定一个ip地址

    http1.1的请求和响应消息都支持host域,且请求消息中如果没有Host域会报400的错

    缓存处理

    http1.0使用if-modified-sinceexpires作为缓存判断的标准

    http1.1引入了更多的缓存控制策略Entity tag,If-Unmodified-Since, If-Match, If-None-Match

    错误通知管理

    http1.1新增了24个错误状态码,409请求的资源与资源的当前状态发生冲突

    410,服务器上的某个资源被永久删除。

    6.Http1.1和Htp2.0的区别:

    多路复用

    同一个连接并发处理多个请求,http1.1可以多创建几个TCP连接来支持处理更多并发请求 。

    头部数据压缩

    http1.1不支持header数据的压缩,

    http2.0使用hpack算法对header数据进行压缩

    服务端推送

    在浏览器明确请求前,免得客户端再次创建连接发送请求到服务器端获取。

    Q7:HTTPS?
    A:在传输层和应用层加了TSL(运输层安全)和SSL(安全套接字层)。

    属于传输层安全协议。

    SSL建立安全会话过程:

    • 协商加密算法

      • 客户端发送请求,表明自己支持的加密算法

      • 服务端选定加密算法

    • 服务端鉴别

      • 服务端向浏览器发送RSA公钥数字证书

      • 浏览器使用该证书认证机构CA公开发布的RSA公钥对证书进行验证。

    • 会话密钥计算

      • 浏览器产生一个秘密数,用服务器的RSA公钥加密后发给服务器

      • 协商算法完成产生共享的对称会话密钥

    • 安全数据传输

      • 双方用会话密钥加密和解密他们之间传送的数据并验证完整性

    Q8:HTTP1.0和2.0有什么区别?
    A:HTTP1.0和HTTP1.1和HTTP2.0的区别

    Q9:TCP和UDP的特点?
    A:TCP可靠的,面向连接的传输层协议,端对端的,面向字节流的(对数据进行处理,数据拆分和合并)

    UDP时不可靠的,可以是一对一,一对多,多对多,多对一进行通信,面向报文的(不对数据进行处理只是加上首部之后就进行交付),没有拥塞控制,首部字节8个。

    Q10:TCP是怎么实现可靠传输的?可靠传输的原理是什么?
    A:网络层的传输本来是不可靠的,TCP使用了停止等待协议(每发送一个分组就停止发送,等待对方确认后才发送下一个分组)和连续ARQ协议

    停止等待协议出现的几种状况:

    • 无差错情况

    • 出现出错情况

      • 传输过程种出现差错,超时重传
    • 确认丢失和迟到

      • 确认过程种出现差错

        • 客户端确认迟到->超时重传

        • 服务端确认迟到->

    Q11:常见的应用层协议有哪些?
    A:http,ftp,telnet(远程终端协议),smtp(简单邮件传输协议),pop2和imap(邮件读取协议),DHCP(动态主机配置协议),DNS(域名解析协议)

    Q12:常见的状态码?
    A:不要再说404,500了
    302资源临时被移动
    304资源未修改
    302和307状态码区别:
    302如果不是head和get请求,浏览器会禁止重定向,除非得到用户的确认。但是浏览器的实现是得到302状态码时使用get方式进行重定向。

    303用来规范浏览器的实现,即当得到302状态码时使用get方式进行重定向。

    307实现和302一样,即不是head和get请求,浏览器会向用户确认然后进行重定向。

    403未授权,常见于登录授权请求拒绝时
    405不支持的请求方法
    408发送超时
    413请求实体超大

    502代理服务器无法连接到父网关,常见于使用代理的服务器,配置的服务器地址不可用
    503服务端暂时不可用,常见于后端发布过程中调用接口时遇到该状态

    Q13:粘包和拆包?
    A:TCP的流量控制产生的问题。

    put和post请求方法的区别

    Iput方法是幂等的:连续调用一次或多次的效果相同。

    client对一个URI发送一个实体,将客户端的资源放在请求URI上们对于服务器到底时创建还是更新,由服务器返回的httpcode来区别。

    post连续调用会带来额外的影响,例如表单提交。

    如果用PUT来达到更改资源,需要客户端提交资源全部信息

    put应答:如果目标资源不存在,并且put方法成功创建了一份,那么源头服务器必须返回201来通知客户端资源已创建。

    如果目标已存在,并且依照请求中封装的表现形式成功进行了更新,那么源头服务器必须返回200或204来表示请求的成功完成。

    14.Http缓存

    只能缓存Get请求。

    缓存控制强缓存

    cache-control

    cahce-control-no-store:不缓存

    cache-control:no-cache:有缓存,客户端想使用时需要域服务端进行验证
    当发现有旧的资源时,会在请求时加一个if-none-match头部,判断资源副本是否过去,返回了304则表示资源副本时新鲜的。

    Cache-control: max-age=N->Expires->Last-Modified

    cache-control:max-age有效时间

    协商缓存

    if-none-match实体标签在验证,使用etag来进行标记。

    服务器对比客户端发来的etag,相同if-none-match=false,返回304状态码,使用本地缓存。

    不相同将if-none-match=true,返回200状态码,客户端重新解析服务器返回的数据。

    last-modified和If-modified-since时一对:从某个日期之后文档被修改过

    强缓存和协商缓存

    当发现有旧的资源时,会在请求时加一个if-none-match头部,判断资源副本是否过去,返回了304则表示资源副本时新鲜的。

    Cache-control: max-age=N->Expires->Last-Modified

    cache-control:max-age有效时间

    协商缓存

    if-none-match实体标签在验证,使用etag来进行标记。

    服务器对比客户端发来的etag,相同if-none-match=false,返回304状态码,使用本地缓存。

    不相同将if-none-match=true,返回200状态码,客户端重新解析服务器返回的数据。

    last-modified和If-modified-since时一对:从某个日期之后文档被修改过

    强缓存和协商缓存

    15.预检请求

    第一个返回204状态码没有数据,第二次返回200.

    为什么要发预检请求?

    防止跨域请求,请求已经发送了后台数据也被修改了但是返回结果被拦截了。

    为了防止这种请求,规范要求,对这种可能对服务器产生副作用的http请求方法,浏览器必须先使用options方法发起一个预检请求,从而获知服务器是否允许该跨域请求;如果允许,就发送带数据的真实请求;如果不允许,则组织发送带数据的真实请求。

    什么时候发预检请求?

    简单请求

    请求方法:

    get,head,post(不包含数据只有请求头)

    请求头:

    accept,accpt-language,content-language,last-event-id,

    content-type为text/plain,multipart/form-data,application/x-www-form-urlencoded,

    除了简单请求都是复杂请求需要预检

    预检请求

    必须使用options方法发起一个预检请求。

    相关文章

      网友评论

          本文标题:79.计算机网络-面试题总结

          本文链接:https://www.haomeiwen.com/subject/vvisjrtx.html