0%

面试中常见的计算机网络问题

HTTP部分

  1. HTTP1.1相比HTTP1.0做了哪些改进?

    HTTP1.0在每次进行传输前都要重新建立一个TCP链接。HTTP1.1中可以在一个TCP链接中进行多次HTTP传输。实现了管道网络传输。即发起一个请求A后不需要等待返回即可继续发起请求B。但是对于服务端来说,会按照接收到的请求的顺序,依次响应,这时后到的请求需要等待先到的请求响应后才可被响应,因此会出现队头阻塞的情况。

  1. HTTP2相比HTTP1.1有哪些改进?

    1. 头部压缩,有效防止了重复头信息的传输,提高了传输效率
    2. TCP多路复用,降低链接开销,提高链接利用率
    3. 直接以二进制的形式传输数据
    4. 数据流的形式
    5. 服务器主动推送
  2. 简单介绍一下HTTP3?

    1. 使用基于UDP的QUIC协议替换了TCP,降低了握手时交互次数;解决了HTTP2丢包阻塞的问题
  3. HTTP和HTTPS的区别?HTTPS如何保证信息安全?SSL/TLS的加密解密过程?

    1. 通过使用混合加密、摘要算法和数字证书的方式解决了HTTP被监听、篡改和伪造的问题
    2. 过程:HTTPS相比HTTP,在应用层和传输层中间加上了一层SSL/TLS层;服务器的证书经过CA的私钥加密后存储在服务端,客户端请求网站时,服务端将该证书发给客户端,客户端使用内置的CA公钥对该证书进行解密;获取到服务器端的公钥;服务器端使用私钥对密钥和数据进行加密,客户端接收到后使用接收到公钥对数据进行解密,获取到数据和会话密钥。之后双方使用该会话密钥进行对称加密的信息传输。HTTPS中每一次传输的数据都会使用响应的摘要算法对数据进行计算,并将计算结果传输给接收方,接收方收到数据解密后使用相同的摘要算法对数据进行计算并与发送端发送过来的摘要进行对比,若不同则表示数据被篡改。
  4. 介绍一下HTTP/HTTPS状态码?

    1. 1xx表示提示信息,实际应用中使用较少
    2. 2xx,表示成功响应,常见的有200 OK,成功响应;204 NO Content,与200相同,但没有body信息;206 Partial Content通常用于分块下载和断电续传,表示响应返回的body信息并不是全部的信息。
    3. 3xx,表示重定向,常见的有301永久重定向,302临时重定向,304重定向到缓存;
    4. 4xx,客户端错误,表示客户端的操作导致了错误。常见的有403禁止访问(访问了没有权限访问的资源),404 Not Found(访问了不存在的资源)
    5. 5xx,服务端错误,常见的有501、502和503
  5. HTTP/HTTPS请求中常见的头都有哪些及其含义?

    1. Connection: 链接形式,HTTP1.1后通常为Keep-live(长链接)
    2. Host: 用户访问的域名
    3. Cookie: 存储用户的验证信息
    4. Connect-Type: 数据格式,例如“text/html; charset=utf-8”表示传输的是超文本,使用utf-8编码
    5. Accept: /;接受的数据类型,此例表示接受任何类型数据
    6. Content-Encoding: 数据的压缩方法
    7. Accept-Encoding: 可接受的压缩方法
  6. Cookie的作用?

    Cookie主要用来对用户的身份的验证,例如我们在使用淘宝网站的时候,我们需要登陆账户,如果没有Cookie,那在每次请求的时候我们都需要重新登陆。有了Cookie后,服务端可以通过Cookie去验证访问的用户,进而针对性显示用户权限内的数据;

传输层的协议(TCP/UDP)

  1. 介绍一下TCP的三次握手的过程?

    1. 客户端发送一个SYN=j的包,然后进入SYN_SENDED状态
    2. 服务端接收到客户端发送的SYN包后,同时回复一个ACK=j+1的ACK包和SYN=k的SYN包,然后进入SYN_RECV状态
    3. 客户端接收到服务端的SYN+ACK包后发送一个ACK=k+1的ACK包,然后进入ESTABLISHED状态;
    4. 服务端接收到客户端的ACK=k+1的包后进入ESTABLISHED状态
  2. 四次挥手过程?

    1. 客户端发送一个FIN包,用来表示自己没有数据需要发送
    2. 服务端接收到该FIN包,并发送一个ACK包,此时从客户端->服务端的输出传输通道关闭,链接进入半关闭状态
    3. 服务端发送一个FIN包,用来表示自己没有数据需要发送
    4. 客户端接收到该FIN包,并发送一个ACK包,此时该链接彻底关闭
  3. TCP如何保证数据可靠传输?

    1. 三次握手,确保了数据传输前链接已经稳定建立
    2. 数据校验,确保了数据传输的正确性
    3. 合理的数据切分,对数据进行切分传输,对每一段数据都有一个编号,接收端可以在不用在意接收顺序,在接受后根据编号对数据进行拼接即可
    4. 流量控制,通过滑动窗口,接收端向发送端反馈当前可接收数据量,发送端根据反馈控制发送数据的速度,防止出现发送端发送速率过大导致接收端无法及时接收处理,进而导致数据丢失的问题
    5. 拥塞控制,应对网络拥堵时的策略,主包含慢启动、拥塞避免、快重传、快重启四种算法;慢启动:发送窗口从1开始每次翻倍增长,达到门限后开始使用拥塞避免算法;拥塞避免算法:发送窗口每次增加1;快重传:当遇到网络拥堵导致数据丢失时,如果发送端连续三次接收到接收端对同一个数据包确认,即重传该数据包,同时将门限设为当前拥塞窗口的一半,然后执行慢启动算法;快恢复:在发生快重传时不再从头开始执行慢启动,而是将门限设为当前发送窗口的一半后,将当前发送窗口大小设为门限值,执行拥塞避免算法
  4. TCP和UDP的区别?

    1. TCP:传输控制协议;UDP:用户数据报文协议;TCP是稳定可靠的连接,UDP是不稳定不可靠的。UDP只关心数据是否发送,不关心数据是否被接收。而TCP不仅保证数据被发送,同时也保证数据传输是可靠的。
    2. TCP占用的系统资源较多,UDP占用较少
    3. TCP保证数据顺序,UDP不保证
    4. TCP保证数据正确性,UDP不保证(可能丢包)
  5. 哪些应用使用TCP,哪些应用使用UDP?

    1. TCP:HTTP,FTP,SSH,POP,SMTP,文件传输(需要保证数据可靠的场景)
    2. UDP:DNS、QQ语音、QQ视频

参考

  1. 一文看懂HTTP相关内容
请作者喝咖啡