比如如何提升 0RTT 成功率,减少服务端的 CPU 消耗量,实现连接迁移和动态的拥塞控制算法等。 提升 0RTT 成功率 安全传输层虽然能够实现 0RTT,优势非常明显。 但问题是,不是每一次连接都能实现 0RTT,对于我们的客户端和服务端来讲,如何最大程度地提升 0RTT 的成功率? 0RTT 能实现的关键是 ServerConfig。 ServerConfig 到达服务端后,我们根据 ServerConfig ID 查找本地内存,如果找到了,即认为这个数据是可信的,能够完成 0RTT 握手。 用户握手请求落到任意一台 STGW 机器,从全局 Cache 集群都能找到相应的内容,实现 0RTT 握手。 加密性能的优化 签名计算 QUIC 实现 0RTT 的前提是 ServerConfig 这个内容签名和校验都没有问题。
比如如何提升 0RTT 成功率,减少服务端的 CPU 消耗量,实现连接迁移和动态的拥塞控制算法等。我们继续看下节。 6、QUIC 性能优化1:提升 0RTT 成功率 安全传输层虽然能够实现 0RTT,优势非常明显。 但问题是,不是每一次连接都能实现 0RTT,对于我们的客户端和服务端来讲,如何最大程度地提升 0RTT 的成功率? 0RTT 能实现的关键是 ServerConfig。 用户握手请求落到任意一台 STGW 机器,从全局 Cache 集群都能找到相应的内容,实现 0RTT 握手。 7、QUIC 性能优化2:加密性能的优化 7.1 签名计算 QUIC 实现 0RTT 的前提是 ServerConfig 这个内容签名和校验都没有问题。
比如如何提升 0RTT 成功率,减少服务端的 CPU 消耗量,实现连接迁移和动态的拥塞控制算法等。 提升 0RTT 成功率 安全传输层虽然能够实现 0RTT,优势非常明显。 但问题是,不是每一次连接都能实现 0RTT,对于我们的客户端和服务端来讲,如何最大程度地提升 0RTT 的成功率? 0RTT 能实现的关键是 ServerConfig。 ServerConfig 到达服务端后,我们根据 ServerConfig ID 查找本地内存,如果找到了,即认为这个数据是可信的,能够完成 0RTT 握手。 用户握手请求落到任意一台 STGW 机器,从全局 Cache 集群都能找到相应的内容,实现 0RTT 握手。 加密性能的优化 签名计算 QUIC 实现 0RTT 的前提是 ServerConfig 这个内容签名和校验都没有问题。
做到安全高比例的 0RTT,以降低业务的连接延迟。 而 QUIC 请求可以做到发 HTTP 请求之前的 0RTT 消耗。 为什么 QUIC 可以做到 0RTT 呢?这里分为 QUIC 握手协议和 IETF QUIC 的 TLS1.3 协议。 而在后续请求中,客户端可以直接带上之前的 server config 来完成 0RTT 请求。 所以,这里的关键是:如何提升 0RTT 的比例。 关于 0RTT 的优化目前我们做了不少工作,对于一些不敏感的数据传输,我们可以做到 100% 0RTT。 QUIC 连接迁移实现 QUIC 连接迁移是 QUIC 协议一个很重要的特点。 针对 RTT 敏感的短连接业务,我们大大提升了 0RTT 的比例,某些场景可以做到 100% 0RTT。
比如如何提升 0RTT 成功率,减少服务端的 CPU 消耗量,实现连接迁移和动态的拥塞控制算法等。 提升 0RTT 成功率 安全传输层虽然能够实现 0RTT,优势非常明显。 但问题是,不是每一次连接都能实现 0RTT,对于我们的客户端和服务端来讲,如何最大程度地提升 0RTT 的成功率? 0RTT 能实现的关键是 ServerConfig。 ServerConfig 到达服务端后,我们根据 ServerConfig ID 查找本地内存,如果找到了,即认为这个数据是可信的,能够完成 0RTT 握手。 用户握手请求落到任意一台 STGW 机器,从全局 Cache 集群都能找到相应的内容,实现 0RTT 握手。 加密性能的优化 签名计算 QUIC 实现 0RTT 的前提是 ServerConfig 这个内容签名和校验都没有问题。
Microsoft:MsQUIC 今年才正式开源,kQUIC 立项之初 MsQUIC 尚未对外发布,且主要针对 Windows 跨平台,目前功能上并不完善,也不支持 0RTT。 0RTT 成功率与加密性能优化 0RTT 是 QUIC 的一个重要特性。 但是服务端的 SCFG 是随机生成的,服务器 A 生成的 SCFG 对应的 ID,在服务器 B 上是不能识别的,这样就限制了 0RTT 的成功率。 为了解决这个问题,kQUIC 做了两个解决方案: 如果对安全性要求不高,可以让每个服务器都生成相同的 SCFG,这样就实现了跨服务器的 SCFG 识别,可以有效提高 0RTT 的成功率。 QUIC 协议的支持、完善的上报信息,并基于对数据指标的分析和对协议的深入理解,对网络库中持续进行了多项协议相关的优化,包括预建连、SSL Session 复用优化、客户端 BBR、POST 请求 0RTT
技术点2.提升 0RTT 握手比例 这里先 介绍 QUIC 0RTT 原理。前文我们介绍过, QUIC 支持传输层握手和安全加密层握手都在一个 0RTT 内完成。 TLS1.3 本身就支持加密层握手的 0RTT,所以不足为奇。而 QUIC 如何实现传输层握手支持 0RTT 呢? 这里我们先声明下,跟 TLS 类似,QUIC 的 0RTT 握手,是建立在已经同一个服务器建立过连接的基础上,所以如果是纯的第一次连接,仍然需要一个 RTT 来获取这个 STK。 理论上说,只要客户端缓存了这个 STK,下次握手的时候带过来,服务端便可以直接校验通过,即实现传输层的 0RTT。 除了连接迁移以外,我们还提出了 0RTT 建联提升方案、客户端智能选路方案,以最大化 QUIC 在移动端上的收益。
0RTT 建立链接 RTT((Round-Trip Time)顾名思义就是往返时延的意思,0RTT的话意思就是QUIC可以在第一次发送的时候就带上数据,熟悉我们TCP的同学应该知道,TCP会有一个三次握手那么实际上也就是会有 那么0RTT的建立链接QUIC是怎么做到的呢? 这里得先说一下QUIC的0RTT并不是完全的0RTT,他同样需要1RTT去做一次秘钥协商,在QUIC中使用的是Diffie-Hellman密钥交换,该算法是一种建立密钥的方法,并非加密方法,但其产生的密钥可用于加密 在后续的过程中只要和同一个服务器建立链接都是直接发送数据,不需要再次协商秘钥,从而实现了后续的0RTT。 ? 参考文章: QUIC协议是如何做到0RTT加密传输的: https://blog.csdn.net/dog250/article/details/80935534 技术扫盲-新一代基于UDP的低延时网络传输层协议
鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:HTTP3.0 的底层传输协议,蚂蚁集团支付宝客户端团队与接入网关团队于 2018 年下半年开始在移动支付、 技术点2.提升 0RTT 握手比例 这里先 介绍 QUIC 0RTT 原理。前文我们介绍过, QUIC 支持传输层握手和安全加密层握手都在一个 0RTT 内完成。 TLS1.3 本身就支持加密层握手的 0RTT,所以不足为奇。而 QUIC 如何实现传输层握手支持 0RTT 呢? 理论上说,只要客户端缓存了这个 STK,下次握手的时候带过来,服务端便可以直接校验通过,即实现传输层的 0RTT。 除了连接迁移以外,我们还提出了 0RTT 建联提升方案、客户端智能选路方案,以最大化 QUIC 在移动端上的收益。
QUIC基于UDP,很好解决了上述问题,支持0rtt connect、多路复用和连接迁移,还支持热插拔的拥塞控制策略,同时,也支持FEC。 关于0rtt,传输层由于用的是UDP,这个好理解,另外QUIC支持加密,所以也需要支持加密层的0rtt。 QUIC是通过客户端支持ServerConfig缓存(存储 Diffie-Hellman等加密算法的密钥信息)来实现0rtt。 针对0rtt的安全性问题(缓存密钥信息有泄露风险),QUIC提供了密钥升级的方案,初始包使用不同的initial key进行加密。 此外,在分布式环境下,后台server需要有共享client信息的能力,来提高0rtt成功率。
鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:HTTP3.0 的底层传输协议,蚂蚁集团支付宝客户端团队与接入网关团队于 2018 年下半年开始在移动支付、 技术点2.提升 0RTT 握手比例 这里先 介绍 QUIC 0RTT 原理。前文我们介绍过, QUIC 支持传输层握手和安全加密层握手都在一个 0RTT 内完成。 TLS1.3 本身就支持加密层握手的 0RTT,所以不足为奇。而 QUIC 如何实现传输层握手支持 0RTT 呢? 理论上说,只要客户端缓存了这个 STK,下次握手的时候带过来,服务端便可以直接校验通过,即实现传输层的 0RTT。 除了连接迁移以外,我们还提出了 0RTT 建联提升方案、客户端智能选路方案,以最大化 QUIC 在移动端上的收益。
技术点2.提升 0RTT 握手比例 这里先 介绍 QUIC 0RTT 原理。前文我们介绍过, QUIC 支持传输层握手和安全加密层握手都在一个 0RTT 内完成。 TLS1.3 本身就支持加密层握手的 0RTT,所以不足为奇。而 QUIC 如何实现传输层握手支持 0RTT 呢? 这里我们先声明下,跟 TLS 类似,QUIC 的 0RTT 握手,是建立在已经同一个服务器建立过连接的基础上,所以如果是纯的第一次连接,仍然需要一个 RTT 来获取这个 STK。 理论上说,只要客户端缓存了这个 STK,下次握手的时候带过来,服务端便可以直接校验通过,即实现传输层的 0RTT。 除了连接迁移以外,我们还提出了 0RTT 建联提升方案、客户端智能选路方案,以最大化 QUIC 在移动端上的收益。
下图是开启tcp FastOpen,可以做到0RTT。大大降低了建立连接的时间。 tcp fastopen相对于quic,不需要进行额外的开发和适配,复用现有的架构,就可以实现0RTT。
QUIC 功能 0RTT 通过使用类似 TCP 快速打开的技术,缓存当前会话的上下文,在下次恢复会话的时候,只需要将之前的缓存传递给服务端验证通过就可进行传输。 0RTT 建连可以说是 QUIC 相比 HTTP/2 最大的性能优势。那什么是 0RTT 建连呢? 这里面有两层含义: 1、传输层 0RTT 就能建立连接。 2、加密层 0RTT 就能建立加密连接。 由于建立在 UDP 的基础上,同时又实现了 0RTT 的安全握手,所以在大部分情况下,只需要 0 个 RTT 就能实现数据发送,在实现前向加密的基础上,并且 0RTT 的成功率相比 TLS 的会话记录单要高很多
然而,QUIC协议可以实现在第一个包就可以包含有效的应用数据,从而实现0RTT,但这也是有条件的。 QUIC的0RTT也是需要条件的,对于第一次交互的客户端和服务端0RTT也是做不到的,毕竟双方完全陌生。 因此,QUIC协议可以分为首次连接和非首次连接,两种情况进行讨论。 非首次连接 前面提到客户端和服务端首次连接时服务端传递了config包,里面包含了服务端公钥和两个随机数,客户端会将config存储下来,后续再连接时可以直接使用,从而跳过这个1RTT,实现0RTT的业务数据交互
3.2 0RTT 建链 衡量网络建链的常用指标是RTT Round-Trip Time,也就是数据包一来一回的时间消耗。 ? 然而,QUIC协议可以实现在第一个包就可以包含有效的应用数据,从而实现0RTT,但这也是有条件的。 ? QUIC的0RTT也是需要条件的,对于第一次交互的客户端和服务端0RTT也是做不到的,毕竟双方完全陌生。 因此,QUIC协议可以分为首次连接和非首次连接,两种情况进行讨论。 3.3.2 非首次连接 前面提到客户端和服务端首次连接时服务端传递了config包,里面包含了服务端公钥和两个随机数,客户端会将config存储下来,后续再连接时可以直接使用,从而跳过这个1RTT,实现0RTT
3.2 0RTT 建链 衡量网络建链的常用指标是RTT Round-Trip Time,也就是数据包一来一回的时间消耗。 然而,QUIC协议可以实现在第一个包就可以包含有效的应用数据,从而实现0RTT,但这也是有条件的。 QUIC的0RTT也是需要条件的,对于第一次交互的客户端和服务端0RTT也是做不到的,毕竟双方完全陌生。 因此,QUIC协议可以分为首次连接和非首次连接,两种情况进行讨论。 3.3.2 非首次连接 前面提到客户端和服务端首次连接时服务端传递了config包,里面包含了服务端公钥和两个随机数,客户端会将config存储下来,后续再连接时可以直接使用,从而跳过这个1RTT,实现0RTT
在性能方面最大的提升就是能够实现1RTT的完全握手,能够实现0RTT的简化握手。 上图左边就是1RTT的完全握手,右边就是0RTT的简化握手,也就是说应用层数据可以握手消息一起发出来,而且都是经过加密的。 关于TLS1.3协议的原理和0RTT的详细过程我就不做详细描述了,因为还没有正式发布,那这里为什么又给大家介绍呢?因为如果大家想尝鲜的话,现在就可以体验了。 因为之前提到的一系列方案,就算是0RTT握手,也会有一些数据校验和计算的工作。预建连接的效果也非常明显,对性能的提升至少是400ms以上。那如何预建连接呢? 2.当前支持0RTT握手,等TLS1.3发布后,也会使用TLS1.3的0RTT握手协议。 3.使用UDP传输,没有TCP连接建立的耗时。
不同业务也可以根据业务特点利用QUIC的特性去做一些优化: 低连接延时:QUIC由于基于UDP,无需TCP连接,在最好情况,短连接下QUIC可以做到0RTT开启数据传输。 多协议推流平台对QUIC协议栈0RTT,1RTT,小包,高带宽等多场景做了大量的性能优化,解决了QUIC严重消耗CPU资源的几个瓶颈。在小包请求上性能基本可以达到HTTPS的90%。 适用场景: 基于以上优点,QUIC更适合运用在网络丢包率较高的环境,因为QUIC具有0RTT快速连接能力、丢包重传中ACK回复的block较大并且在拥塞控制方面表现非常优秀。 除此之外QUIC也适合用于长距离传输当中,因为网络传输RTT较高,QUIC在连接断开后重连是0RTT,传输数据更加高效。 改进点主要是支持1rtt、0rtt握手等特性。 适用场景: 基于以上特点, SRT适合点到点流媒体传输,大主播质量保证,移动直播。目前很多大客户已经在不同规模的应用SRT。
0RTT 建连可以说是 QUIC 相比 HTTP2 最大的性能优势。那什么是 0RTT 建连呢? 这里面有两层含义: 1.传输层 0RTT 就能建立连接。 2.加密层 0RTT 就能建立加密连接。 由于建立在 UDP 的基础上,同时又实现了 0RTT 的安全握手,所以在大部分情况下,只需要 0 个 RTT 就能实现数据发送,在实现前向加密的基础上,并且 0RTT 的成功率相比 TLS 的会话记录单要高很多