提速 40%,融云基于 QUIC 深度优化通信协议

 8 月 17 日(本周四),融云直播课从排查问题到预警风险,社交产品如何更好保障体验、留住用户?欢迎点击报名~

各分位(P99、P95、P50)连接速度提升 30%~50%;关注【融云全球互联网通信云】了解更多

网络延迟低连接耗时终端占比提升 50%,高连接耗时终端占比压缩至 1% 以内;

在基础设施受限的弱网地区和连接效果难保证的跨网场景下,均可获得与正常网络相当的顺畅体验。

——这些都是融云基于 QUIC 深度优化通信协议的实践效果。

作为中国互联网出海浪潮中最重要的基建公司之一,融云一直致力于提升全球网络的“最后一公里体验”。

基于 QUIC 深度优化通信协议,融云实现了多链路智能竞速选路,进一步降低连接时长,保证链路不仅连得快,而且连得稳。


关于 QUIC

QUIC(Quick UDP Internet Connection)是 Google 提出的一个基于 UDP 的传输协议,因其高效的传输效率多路并发的能力,成为下一代互联网协议 HTTP/3 的底层传输协议。

2021 年 IETF(Internet Engineering Task Force,互联网工程任务组)发布 RFC 9000,标志着该协议正式成为一个标准协议。

伴随着移动互联网的发展,网络交互场景越来越丰富并对及时性提出更高要求,传统 TCP 固有的性能瓶颈越来越不能满足这一需求,需要引入 UDP。两者的特性分别为:

UDP(User Datagram Protocol)用户数据报协议于 1980 年在 RFC 768 中定义,主要特性是数据传输效率快

TCP(Transmission Control Protocol)传输控制协议于 1981 在 RFC 793 中定义,主要特性是数据传输可靠性

基于 UDP 与 TCP 的特性,如果要实现可靠数据传输,TCP 是较为简单的选型,但是在网络传输通道质量较差的情况下,如丢包、延迟率较高、带宽受限等,会产生建立连接的握手延迟大、队头阻塞、网络拥塞等问题。

为了解决移动端场景常见的弱网网络切换问题,同时兼容互联网上已经运转多年的网络设备,Google 提出了应用层的 QUIC 协议。

QUIC 融合了 UDP 协议的速度、性能与 TCP 的安全、可靠,具备安全、高效、可靠等传输特性。

建连更快

相比于 TCP+TLS,QUIC 建联速度提升了 1~3 倍。其客户端第一次建连的握手协商需 1-RTT(Round-Trip Time,往返时延)。

已建连的客户端重新建连时,通过应用数据和协商参数合并的方式,QUIC 重用在先前的连接中协商的参数,可以做到 0-RTT,使得客户端能够在握手完成前就发送应用数据。

对比来看:

TCP 需要 1-RTT;
TCP+TLS1.2 需要 3-RTT;
TCP+TLS1.3 需要 2-RTT。

TCP 为了可靠性设计了一系列的规则,比如建立 TCP 连接时需要进行三次握手,这会造成更多的 RTT 花费及很多字节的额外开销。

◾ TCP 1-RTT 流程图:

◾ TCP 1-RTT 交互数据流:

TLS1.2 通过 KeyExchange 进行密钥协商,即 ServerKeyExchange、ClientKeyExchange,密钥交换本身就需要一个交互来回,所以总共有四次握手交互,详细参考 RFC 5246。

◾ TLS1.2 2-RTT 流程图:

◾ TLS1.2 2-RTT 交互数据流:

TLS1.3 借助扩展进行密钥交换,只需要三次握手交互,详细参考 RFC 8446。

◾ TLS1.3 1-RTT 流程图:

◾ TLS1.3 1-RTT 交互数据流:

QUIC 基于 UDP,只需花费 0~1-RTT 就可以建立连接。

客户端第一次建连的握手协商需 1-RTT,建联完成后即可发送数据。

◾ QUIC 1-RTT 流程图:

◾ QUIC 1-RTT 交互数据流:

已建连的客户端重新建连可以使用之前协商好的缓存信息来恢复连接,仅需 0-RTT 时间。

◾ QUIC 0-RTT 流程图:

◾ QUIC 0-RTT 交互数据流:

可插拔的拥塞控制

QUIC 协议默认使用了 TCP 协议的 Cubic 拥塞控制算法,作为应用层协议,它也支持 CubicBytes、Reno、RenoBytes、BBR、PCC 等拥塞控制算法,用户可以插拔式选择。

无队头阻塞多 Stream

QUIC 给每一个 Stream 都分配了一个独立的滑动窗口,使得一个连接上的多个 Stream 之间没有依赖关系,都是相互独立的、各自控制的滑动窗口。

假如 Stream3 丢了一个 UDP 包,也只会影响 Stream3 的处理,不会影响其他 Stream。

◾ TCP 连接

◾ QUIC 连接

支持连接迁移

QUIC socket 采用 UDP 收发数据,一个连接用一个 ConnectionID 为唯一标识。

当用户设备在蜂窝网络和 Wi-Fi 等不同网络切换时,只要数据包中的 ConnectionID 不变,服务端都可以将不同的四元组关联到同一个连接上下文。

对用户来说,无需断线重连,可以无感知地完成信号切换,在越网情况下会有更好的表现

◾ TCP 重连 VS. QUIC 连接迁移

安全性

相比于 TCP,QUIC 是 UDP 与 TLS 的结合,在保证连接速度的同时保证了安全性,而 TCP 需要额外增加 TLS 相关安全传输层协议封装。

◾ TCP+TLS VS. QUIC


融云优化实践及效果

移动互联网深化发展,我们的生活、工作已经全面实现移动化,各种移动端 App 成为了承载我们生活、工作场景的关键入口。

而移动端应用体验的一致性对网络有着更高要求,比如拿着手机进入电梯,就会遇到网络切换而重新建连的问题。亦或者,在融云服务中国互联网出海的广泛实践中,新兴市场参差不齐的网络基建是最令开发者头疼的难题之一。

而 QUIC 的更快建连连接迁移等特性是解决以上问题的有效方案,因此融云基于 QUIC 对私有通信协议进行优化

优化实践

为保证链路的平滑过渡以及通道链路的稳定性,在调整现有链路通道时,融云优化升级整体设计及实施依照 TCP/UDP 通道互补、业务无感知、多链路竞速等准则。

TCP/UDP 双通道

在原有 TCP 链路的基础上增加 QUIC 接入链路,可以在保证链路可靠性的同时提升速度。

QUIC 与全球加速链路结合,还可更好降低连接时延。

在网络状态不稳定的地区,当遇到网络抖动时,QUIC 有更友好的丢包重传策略,可以做到丢哪个包补哪个包,而不需要对所有的包进行重传。

无感知的通道升级

为保证对现有业务的无感升级,通过客户端与服务端动态协商确认客户端与服务端双向支持协议,下发 QUIC 接入地址,在保持现有协议层次不变的基础上对融云私有通信协议进行 QUIC 封装,上层业务无感知。

◾ 协议协商交互流程
客户端与服务端动态协商,在双方都支持 QUIC 链路的情况下开启 QUIC。

◾ 协议栈层次
为保证上层业务无感知,采用 QUIC 对通信协议进行封装,上层业务接口无变动。

多链路竞速选路更优

考虑到海外不同地区的网络特点,在某些地区,个别运营商可能对 UDP 进行 QoS 限速,融云采用 TLS 优先,TCP 为辅,QUIC 保底的方式进行链路接入。

多链路竞速在保证链路优先级的情况下择优选择。

这样,在保证接入链路稳定性的同时保证连通率、连接速度。

优化效果

连接耗时降低

QUIC 协议握手连接更快,允许客户端无需等待 TLS 握手完成就开始发送应用程序数据,从而达到快速建立连接的效果。

从客户端数据看,P50 降低 30%,P95 降低 45% 以上,P99 降低 50% 以上,越是长尾指标提升越明显。

从服务端看,Socket 低耗时占比提升 50%,高耗时的连接占比压缩在 1% 以内,服务器的吞吐量得到提升。

弱网质量与网络兼容性提升

在一些弱网丢包和延迟的混合场景下,QUIC 比 TCP 有 10% 左右的提升。

不过,在不同国家和地区,对 UDP 以及 TLS 加密的网络兼容策略不同,需要配合多通道探测和历史策略下发一起使用。

总之,针对“最后一公里体验”难题,融云不断优化服务、迭代产品,以更快连接、更高并发服务开发者丰富多样的业务探索。本次通信协议优化,是融云作为专业、简单、稳定的通信云服务商在用户体验和服务效率方面的又一次稳步跃升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/94069.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ComPDFKit PDF SDK for Windows Crack

ComPDFKit PDF SDK for Windows Crack 添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 …

Spring-aop特点,专业术语及案例演示

一.aop简介 AOP(Aspect-Oriented Programming)是Spring框架的一个重要特性,它通过将横切关注点(cross-cutting concerns)从核心业务逻辑中分离出来,以模块化的方式在整个应用程序中重复使用。以下是关于AOP…

CSS自己实现一个步骤条

前言 步骤条是一种用于引导用户按照特定流程完成任务的导航条,在各种分步表单交互场景中广泛应用。例如:在HIS系统-门诊医生站中的接诊场景中,我们就可以使用步骤条来实现。她的执行步骤分别是:门诊病历>遗嘱录入>完成接诊…

【数据结构】堆

文章目录 优先级队列几点说明小根堆大根堆 建堆算法向下调整算法 & 初始化堆代码:向上调整算法 & 插入删除代码: 时间复杂度手稿: 优先级队列 在优先级队列中存储的元素具有优先级,可以返回优先级较高的元素。 逻辑结构采…

记录一下基于jeecg-boot3.0的待办消息移植记录

因为之前没有记录,所以还要看代码进行寻找,比较费劲,所以今天记录一下: 1、后端 SysAnnouncementController 下面函数增加待办的几个显示内容给前端用 具体代码如下: /*** 功能:补充用户数据&#xff0c…

低成本无刷高速吹风机单片机方案

高速吹风机的转速一般是普通吹风机的5倍左右。一般来说,吹风机的电机转速一般为2-3万转/分钟,而高速吹风机的电机转速一般为10万转/分钟左右。高转速增加了高风速。一般来说,吹风机的风力只有12-17米/秒,而高速吹风机的风力可以达…

Nginx的安装及负载均衡搭建

一.Nginx的安装 1)准备安装环境 yum install -y make gcc gcc-c pcre-devel pcre zlib zlib-devel openssl openssl-develPERE PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。 nginx的http模块使用pcre来解…

CTFshow 限时活动 红包挑战7、红包挑战8

CTFshow红包挑战7 写不出来一点&#xff0c;还是等了官方wp之后才复现。 直接给了源码 <?php highlight_file(__FILE__); error_reporting(2);extract($_GET); ini_set($name,$value);system("ls ".filter($_GET[1])."" );function filter($cmd){$cmd…

彻底卸载Android Studio

永恒的爱是永远恪守最初的诺言。 在安装Android Studio会有很多问题导致无法正常运行&#xff0c;多次下载AS多次错误后了解到&#xff0c;删除以下四个文件才能彻底卸载Android Studio。 第一个文件&#xff1a;.gradle 路径&#xff1a;C:\Users\yao&#xff08;这里yao是本…

双向-->带头-->循环链表

目录 一、双向带头循环链表概述 1.什么是双向带头循环链表 2.双向带头循环链表的优势 3.双向带头循环链表简图 二、双向带头循环链表的增删查改图解及代码实现 1.双向带头循环链表的头插 2.双向带头循环链表的尾插 3.双向带头循环链表的头删 4.双向带头循环链表的尾删…

Swift 基础

工程目录 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 点击下载代码&#xff1a;swift-01

PHP 使用ThinkPHP实现电子邮件发送示例

文章目录 首先我们需要设置我们的邮箱客户端授权&#xff0c;获取到授权码找到我们的邮箱设置去账号中找到这一堆服务&#xff0c;找到后开启smtp服务开启服务后管理服务 接下来需要去下载相应的第三方类库(我这里使用的是PHPMailer)在thinkPHP中封装一下邮件服务类实际调用效果…

Web和云开发,Rust会起飞?

Web和云开发&#xff0c;Rust会起飞&#xff1f; 一、前言 二、大厂偏爱&#xff0c;Rust的未来 三、Rust做Web的雄心 四、有必要换Rust做Web&#xff1f; 1.效率和性能 2.可靠性和可维护性 五、Rust先苦后甜 六、用Rust前的几个问题 七、开发界的强者 一、前言 去年…

小研究 - 主动式微服务细粒度弹性缩放算法研究(二)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放&#xff0c;忽略了能够充分利用单台服务器资源的细粒度垂直缩放&#xff0c;从而导致资源浪费。为此&#xff0c;本文设计了主动式微服务细粒度弹性缩放算法…

工博士与纷享销客达成战略合作,开启人工智能领域合作新篇章

近日&#xff0c;工博士与纷享销客在上海正式签署了战略合作协议&#xff0c;正式拉开了双方在人工智能与数字营销领域的合作序幕。这次合作将为双方带来更多机遇和发展空间&#xff0c;并为全球人工智能领域的客户提供更高效、智能的CRM解决方案。 < 双方项目人员合影 >…

【分布式共识算法】Basic Paxos 算法

basic paxos算法&#xff1a;描述的是多个节点就某个值达成共识。 muti-paxos 算法&#xff1a;描述的是执行多个basic paxos实例&#xff0c;就一系列值达成共识。 共识其实&#xff0c;比如当多个客户端请求服务器&#xff0c;修改同一个值X 多个阶段达成共识。 原理 角色…

07_Hudi案例实战、Flink CDC 实时数据采集、Presto、FineBI 报表可视化等

7.第七章 Hudi案例实战 7.1 案例架构 7.2 业务数据 7.2.1 客户信息表 7.2.2 客户意向表 7.2.3 客户线索表 7.2.4 线索申诉表 7.2.5 客户访问咨询记录表 7.3 Flink CDC 实时数据采集 7.3.1 开启MySQL binlog 7.3.2 环境准备 7.3.3 实时采集数据 7.3.3.1 客户信息表 7.3.3.2 客户…

【CTF-web】备份是个好习惯(查找备份文件、双写绕过、md5加密绕过)

题目链接&#xff1a;https://ctf.bugku.com/challenges/detail/id/83.html 经过扫描可以找到index.php.bak备份文件&#xff0c;下载下来后打开发现是index.php的原代码&#xff0c;如下图所示。 由代码可知我们要绕过md5加密&#xff0c;两数如果满足科学计数法的形式的话&a…

图片懒加载指令-vueUse

基于Vue的自定义钩子集合 https://vueuse.org/ 适用于Vue 3和Vue2.7版本之后 基于vueUse定义懒加载指令

ByteBuffer 使用

ByteBuffer 使用 1 java.nio包中的类定义的缓冲区类型2 缓冲区常用属性2.1缓冲区的容量(capacity)2.2 缓冲区的位置(position)2.3 缓冲区的限制(limit)2.4 缓冲区的标记(mark)2.5 剩余容量 remaining/hasRemaining 3 缓冲区常用方法3.1 创建缓冲区3.1.1 allocate方法3.1.2 wrap…