编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

TLS 1.3和QUIC,UDP那些事儿

wxchong 2024-06-11 09:55:39 开源技术 16 ℃ 0 评论

去年8月IETF正式宣布TLS 1.3规范rfc8446,总体上TLS 1.3基于UDP和QUIC技术。关于TLS 1.3和QUIC技术实现、能带来哪些优势,今天虫虫就跟大家一起聊聊。

QUIC源于谷歌改善搜索和Chrome浏览器的互联网传输技术。谷歌已经在Chrome上已经使用好多几年,实践证明可以极大的改善网络传输减少延迟。

QUIC技术的优势

在TLS 1.3中使用QUIC代了TCP和TLS的组合,采用跨层方法来实现数据传输和安全加密。在QUIC底层,使用UDP做数据包的传输。整体分层对比如下:

关于QUIC技术更详细的说明可以参考Chromium Projects相关的文档。总之,QUIC带来的优势有:

减少连接建立的延迟,甚至是0-RTT的连接通讯。

改善拥塞控制,基于TCP NewReno的边缘修改。

无需标头行阻塞的多路复用,QUIC确实减少了头阻塞的问题。

前置纠错。

连接转移,比如无需重握手,协商会话就能从WiFi迁移到LTE。

还有就是连接性能的优化,QUIC使得建立连接的速度增加了至少两倍,并显著降低了不同网络之间切换的影响。

减少连接建立延迟

在标准TLS 1.2即一下协议中,TCP需要握手才能在服务器和客户端之间建立会话,并且TLS需要额外一次握手来确保会话的安全。 而QUIC只需一次握手就能建立安全会话。

由上动态图所示,在QUIC连接中客户端向服务器发送连接ID,服务器返回一个token和服务器的公共Diffie-Hellman值,基于此服务器和客户端达成初始密钥的协商。马上客户端和服务器可以立即开始交换加密数据。

在TLS1.3,在服务器和客户端第一次"会面"之后,可以通过缓存会话密钥,并且在新请求时,就可以直接使用缓存的建立会话,而不需要会话握手,从而实现0-RTT。

改善拥塞控制

QUIC引入了一种新的数据包序列编号机制。每个数据包都有一个新的序列号,包括重发数据包,可以实现准确的往返时间(RTT)计算。但是,QUIC的拥塞控制是一种类传统TCP的机制。和TCP中,QUIC本质上是ARQ协议,需要反馈来从重穿丢失的包,这种设计选择会在评估链路状况时导致效率低下。而且,在延迟和损耗不稳定的链路中,会导致显著的性能损耗。尤其是越来越多无线网络链路。

多路复用

多路复用非常重要,因为它可以防止行头(head-of-line,HOL)阻塞。当请求多个对象时会发生HOL阻塞,并且由于前面的大对象延迟而导致其后小对象排队卡壳。通过多路流传输复用,可以极大的改善HOL阻断,另外基于多路复用流,我们可以根据需求,以重要性,大小特征等选择资源的权重,从而提高用户体验,这在之前的文章图片传输中我们提到过。

前置纠错

在QUIC中使用了前置纠错(FEC)技术,使用基于XOR的前置纠错技术,它只能恢复单个数据包。如果丢失两个或更多个分组,则FEC分组变得无用。传统的FEC是一种纯粹主动的丢失恢复方案,这意味着服务器将发送超过必要的数据包(减少良好输出)或少于必要(不减少延迟),但是在性能上必须有权衡。

连接转移

QUIC为网络连接提供了唯一的标识符,连接UUID,可以在切换网络后保持相同的连接UUID。因此,网络切换不再是个问题。

QUIC技术的缺点

性能

谷歌统计数据显示,基于QUIC实现了其搜索响应的延迟时间坚守3.6%,油管视频缓存时间缩短了15.3%。结果表明,QUIC在高延迟条件下表现良好,特别是对低带宽网络条件下。

UDP限制

QUIC是基于UDP协议的,只有在客户端和服务器之间保持UDP通讯时才能工作。如果UDP不可用,则QUIC自动回退到标准HTTP,确保最终用户也可以获取到内容。如果网络中对UDP做了限制,会导致网站加载非常缓慢。

可用性

QUIC仍处于标准化过程中。还在不断开发完善,但是已经有越来越多的互联网企业开始在使用。

QUIC改善

我们前面提到过,QUIC本质上是一种基于ARQ的协议。 ARQ协议从根本上依赖反馈信息来从丢包中恢复。简化后,发送方希望接收方单独确认每个数据包的接收,并且在此确认到达之前不会继续。如果检测到丢失,则发送方重新发送丢失的数据包,以确保可靠性。一个简单的例子:

这种方法受链路RTT的严重影响,发送方需要等待接收方的确认。换句话说,尽管QUIC有效地减少了连接建立时间,但QUIC在实际数据传输中的延迟在这种情况下会受很大影响,这和TCP也一样。

那么,如果改善这种影响呢?那就是纠删码(Erasure Code)方法。该方法,通过线性并行方法进行传输,这样可以确保无论n个传输到接受者,接受者都能恢复所有n个原始数据包。以下简单示例将有所帮助:

发送方在发送新的(编码的)数据包之前不需要等待任何确认,而接收方则恢复所有4个原始数据包,发送方无需发送更多数据。由于发送方不依赖确认来确保所有数据包的可靠传输,这种方法对于延迟或延迟变化(抖动)非常强大。

由于EC不适合于损失不稳定且不可预测的情况,可以根据网络信道波动检测控制的前提下,使用该技术作为补充,来减少反复确认和冗余数据包传输。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表