您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

时间:2022-07-15 11:39:39  来源:  作者:Java机械师

前言

经过了多年的努力,在 6 月 6 号,IETF (互联网工程任务小组) 正式发布了 HTTP/3 的 RFC。

HTTP 历史

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

  • 1991 HTTP/1.1
  • 2009 google 设计了基于TCP的SPDY
  • 2013 QUIC
  • 2015 HTTP/2
  • 2018 HTTP/3

HTTP3是在保持QUIC稳定性的同时使用UDP来实现高速度(选择QUIC就是选择UDP), 同时又不会牺牲TLS的安全性。

HTTP2协议虽然大幅提升了HTTP/1.1的性能,然而,基于TCP实现的HTTP2遗留下3个问题:

  • 有序字节流引出的队头阻塞(Head-of-line blocking),使得HTTP2的多路复用能力大打折扣;
  • TCP与TLS叠加了握手时延,建链时长还有1倍的下降空间;
  • 基于TCP四元组确定一个连接,这种诞生于有线网络的设计,并不适合移动状态下的无线网络,这意味着IP地址的频繁变动会导致TCP连接、TLS会话反复握手,成本高昂。

HTTP3协议解决了这些问题:

  • HTTP3基于UDP协议重新定义了连接,在QUIC层实现了无序、并发字节流的传输,解决了队头阻塞问题(包括基于QPACK解决了动态表的队头阻塞);
  • HTTP3重新定义了TLS协议加密QUIC头部的方式,既提高了网络攻击成本,又降低了建立连接的速度(仅需1个RTT就可以同时完成建链与密钥协商);
  • HTTP3 将Packet、QUIC Frame、HTTP3 Frame分离,实现了连接迁移功能,降低了5G环境下高速移动设备的连接维护成本。

QUIC 协议概览

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

QUIC(Quick UDP Inte.NET Connections, 快速UDP网络连接)是基于UDP的协议, 利用了UDP的速度和效率, 同时整合TCP, TLS和HTTP/2的优点并加以优化. 用一张图可以清晰的表示他们之间的关系。

QUIC是用来替代TCP, SSL/TLS的传输层协议, 在传输层之上还有应用层. 我们熟知的应用层协议有HTTP, FTP, IMAP等, 这些协议理论上都可以运行在QUIC上, 其中运行在QUIC之上的协议被称为HTTP/3, 这就是HTTP over QUIC即HTTP/3的含义,因此想要了解HTTP/3, QUIC是绕不过去的, 下面是几个重要的QUIC特性。

0 RTT建立连接

RTT: round-trip time, 仅包括请求访问来回的时间。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

HTTP/2的连接建立需要3 RTT, 如果考虑会话复用, 即把第一次握手计算出来的对称密钥缓存起来, 那也需要2 RTT. 更进一步的, 如果TLS升级到1.3, 那么HTTP/2连接需要2RTT, 考虑会话复用需要1RTT. 如果HTTP/2不急于HTTPS, 则可以简化, 但实际上几乎所有浏览器的设计都要求HTTP/2需要基于HTTPS。

HTTP/3首次连接只需要1RTT, 后面的链接只需要0RTT, 意味着客户端发送给服务端的第一个包就带有请求数据, 其主要连接过程如下:

  • 首次连接, 客户端发送Inchoate Client Hello, 用于请求连接;
  • 服务端生成g, p, a, 根据g, p, a算出A, 然后将g, p, A放到Server Config中在发送Rejection消息给客户端。
  • 客户端接收到g,p,A后, 自己再生成b, 根据g,p,a算出B, 根据A,p,b算出初始密钥K, B和K算好后, 客户端会用K加密HTTP数据, 连同B一起发送给服务端。
  • 服务端接收到B后, 根据a,p,B生成与客户端同样的密钥, 再用这密钥解密收到的HTTP数据. 为了进一步的安全(前向安全性), 服务端会更新自己的随机数a和公钥, 在生成新的密钥S, 然后把公钥通过Server Hello发送给客户端. 连同Server Hello消息, 还有HTTP返回数据。
既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

这里使用DH密钥交换算法, DH算法的核心就是服务端生成a,g,p3个随机数, a自己持有, g和p要传输给客户端, 而客户端会生成b这1个随机数, 通过DH算法客户端和服务端可以算出同样的密钥. 在这过程中a和b并不参与网络传输, 安全性大大提升. 因为p和g是大数, 所以即使在网络传输中p, g, A, B都被劫持, 靠现在的计算力算力也无法破解。

连接迁移

TCP连接基于四元组(源IP, 源端口, 目的IP, 目的端口), 切换网络时至少会有一个因素发生变化, 导致连接发送变化. 当连接发送变化是, 如果还是用原来的TCP连接, 则会导致连接失败, 就得等到原来的连接超时后重新建立连接, 所以我们有时候发现切换到一个新的网络时, 即使网络状况良好, 但是内容还是需要加载很久. 如果实现的好, 当检测到网络变化时, 立即建立新的TCP连接, 即使这样, 建立新的连接还是需要几百毫秒时间。

QUIC不受四元组的影响, 当这四个元素发生变化时, 原连接依然维持. 原理如下:QUIC不以四元素作为表示, 而是使用一个64位的随机数, 这个随机数被称为Connection ID, 即使IP或者端口发生变化, 只要Connection ID没有变化, 那么连接依然可以维持。

队头阻塞/多路复用

HTTP/1.1和HTTP/2都存在队头阻塞的问题(Head Of Line blocking)。

TCP是个面向连接的协议, 即发送请求后需要收到ACK消息, 以确认对象已接受数据. 如果每次请求都要在收到上次请求的ACK消息后再请求, 那么效率无疑很低. 后来HTTP/1.1提出了Pipeline技术, 允许一个TCP连接同时发送多个请求. 这样就提升了传输效率。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

在这样的背景下, 队头阻塞发生了. 比如, 一个TCP连接同时传输10个请求, 其中1,2,3个请求给客户端接收, 但是第四个请求丢失, 那么后面第5-10个请求都被阻塞. 需要等第四个请求处理完毕后才能被处理. 这样就浪费了带宽资源。

因此, HTTP一般又允许每个主机建立6个TCP连接, 这样可以更加充分的利用带宽资源, 但每个连接中队头阻塞的问题还是存在的。

HTTP/2的多路复用解决了上述的队头阻塞问题. 在HTTP/2中, 每个请求都被拆分为多个Frame通过一条TCP连接同时被传输, 这样即使一个请求被阻塞, 也不会影响其他的请求。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

但是, HTTP/2虽然可以解决请求这一粒度下的阻塞, 但HTTP/2的基础TCP协议本身却也存在队头阻塞的问题. HTTP/2的每个请求都会被拆分成多个Frame, 不同请求的Frame组合成Stream, Stream是TCP上的逻辑传输单元, 这样HTTP/2就达到了一条连接同时发送多个请求的目标, 其中Stram1已经正确送达, Stram2中的第三个Frame丢失, TCP处理数据是有严格的前后顺序, 先发送的Frame要先被处理, 这样就会要求发送方重新发送第三个Frame, Steam3和Steam4虽然已到达但却不能被处理, 那么这时整条链路都会被阻塞。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

不仅如此, 由于HTTP/2必须使用HTTPS, 而HTTPS使用TLS协议也存在队头阻塞问题. TLS基于Record组织数据, 将一对数据放在一起加密, 加密完成后又拆分成多个TCP包传输. 一般每个Record 16K, 包含12个TCP包, 这样如果12个TCP包中有任何一个包丢失, 那么整个Record都无法解密。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

队头阻塞会导致HTTP/2在更容易丢包的弱网络环境下比HTTP/1.1更慢。

QUIC是如何解决队头阻塞的问题的? 主要有两点:

  • QUIC的传输单位是Packet, 加密单元也是Packet, 整个加密, 传输, 解密都基于Packet, 这就能避免TLS的阻塞问题。
  • QUIC基于UDP, UDP的数据包在接收端没有处理顺序, 即使中间丢失一个包, 也不会阻塞整条连接. 其他的资源会被正常处理。

拥塞控制

拥塞控制的目的是避免过多的数据一下子涌入网络, 导致网络超出最大负荷. QUIC的拥塞控制与TCP类似, 并在此基础上做了改进. 先来看看TCP的拥塞控制。

  • 慢启动: 发送方像接收方发送一个单位的数据, 收到确认后发送2个单位, 然后是4个, 8个依次指数增长, 这个过程中不断试探网络的拥塞程度.
  • 避免拥塞: 指数增长到某个限制之后, 指数增长变为线性增长。
  • 快速重传: 发送方每一次发送都会设置一个超时计时器, 超时后认为丢失, 需要重发。
  • 快速恢复: 在上面快速重传的基础上, 发送方重新发送数据时, 也会启动一个超时定时器, 如果收到确认消息则进入拥塞避免阶段, 如果仍然超时, 则回到慢启动阶段。

QUIC重新实现了TCP协议中的Cubic算法进行拥塞控制, 下面是QUIC改进的拥塞控制的特性:

1. 热插拔

TCP中如果要修改拥塞控制策略, 需要在系统层面今次那个操作, QUIC修改拥塞控制策略只需要在应用层操作, 并且QUIC会根据不同的网络环境, 用户来动态选择拥塞控制算法。

2. 前向纠错 FEC

QUIC使用前向纠错(FEC, Forword Error Correction)技术增加协议的容错性. 一段数据被切分为10个包后, 一次对每个包进行异或运算, 运算结果会作为FEC包与数据包一起被传输, 如果传输过程中有一个数据包丢失, 那么就可以根据剩余9个包以及FEC包推算出丢失的那个包的数据, 这样就大大增加了协议的容错性。

这是符合现阶段网络传输技术的一种方案, 现阶段带宽已经不是网络传输的瓶颈, 往返时间才是, 所以新的网络传输协议可以适当增加数据冗余, 减少重传操作。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

3. 单调递增的Packer Number

TCP为了保证可靠性, 使用Sequence Number和ACK来确认消息是否有序到达, 但这样的设计存在缺陷。

超时发生后客户端发起重传, 后来接受到了ACK确认消息, 但因为原始请求和重传请求接受到的ACK消息一样, 所以客户端就不知道这个ACK对应的是原始请求还是重传请求. 这就会造成歧义。

  • RTT: Round Trip Time, 往返事件
  • RTO: Retransmission Timeout, 超时重传时间

如果客户端认为是重传的ACK, 但实际上是右图的情形, 会导致RTT偏小, 反之会导致RTT偏大。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

QUCI解决了上面的的歧义问题, 与Sequence Number不同, Packet Number严格单调递增, 如果Packet N丢失了, 那么重传时Packet的标识就不会是N, 而是比N大的数字, 比如N+M, 这样发送方接收到确认消息时, 就能方便的知道ACK对应的原始请求还是重传请求。

4. ACK Delay

TCP计算RTT时没有考虑接收方接受到数据发发送方确认消息之间的延迟, 如下图所示, 这段延迟即ACK Delay. QUIC考虑了这段延迟, 使得RTT的计算更加准确。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

5. 更多的ACK块

一般来说, 接收方收到发送方的消息后都应该发送一个ACK恢复, 表示收到了数据. 但每收到一个数据就返回一个ACK恢复实在太麻烦, 所以一般不会立即回复, 而是接受到多个数据后再回复, TCP SACK最多提供3个ACK block. 但在有些场景下, 比如下载, 只需要服务器返回数据就好, 但按照TCP的设计, 每收到三个数据包就要返回一个ACK, 而QUIC最多可以捎带256个ACK block, 在丢包率比较严重的网络下, 更多的ACK可以减少重传量, 提升网络效率。

浏览控制

TCP 会对每个TCP连接进行流量控制, 流量控制的意思是让发送方不要发送太快, 要让接收方来得及接受, 不然会导致数据溢出而丢失, TCP的流量控制主要通过滑动窗口来实现的. 可以看到, 拥塞控制主要是控制发送方的发送策略, 但没有考虑接收方的接收能力, 流量控制是对部分能力的不起。

QUIC只需要建立一条连接, 在这条连接上同时传输多条Stream, 好比有一条道路, 量都分别有一个仓库, 道路中有很多车辆运送物资. QUIC的流量控制有两个级别: 连接级别(Connection Level)和Stream 级别(Stream Level)。

对于单条的Stream的流量控制: Stream还没传输数据时, 接收窗口(flow control recevice window)就是最大接收窗口, 随着接收方接收到数据后, 接收窗口不断缩小. 在接收到的数据中, 有的数据已被处理, 而有的数据还没来得及处理. 如下图, 蓝色块表示已处理数据, 黄色块表示违背处理数据, 这部分数据的到来, 使得Stream的接收窗口缩小。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

随着数据不断被处理, 接收方就有能力处理更多数据. 当满足(flow control receivce offset - consumed bytes) < (max receive window/2)时, 接收方会发送WINDOW_UPDATE frame告诉发送方你可以再多发送数据, 这时候flow control receive offset就会偏移, 接收窗口增大, 发送方可以发送更多数据到接收方。

既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议

 

Stream级别对防止接收端接收过多数据作用有限, 更需要借助Connection级别的流量控制. 理解了Stream流量那么也很好理解Connection的流控. Stream中。

接收窗口=最大接受窗口 - 已接收数据

而对于Connection来说:

接收窗口 = Stream1 接收窗口 + Stream2 接收窗口 + ... + StreamN 接收窗口


Tags:HTTP/3   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
HTTP/3 为什么正迅速吞噬世界?
作者 | Robin Marx译者 | 核子可乐策划 | 丁晓昀超文本传输协议(HTTP)作为互联网的基石,一直在网页加载、视频流传输、应用获取数据等方方面面发挥重要作用。去年,负责定义互联...【详细内容】
2023-11-14  Search: HTTP/3  点击:(335)  评论:(0)  加入收藏
HTTP/3放弃了TCP,性能提升多少
HTTP/3是最新的超文本传输协议,它是基于QUIC(Quick UDP Internet Connections)协议开发的。HTTP/3是HTTP/2的后继者,可以有效地提高网页加载速度、改善安全性,并提供更好的流控...【详细内容】
2023-03-29  Search: HTTP/3  点击:(131)  评论:(0)  加入收藏
既然HTTP/3正式发布了,那么咱们来深入理解HTTP/3协议
前言经过了多年的努力,在 6 月 6 号,IETF (互联网工程任务小组) 正式发布了 HTTP/3 的 RFC。HTTP 历史 1991 HTTP/1.1 2009 Google 设计了基于TCP的SPDY 2013 QUIC 2015 HTTP/2...【详细内容】
2022-07-15  Search: HTTP/3  点击:(478)  评论:(0)  加入收藏
6月6日,HTTP/3 正式发布了
经过了多年的努力,在 6 月 6 号,IETF (互联网工程任务小组) 正式发布了 HTTP/3 的 RFC, 这是超文本传输协议(HTTP)的第三个主要版本,完整的 RFC 超过了 20000 字,非常详细地解释了 HT...【详细内容】
2022-06-08  Search: HTTP/3  点击:(266)  评论:(0)  加入收藏
什么是 HTTP/3?HTTP/3 主要优势是什么?
网络的发展永远不会停滞不前。随着新技术的发展,消费者行为发生变化,支撑互联网的核心基础设施被迫适应。HTTP 协议&mdash;&mdash;用于在客户端和服务器之间传输数据&mdash;&m...【详细内容】
2022-05-30  Search: HTTP/3  点击:(390)  评论:(0)  加入收藏
HTTP/3 为什么这么快?
HTTP/3 已经来临,这对 Web 性能是件大事。让我们看看它能让网站速度提升多少吧!等等,HTTP/2 难道不好么?它在这几年不是挺火的吗?确实是,但它仍有一些问题。为了解决这些问题,新版...【详细内容】
2022-01-27  Search: HTTP/3  点击:(270)  评论:(0)  加入收藏
HTTP/3 与 HTTP/2 的性能对比
在去年 Cloudflare生日周,我们宣布了初步支持HTTP/2 的下一代新协议&ndash; HTTP/3 。我们的目标是为建立一个更好的互联网而努力。在标准制定上进行协作非常重要,我们很荣幸...【详细内容】
2020-05-13  Search: HTTP/3  点击:(287)  评论:(0)  加入收藏
▌简易百科推荐
手机就可以修改WiFi密码,进行网络提速,还能防止别人蹭网
随着网络的普及和使用频率的增加,很多人可能遇到了一些网络管理上的问题,比如忘记了WiFi密码、网络速度缓慢、或者发现有不明设备在家中蹭网。相信朋友们也曾遇到过吧?但是,你知...【详细内容】
2024-04-03  老毛桃    Tags:WiFi密码   点击:(9)  评论:(0)  加入收藏
手机WiFi信号满格却接收消息延迟?这里有妙招帮你解决!
在现代社会,手机已经成为了我们生活中不可或缺的一部分。无论是工作、学习还是娱乐,手机都扮演着重要的角色。然而,有时我们会遇到一些令人烦恼的问题,比如明明手机WiFi信号满格...【详细内容】
2024-04-03  蔡前进    Tags:手机WiFi   点击:(8)  评论:(0)  加入收藏
SASE技术应用落地的五个关键趋势
在Gartner 最新发布的《2023网络技术成熟度曲线》报告中认为,SASE技术已经开始走出最初的技术炒作期,将逐步迈向新一轮的实用落地阶段。在Gartner发布的《Hype Cycle for Ente...【详细内容】
2024-04-01    安全牛  Tags:SASE   点击:(13)  评论:(0)  加入收藏
提示“该网站安全证书存在问题,连接可能不安全”如何解决
在你输入网址并浏览网页时,如果你的浏览器弹出一个警告,提示“网站的安全证书存在问题”,或是显示一个红色的锁标志,这些都是网站不安全的警示。这些提示通常是由HTTPS协议中的S...【详细内容】
2024-03-18  倏然间    Tags:网站安全证书   点击:(13)  评论:(0)  加入收藏
如何有效排除CAN总线错误
控制器局域网(CAN)控制器局域网(CAN)是现代车辆中电子元件无缝运行的基础。在远程信息处理领域,CAN总线系统的效率至关重要,其能够实现支撑当今汽车技术的复杂功能。然而,CAN总...【详细内容】
2024-02-20    千家网  Tags:CAN   点击:(56)  评论:(0)  加入收藏
网络连接受限或无连接怎么办?这里提供几个修复办法
可能错误提示 连接受限或无连接:连接具有有限的连接或无连接。你可能无法访问Internet或某些网络资源。 连接受限。排除和解决“连接受限或无连接”错误此错误可能由计算机上...【详细内容】
2024-02-06  驾驭信息纵横科技    Tags:网络连接受限   点击:(52)  评论:(0)  加入收藏
如何将Mac连接到以太网?这里有详细步骤
在Wi-Fi成为最流行、最简单的互联网连接方式之前,每台Mac和电脑都使用以太网电缆连接。这是Mac可用端口的标准功能。如何将Mac连接到以太网如果你的Mac有以太网端口,则需要以...【详细内容】
2024-02-03  驾驭信息纵横科技    Tags:Mac   点击:(68)  评论:(0)  加入收藏
简易百科之什么是端口映射
端口映射,也称为端口转发,是一种网络通信中的技术手段,通过将内网中的一个端口上的数据流量转发到另一个端口,使得外部网络能够访问到内部网络中的特定服务。在实现上,端口映射通...【详细内容】
2024-01-26    简易百科  Tags:端口映射   点击:(165)  评论:(0)  加入收藏
ip因频繁登陆已被禁止访问 无法显示图片 怎么办
首先,我们要明白,部分网站为了有效遏制数据爬取和非法攻击,保证访问速度和普通用户查询,会在系统中增加网络安全设备,加强安全防护机制,并提前设置安全访问规则。因此,一旦用户的行...【详细内容】
2024-01-20  何福意思    Tags:ip   点击:(68)  评论:(0)  加入收藏
电脑连上wifi却上不了网怎么办
当电脑连接上 WiFi 却无法上网时,可能会让人感到困惑和沮丧。这个问题通常会有多种可能的原因,包括网络配置问题、路由器故障、无线适配器问题等。在面对这个问题时,可以尝试以...【详细内容】
2024-01-16  编程资料站    Tags:wifi   点击:(72)  评论:(0)  加入收藏
站内最新
站内热门
站内头条