0127面试题——TLS握手、HTTP3、CA校验、队头阻塞、HTTP头部、TCP握手挥手

434 阅读6分钟

计算机网络

  1. TLS协议握手过程,如何工作的

    • 客户端给出协议版本号、客户端生成的随机数、客户端支持的加密方法

    • 服务端给出协议版本号、双方使用的加密方法、数字证书、服务端生成的随机数

    • 客户端根据CA公钥,验证数字证书,给出生成的由服务端公钥加密的随机数(Premaster secret)

    • 服务端使用服务器私钥解密,获得随机数(premaster secret)

    • 客户端和服务端根据约定的加密方法以及之前生成的三个随机数,生成对话密钥(session key),用来加密接下来的整个对话过程

  2. HTTP3中使用的QUIC协议基于UDP的原因

    • HTTP2中,基于TCP协议

    • 而TCP是面向连接的,因此每次连接会花费一些时间

    • 在HTTP3中,基于UDP,就是为了提高了当前正在使用TCP的面向连接的Web应用程序的性能。

    • 而UDP是不可靠的,因此要在UDP的基础上,将其改造成可靠的QUIC协议

    • 资料:为什么HTTP3.0使用UDP协议

  3. 一个http请求是线程还是进程

    • 每个HTTP请求都需要使用一个线程来控制
  4. 在浏览器中http有请求数量限制吗,它的策略是怎样的

    • 有,每个域名下,最多同时建立6-8个TCP连接
  5. https是如何保证数据安全的

    • 利用CA证书,保证服务器的真实性

    • 利用非对称加密,保证会话密钥的保密性

    • 利用对称加密,保证会话的保密性

    • 利用数字签名,保证数据的完整性

  6. http2是如何消除队头阻塞的

    • TCP的队头阻塞
      • 当一个分组传输失败,导致接收端收到乱序的分组时,接收端将发送缺失包的重发请求(其实是缺失包上一个包的确认包)
      • 这时,发送端就必须将缺失包发送给接收端,并接收到确认才能发送接下来的分组,这段重发造成的阻塞,使得后面的分组必须等待,就是队头阻塞
    • HTTP1.1中的队头阻塞
      • HTTP1.1允许在一个TCP连接中,发送多个HTTP请求,但是对响应的顺序有一个限制,即请求的响应顺序必须与请求的发送顺序一致,这是因为请求跟响应并没有序号标识。
      • 因此,当先发出的请求,迟迟未响应时,导致后面的响应必须要等待其响应,这段等待时间造成的阻塞,称为队头阻塞
    • HTTP2如何消除队头阻塞
      • HTTP2不使用管道化的方式,而是引入了帧、消息和数据流等概念,每个请求/响应被称为消息,每个消息都被拆分成若干个帧进行传输,每个帧都分配一个序号。每个帧在传输是属于一个数据流,而一个连接上可以存在多个流,各个帧在流和连接上独立传输,到达之后在组装成消息,这样就避免了请求/响应阻塞。
      • 但由于HTTP2底层使用的是TCP协议,因此仍可能出现TCP队头阻塞。
    • 资料:什么是队头阻塞以及如何解决
  7. TCP/IP分别属于哪一层(OSI)

    • TCP属于传输层,主要负责应用之间的通信(指定端口,区分不同的应用)

    • IP属于网络层,主要负责路由分组转发(指定ip,便于选择转发路径)

  8. HTTP常见头部(请求头,响应头)

    • 请求头:
      • User-Agent: 用户代理,表示用户使用的哪种浏览器

      • Content-Type: 请求中body的内容类型,帮助服务端正确对body进行解析

      • Accept: 接受的响应内容类型

      • Accept-Encoding: 接受的响应内容编码

      • Accept-Language: 接受的内容语言

      • Cache-Control:用于描述缓存控制

      • Host: 请求的主机

      • Connection: 连接的类型

      • Cookie: cookie信息

      • If-Modified-Since:对应于响应头的Last-Modified,用于协商缓存

      • If-None-Match: 对应于Etag,用于协商缓存

      • Referer:表示发出请求的网址,为了防止自己网站的文件被外网直接引用,设置防盗链。

      • Origin: 发出请求的源,用于跨域判断

    • 响应头:
      • Cache-Control:用于描述缓存控制

      • Connection: 连接的类型

      • Last-Modified/Etag: 最后修改时间/资源摘要,用于协商缓存

      • Set-Cookie: 向客户端设置Cookie

    • 资料:http请求头与响应头的应用
  9. TCP/IP参考模型

    • TCP/IP四层参考模型

    • 应用层,负责具体的应用协议,如:HTTP, FTP, SMTP, DNS等

    • 传输层,负责应用间通信的协议,如:TCP、UDP

    • 网际层,负责分组在网络中转发的协议,如:IP

    • 网络接口层,负责具体的信号表示(物理层),以及将分组从一个结点发往另一个结点(数据链路层)

    • 其中,原OSI七层参考模型中,应用层、传输层之间的表示层、会话层被舍弃。数据链路层跟物理层合并成为网络接口层

  10. TCP的特性,为什么建立链接需要三次握手,断开4次挥手

    • 握手
      • 如果只握一次,则客户端不能判断连接是否创建成功
      • 如果只握二次,则当请求连接的包在网络中滞留一段时间后,再被服务器接收,会导致服务器单方面的创建连接
      • 因此握手三次,当服务端发送连接请求时,客户端如果不同意(不发ACK),则服务器不会建立链接
    • 挥手
      • 如果只挥三次,则当服务端发送,关闭从服务端到客户端的传输时(FIN),可能因为网络原因导致客户端收不到该包,则一直等待关闭,造成客户端资源浪费
      • 因此挥手四次,当服务端发送FIN包时,必须等待客户端发送ACK包,保证客户端成功关闭链接
    • 资料:iOS:为什么TCP连接要三次握手,四次挥手 | TCP(七) -- 四次挥手
  11. 客户端如何判断服务端下发的公钥是没有被中间人篡改的

    • 服务端下发的公钥证书,其中包含由CA私钥加密的公钥摘要,及公钥

    • 客户端拿到公钥证书后,使用CA公钥将CA私钥加密的公钥摘要解密,并对公钥证书中包含的公钥取摘要

    • 通过对比解密出来的摘要与计算出来的摘要是否一致,则可以判断有没有被中间人篡改