说明:为什么HTTP 3. 0使用UDP协议?

3. QUIC协议的详细说明

选择好人并跟随他们,并更换坏人。

HTTP 3. 0选择了QUIC协议,这意味着HTTP 3. 0基本上继承了HTTP 2. 0的强大功能,并进一步解决了HTTP 2. 0中存在的一些问题。同时必须引入新的问题。

QUIC协议必须在TCP协议上实现HTTP 2. 0的重要功能,同时解决其余问题,让我们看一下QUIC的实现方式。

3. 1行首阻塞问题

行头阻塞(缩写为HOL阻塞)是计算机网络中性能受到限制的现象。用外行的话来说,这意味着一个数据包会影响一堆数据包,并且不会普及到所有人。不能走。

HTTP层和TCP层中可能存在行头阻塞问题。在HTTP 1. x中,该问题在两个级别上都存在。

HTTP 2. 0协议的复用机制解决了HTTP层的行头阻塞问题,但TCP层仍然存在行头阻塞问题。

TCP协议接收到数据包后,这部分数据可能会乱序到达使用udp协议,但是TCP必须集成所有数据收集和排序功能,以供上层使用。如果其中一个数据包丢失,则必须等待重传。结果,某些丢包数据会阻止整个连接的数据使用。

QUIC协议是基于UDP协议实现的。一个链接上可以有多个流,并且这些流不会相互影响。当流丢失数据包时,影响范围非常小,从而解决了行首阻塞问题。

3. 2 0RTT构建链

衡量网络建设的常用指标是RTT往返时间,即数据包一次和一次的时间消耗。

RTT包括三部分:往返传播延迟,网络设备中的排队延迟以及应用程序数据处理延迟。

通常来说,HTTPS协议需要建立一个完整的链接,包括:TCP握手和TLS握手,总共至少需要2-3个RTT,而普通的HTTP协议也至少需要1个RTT才能完成握手。

但是,可以实现QUIC协议以在第一个数据包中包含有效的应用程序数据,从而实现0RTT,但这也是有条件的。

简单来说,基于TCP协议和TLS协议的HTTP 2. 0在实际发送数据包之前需要花费一些时间来完成握手和加密协商,然后才能在完成后真正传输业务数据。

但是,QUIC可以使用第一个数据包发送业务数据,这在连接延迟方面具有很大的优势,并且可以节省数百毫秒。

QUIC的0RTT也需要条件。客户端和服务器也无法首次与0RTT进行交互。毕竟,两方完全不熟悉。

因此,QUIC协议可以分为第一连接和非第一连接。讨论了两种情况。

3. 3第一次连接和非第一次连接

使用QUIC协议的客户端和服务器需要使用1RTT进行密钥交换,并且使用的交换算法是DH(Diffie-Hellman)Diffie-Hellman算法。

DH算法开启了密钥交换的新思路。上一篇文章中提到的RSA算法也基于此思想,但是DH算法和RSA密钥交换并不完全相同。感兴趣的读者可以看看DH算法的数学原理。

DH算法开启了密钥交换的新思路。上一篇文章中提到的RSA算法也基于此思想,但是DH算法和RSA密钥交换并不完全相同。感兴趣的读者可以看看DH算法的数学原理。

3. 3. 1第一次连接

简单地说,第一次连接期间客户端和服务器之间的密钥协商和数据传输过程涉及DH算法的基本过程:

客户端向第一次连接的服务器发送客户端问候请求。

服务器生成一个质数p和一个整数g,同时生成一个随机数(打字错误,此处应为Ks_pri)作为私钥亚博登录网页版 ,然后计算服务器的公钥= mod p p,g三个元素将被打包为config,然后发送到客户端。

客户端随机生成自己的私钥,然后从config中读取g和p,然后计算客户端公钥= mod p。

客户端使用自己的私钥和从服务器发送的配置中读取的服务器公钥来生成密钥K = mod p榴莲app官网下载 ,以进行后续数据加密。

客户端使用密钥K加密业务数据,并添加其自己的公共密钥,该公共密钥将传递到服务器。

服务器根据自己的私钥和客户端公共密钥生成用于客户端加密的密钥K = mod p。

为了确保数据安全,上面生成的密钥K将只生成一次并使用一次,随后的服务器将根据相同的规则生成一组新的公钥和私钥,并使用这组公钥和私钥。私钥以生成新的秘密密钥M。

服务器将使用新的公共密钥和新的密钥M加密的数据发送到客户端。客户端这次根据新的服务器公钥及其原始私钥来计算密钥M,并将其解密。

客户端和服务器之间的后续数据交互是使用密钥M完成的,密钥K仅使用一次。

3. 3. 2不是第一个连接

如前所述,当客户端和服务器首次连接时,服务器将传输config程序包,其中包含服务器公钥和两个随机数。客户端将存储配置,该配置可在再次连接时直接使用。这样就跳过了这个1RTT,实现了0RTT服务数据的交互。

客户端保存配置有时间限制。配置失败后,仍然需要在第一次连接期间进行密钥交换。

3. 4个转发安全问题

转发安全性是密码学领域的一个技术术语。看一下百度上的解释:

Forward Secrecy或Forward Secrecy是密码术中通信协议的安全属性,这意味着长时间使用的主密钥的泄漏不会导致过去会话密钥的泄漏。

转发安全性可以保护过去的通信免受将来密码或密钥暴露的威胁。如果系统具有前向安全性,则即使主密钥泄露,它也可以确保历史通信的安全性。主动攻击也是如此。

用外行人的术语讲,前向安全性意味着密钥泄漏将不会泄漏以前加密的数据。它只会影响当前数据,而不会影响先前的数据。

如前所述,当第一次连接QUIC协议时,将连续生成两个加密密钥。由于配置是由客户端存储的,因此如果服务器的私钥在此期间泄漏,则可以根据K = mod p来计算密钥K。

如果您一直使用此密钥进行加密和解密,则可以使用K解密所有历史消息。因此,随后生成一个新密钥,用于加密和解密,然后在交互完成时销毁它,从而实现前向安全性。

3. 5前向纠错

前向纠错是通信领域中的一个术语。看一下百科全书的解释:

前向纠错也称为前向纠错码。简称FEC是一种提高数据通信信誉的方法。在单向通信通道中,一旦发现错误,接收方将无权请求传输。

FEC是一种使用数据传输冗余信息的方法。当传输中发生错误时,将允许接收器重建数据。

听此描述是为了验证,并查看QUIC协议是如何实现的:

每次QUIC发送一组数据,它对这组数据执行异或运算,并将结果作为FEC数据包发送。接收到该组数据后,接收器可以根据数据包和FEC包执行校验和。错误更正。

3. 6连接迁移

几乎所有时间都在进行网络切换。

TCP协议使用五元组来表示唯一连接。当我们从4G环境切换到wifi环境时,手机的IP地址将会更改。此时,必须创建一个新的TCP连接以继续进行数据传输。

QUIC协议基于UDP,放弃了五元组的概念。它使用64位随机数作为连接ID使用udp协议,并使用该ID指示连接。

基于QUIC协议,在日常wifi和4G交换或在不同基站之间交换时,我们将不会重新连接,从而改善了业务层的体验。

4. QUIC的应用和前景

通过前面的一些介绍,我们可以看到,尽管QUIC协议是基于UDP实现的,但它实现并优化了TCP的所有重要功能,否则用户将不会购买。

QUIC协议的核心思想是将内核中实现的TCP协议的可靠传输,流控制,拥塞控制和其他功能转移到用户模式。同时,在加密传输方向上的尝试也促进了TLS 1. 3的发展。的发展。

但是,TCP协议功能太强大,许多网络设备甚至对UDP数据包采取了许多不友好的策略,将其拦截,导致成功连接速率下降。

领导者Google在自己的产品上做了很多尝试,而国内的腾讯公司也在QUIC协议上做了很多尝试。

其中,腾讯云对QUIC协议表现出极大的兴趣,并进行了一些优化。然后,在一些关键产品中,进行了连接迁移,QUIC成功率和耗时的弱网络环境的实验。有关环境的许多有价值的数据。

简要查看一组在移动Internet情况下不同丢包率下的腾讯云请求的耗时分布:

推广任何新事物都需要时间。已经出现很多年的HTTP 2. 0和HTTPS协议的普及程度没有预期的高,IPv6的情况也是如此亚博APp买球首选 ,但是QUIC表现出了强大的生命力,让我们拭目以待吧!

5.本文摘要

网络协议本身非常复杂。本文只能从整体角度简要解释重要部分。如果您对某一点感兴趣,可以查阅相关代码和RFC文档。

我们之前可能已经遇到过这个面试问题:

如何使用UDP协议实现TCP协议的主要功能。

我确实在笔试中遇到了这个问题。可以说我疯了,问题太大了。

但是看一下QUIC协议现在可以回答这个问题:基于UDP主体,TCP的重要功能被转移到用户空间来实现,从而绕过内核来实现用户模式的TCP协议,但是真正的实施仍然非常复杂。

技术进步不是白天和黑夜的事情,而是需要在实践中反复实践。

最后,感谢您的友好安排,并欢迎在文章结尾进行积极的讨论!

上一篇 S哈嘉瑜伽使我的生活充满欢乐