HTTP-并发/建连/连接迁移演进过程

一、 并发
● HTTP1.1
方式:
建立多个TCP连接,一个TCP处理一个HTTP请求。
HTTP-并发/建连/连接迁移演进过程_第1张图片
优点:
每个TCP之间完全隔离,一个TCP处理一个请求不存在队头阻塞问题,一个TCP发生故障不影响其他TCP处理。
缺点:
1、 实现成本高。TCP是由操作系统内核实现的,如果通过多线程实现并发,并发线程数 不能太多,否则线程间切换成本会以指数级上升;如果通过异步、非阻塞socket实现并发,开发效率又太低。
2、 每个TCP连接与TLS回话都叠加了2-3个RTT的建链成本,增加了延迟。
3、 TCP连接有一个防止出现阻塞的慢启动流程,会对每一个TCP连接都产生减速效果。
4、 浏览器和服务器都会做相应的TCP连接限制,不能无限制的建立连接。

● HTTP2
方式:
多路复用,有序发送HTTP请求。
HTTP-并发/建连/连接迁移演进过程_第2张图片
优点:

  1. 同域名下所有的通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。
  2. 可以实现全速传输,新开一个TCP连接,传输速度需要慢慢提升。
    缺点:
    1、 HTTP2协议是基于TCP有序字节流实现,应用层的多路复用不能做到无序并发,在丢包时会出现队头阻塞问题。
    2、 当网络繁忙时,会增加丢包的概率,多路复用受到很大的限制,甚至效率可能还不及HTTP1.1。
    3、 前面两点都会出现队头阻塞问题,其根本原来还是在于TCP协议本身不具备并发处理的能力,多路复用只是处理了HTTP并发的传输,但是最终的处理还是由单个的TCP有序处理请求,TCP在单位时间里只能处理某一个请求,其中某一个请求发生异常都将影响到后续的请求。

● HTTP3
方式:
有序的QUIC Stream。
HTTP-并发/建连/连接迁移演进过程_第3张图片
优点:
1、 QUIC基于UDP,原生支持并发处理。与HTTP2一样,同一条QUIC连接可以创建多个stream,来承载多个HTTP请求,但是QUIC连接上的多个stream之间没有依赖,中间的某一个请求出现丢包不会影响后面的stream。
2、 在移动端的良好支持,TCP是基于端口和IP去识别连接,在来回切换wifi时这种方式给用户的体验不是很友好。QUIC是通过ID的方式去识别一个连接,网络环境发生变化,只要ID不变,就能迅速重连。
二、 建连
● 1RTT
衡量网络建链的常用指标Round-Trip Time,RTT包含三部分:往返传播时延、网络设备内排队时延、应用程序数据处理时延
HTTP-并发/建连/连接迁移演进过程_第4张图片
● TLS连接过程
TLSv1.2 握手过程基本都是需要四次,也就是需要经过 2-RTT 才能完成握手,然后才能发送请求,而 TLSv1.3 只需要 1-RTT 就能完成 TLS 握手。
HTTP-并发/建连/连接迁移演进过程_第5张图片
● HTTP1.1/HTTP2
HTTP1.1与HTTP2连接过程一致,需要三次握手建立TCP连接,消耗1.5RTT。如果是HTTPS,那么还需要增加SSL/TLS的2个RTT。
开启TCP Fast open,且TLS是1.3是可以同时进行握手操作的。
HTTP-并发/建连/连接迁移演进过程_第6张图片

● HTTP3
HTTP3建连可以区分为两种,首次连接和非首次连接。
首次连接客户端和服务端要使用1RTT进行密钥协商和数据传输过程。并且服务端会传递一个config包到客户端,里面包含服务端的公钥和配置,客户端会存储这个config,后续(非首次)连接可以直接使用,从而跳过1RTT,直接进行数据交互。
config有时间期限,失效之后仍然需要进行1RTT密钥交换。
HTTP-并发/建连/连接迁移演进过程_第7张图片

三、 连接迁移
TCP
TCP协议使用的是五元组了标识一条连接,并且判断起唯一性。但是我们从4G环境切换到wifi环境时,手机的IP地址会发生变化,这时必须创建新的TCP连接才能进行数据传输。
QUIC
QUIC协议摒弃了五元组的方式,使用64维随机数作为连接ID。网络切换不会导致ID变化,连接依旧可用,提高了业务层的体验感。

参考文章:
https://blog.cloudflare.com/h...
https://baijiahao.baidu.com/s...

你可能感兴趣的:(httphttp3并发)