计算机网络面试题

什么是HTTP协议

  • HTTP是基于TCP/IP协议的应用层协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

http协议版本

  1. HTTP/0.9
    • 1991年发布,只有一个命令GET
    • 服务器只能回应HTML格式的字符串,不能回应别的格式
  2. HTTP/1.0
    • 1996年5月发布,增加POST和HEAD命令
    • 任何格式的内容都可以发送
    • 每次通信都必须包括头信息,用来描述一些元数据
    • 新增状态码、多字符集支持、多部分发送、权限、缓存、内容编码
    • 主要缺点:每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其它资源,就必须再新建一个连接。
  3. HTTP/1.1
    • 1997年1月发布
    • 持久连接:TCP连接默认不关闭,可以被多个请求复用
    • 管道机制:允许浏览器同时发出A请求和B请求,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求
    • 分块传输编码
    • 新增PUT、PATCH、OPTIONS、DELETE
    • 主要缺点:虽然允许复用TCP连接,但是在同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。
  4. HTTP/2
    • 2015年发布
    • 二进制协议、多工、数据流、头信息压缩、服务器推送

http协议报文结构

  • Http请求Request:请求行、请求头部、空行、请求数据(主体)
  • Http响应Response:状态行、消息报头、空行、响应正文

常见code码的含义

  • 200 OK:客户端请求成功
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
  • 401 Unauthorized:请求未经授权
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务
  • 404 Not Found:请求资源不存在,例如输入了错误的URL
  • 500 Internal Server Error:服务器发生不可预期的错误
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

什么是HTTPS

HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。

HTTPS主要作用是

  • 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全。
  • 对网站服务器进行真实身份认证。

HTTPS建立连接过程

  1. 客户端向服务端发起https请求。
  2. 服务端返回证书给客户端。
  3. 客户端验证证书真伪,通过CA机构公钥解密出服务端的公钥key1。
  4. 客户端生成密钥key2,并用服务端公钥key1加密Key2,发送给服务端。
  5. 服务端用私钥进行解密,得到密钥key2。
  6. 客户端和服务端用对称加密密钥Key2进行通信。

四次挥手最后等待为什么是2MSL

确保客户端发出的最后一次ack包可以到达服务端,如果等待2msl没有收到服务端的重发请求,就可以关闭,如果收到,就再次发送ack包,msl是报文最长存活时间,客户端发给服务端的报文,最长会经过msl个时间,如果超过这个时间,服务端没有收到,服务端就发报文要求客户端重传,这个报文最多msl个时间到达客户端,两个加起来就是2msl。

TCP为什么是四次挥手,而不是三次?

tcp是全双工通信,服务端和客户端都能发送和接收数据。tcp在断开连接时,需要服务端和客户端都确定对方将不再发送数据。

  • 第1次挥手由客户端向服务端发起,服务端收到信息后就能确定客户端已经停止发送数据。
  • 第2次挥手由服务端向客户端发起,客户端收到消息后就能确定服务端已经知道客户端不会再发送数据。
  • 第3次挥手由服务端向客户端发起,客户端收到消息后就能确定服务端已经停止发送数据。
  • 第4次挥手由客户端向服务端发起,服务端收到信息后就能确定客户端已经知道服务端不会再发送数据。

为什么不是3次挥手?在客户端第1次挥手时,服务端可能还在发送数据。所以第2次挥手和第3次挥手不能合并。

DNS解析

  • 当用户在浏览器输入 www.baidu.com
  • 浏览器向本地DNS发送查询请求
  • 本地DNS向根服务器查询.com的地址
  • 本地DNS向.com服务器查询baidu.com的地址
  • 本地DNS向baidu.com服务器查询www.baidu.com 的地址
  • www.baidu.com 的地址发送给浏览器

http/2相比http/1.1有什么新特性?

  • 多路复用: 即多个请求都通过一个TCP连接并发地完成。
  • 服务端推送: 服务端能够主动把资源推送给客户端。
  • 新的二进制格式: HTTP/2采用二进制格式传输数据,相比于HTTP/1.1的文本格式,二进制格式具有更好的解析性和拓展性。
  • header压缩: HTTP/2压缩消息头,减少了传输数据的大小。

电脑上打开浏览器,输入 www.baidu.com ,回车,到百度页面出现。中间发生了什么?

  • DNS 解析:将域名解析成 IP 地址
  • TCP 连接:TCP 三次握手
  • 发送 HTTP 请求
  • 服务器处理请求并返回 HTTP 报文
  • 浏览器解析渲染页面
  • 断开连接:TCP 四次挥手

解决跨域的方案(知乎https://zhuanlan.zhihu.com/p/354666188)

  1. JSONP(JSON with padding)。优点:兼容性好;缺点:只支持GET请求。
  2. CORS(跨域资源共享)。在服务端设置Access-Control-Allow-Origin就可以开启CORS。