网络相关知识梳理
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 机制来做身份认证和状态记录。无状态特性会导致性能缺陷:
- 无法复用连接。每次发送请求的时候都需要进行一次 TCP 连接,会导致网络的利用率非常的低。
- 队头阻塞: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三次握手:
HTTPS的工作原理:
4.从输入一个 URL 地址到浏览器完成渲染的整个过程
浏览器查找域名的 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地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。