1.gRPC 用的什么协议?

使用 HTTP/2.0 协议,根本原因是 HTTP1 不能充分的复用 TCP 连接。HTTP/2.0 一条 TCP 链接可多路复用并且支持双向流,首部压缩等新特性这能使网络请求的效率更高。

2.HTTP/1.0、HTTP/1.1 和 HTTP/2.0 的区别

HTTP/1.0——无状态无连接的应用层协议

  • 无状态:服务器不跟踪不记录请求过的状态
  • 无连接:服务器每次请求都需要建立 TCP 连接

无状态的问题可以借助 cookie/session 机制来做身份认证和状态记录。无状态特性会导致性能缺陷:

  1. 无法复用连接。每次发送请求的时候都需要进行一次 TCP 连接,会导致网络的利用率非常的低。
  2. 队头阻塞:HTTP/1.0 规定了下一个请求必须在前一个请求响应到达才能发送,所以如果一个请求耗费时间很长会导致后面的请求阻塞

HTTP/1.1——

  • 增加长连接:HTTP/1.1 中增加了 Connection 字段,通过设置 Keep-alive 可以保持连接不断开,避免了每次客户端请求都需要重新建立 TCP 连接。
  • 支持请求管道化:管线化使得请求能够并行传输,但是服务器还是需要按照请求的先后顺序依次返回相应的结果,以保证客户端能够区分每次请求的响应内容

HTTP/2.0

增加了新的概念:

  • 帧:HTTP/2数据通信最小单位,消息由一个一个的帧构成。
  • 流:已建立的连接上的双向字节流
  • 消息:与逻辑消息对应的完整的一系列数据帧

HTTP2.0实现了并行传输,能够在一个TCP上进行任意数量的HTTP请求。并且压缩了头部信息,减少了传输的压力

HTTP3.0

基于Google的QUIC,主要思想是放弃TCP,转而使用UDP的QUIC协议。

总结:

  • HTTP1.0
  • 无状态,无链接
  • 短连接:每次发送 请求都需要重新建立tcp请求,非常浪费性能。
  • 无host头域
  • 不允许断点续传
  • HTTP1.1
  • 支持长连接,使用connection:keep-alive保持长连接
  • 请求管道化
  • 增加缓存处理
  • 增加Host字段,支持断点传输
  • HTTP2.0
  • 二进制分帧;

  • 多路复用(或连接共享),使用多个stream,每个stream又分帧传输,使得一个tcp连接能够处理多个http请求;

  • 头部压缩,双方各自维护一个header的索引表,使得不需要直接发送值,通过发送key缩减头部大小;

  • 服务器推送(Sever push)

  • HTTP3.0
  • 基于google的QUIC协议,而quic协议是使用udp实现的;

  • 减少了tcp三次握手时间,以及tls握手时间;

  • 解决了http 2.0中前一个stream丢包导致后一个stream被阻塞的问题;

  • 优化了重传策略,重传包和原包的编号不同,降低后续重传计算的消耗;

  • 连接迁移,不再用tcp四元组确定一个连接,而是用一个64位随机数来确定这个连接;

  • 更合适的流量控制。

3.HTTP与HTTPS区别

  • HTTP明文传输,传输的数据都是未加密的,安全性会较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性好。

  • HTTPS需要依赖CA证书,CA证书一般免费的证书较少,需要一定的费用

  • HTTP的页面相应速度会更快,因为HTTP只需要三次TCP握手建立连接,客户端和服务器需要交换3次包,HTTPS除了TCP的三个包,还需要加上SSL握手的9个包,一共是12个包

  • HTTP和HTTPS的端口不一样,一个是80,一个是443.

  • HTTPS其实就是构建在SSL/TLS之上的HTTP协议,所以HTTPS比HTTP更加消耗服务器资源。

TCP三次握手:

img

HTTPS的工作原理:

img

4.从输入一个 URL 地址到浏览器完成渲染的整个过程

输入URL到浏览器渲染整个页面.png

浏览器查找域名的 IP 地址

1、请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。

2、如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。

3、查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。

4、根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭代的过程。

5、本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。

6、最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。