会中切换网络总掉线?腾讯会议用这种方案让你好好开会

c2710b39e05195861232be8adb512582.png

0a11ee0ddc27fcbd075e0547f6a196e1.gif

👉腾小云导读

也许你有这样的体验:当你加入腾讯会议开会,老板正在发布重要任务时,你恰好要进电梯时 wifi 切换成了 cellular,画面开始「转菊花」,网络断开重连却需要好久,最终老板的指示你一个字都没听清楚0bafaaf9501d9e09753d4110c7cf9ed4.png。这个问题,要从会议的传输协议开始说起。会议团队遇到了网络切换的难题,是怎么解决的呢?欢迎继续往下阅读,看看腾讯会议团队的思路。

👉看目录,点收藏

1 传统 TCP+TLS 套装有哪些弊端

2 QUIC 带着一大堆 buff 来了:条件分析

3 尝试吃掉 QUIC 这只大螃蟹:解决方案

4 蟹钳厉害,务必小心:难点挑战

5 螃蟹果然美味:未来展望

6 路漫漫其修远兮:优化成果

01

传统 TCP+TLS 套装有哪些弊端

腾讯会议的业务特性决定了客户端和服务器需要建立长连接,而且要保证安全可靠,因此我们在选择传输层协议时采用了传统 TCP+TLS 套装。TCP 协议提供了可靠传输通道,TLS 加密协议为通道提供了安全保障。TCP 连接建立需要经过三次握手,在此基础上TLS 握手协议又需要四次握手。

因此,在正式开始数据通信之前,建立 TCP 连接需要 1.5 个 rtt,完成通道的 TLS 加密需要 1 个 rtt (TLS1.3),会议业务整个握手总体流程如图 1 所示:

4d014c0a6500d910ff1948d9d64f24ab.png

图 1 基于 TCP+TLS 技术的长链接建立流程

从图 1 可以看到:统计数据表明,所有登录失败的用户中,有 41.53% 的用户是因为连接建立超时导致登录失败。因为弱网情况下rtt 较大,如果连接建立的流程复杂的话必然导致完成握手的耗时较多,超时的可能性更大。也就是文中开头提到的:重新连接耗时比较久。因此,化握手环节,减少登录耗时,提高登录成功率和弱网抗性是需要解决的问题。

那为什么目前的机制下,wifi 和 cellular 之间互相切换需要断开重连呢?因为 TCP 协议使用一个四元组来标识一个长链接、源 IP 地址、目的 IP 地址、源端口、目的端口。当用户设备网络在 wifi 和 cellular 之间切换时,源 IP 会发生变化。因此 TCP 天然无法支持在 wifi 和 cellular 之间无缝切换,也就导致一旦用户切换网络,整个长链接必须断开重连,否则数据无法继续传输。表现在会议产品上就是会出现「转菊花」场景,等待重连成功,见图 2:

fb390044a9c7addab1543a8e07201528.gif

图 2 TCP连接情况下 cellular/wifi 切换表现

在断开重连期间,所有指令数据都无法发送接收。日常会议过程中,当用户进出电梯或者偶现 wifi 信号不好,导致 wifi 和 cellular 互相频繁切换的场景是非常常见的。也就是文中开头说到的场景了。这样的体验其实非常影响用户会议有效性。因此让数据通道能够实现在 wifi 和 cellular 之间无缝切换,更是亟待解决的问题。

02

QUIC 带着一大堆 buff 来了!

QUIC 协议与 TCP 相比,本身就具有快速建立连接的优势(0/1-rtt),而且同样是可靠传输通道,自带加密通信 buff,省略了 TLS 的握手步骤。QUIC 协议的握手流程见图 3:

0469ca8430e0a3e4622fa265992a10db.png

图 3 QUIC 握手流程

如图 3 所示,QUIC 在初次建立连接时, 只需要 1 个 rtt。客户端收到服务端发送的 Rejection 之后,会在下次发送数据时带上客户端的加密信息,跟应用数据一起发送到服务端,从而在一个 rtt 里完成握手和数据加密动作。相较于 TCP+TLS,它减省了 1.5 个 rtt。结合会议业务长连接握手流程,又能省掉 TLS 握手之前的协商过程。应用 QUIC 协议的长链接建立流程如图 4 所示:

51e5edab9fe861d8ad0833c8e88c890b.png

图 4 基于 QUIC 技术的长链接建立流程

结合会议长连接建立的整体过程,理论上连接建立耗时能够减少 40%~50%。这其中还没有包括 QUIC 协议本身比 TCP 在某些场景下传输效率更高带来的收益。

同时,QUIC 协议的设计是可以支持连接迁移(Connection Migration),因为 QUIC 是使用 connectionID 来唯一标识一个链接。当客户端网络在wifi 和 cellular 之间切换时,即使源 IP 发生改变,这个长链接的 connectionID 不变,数据通道就不会断。连接迁移流程如图 5 所示:

417358fedb741649e8cbb862a87e6304.png

图 5 连接迁移UML序列图

概括如下:

  • 连接迁移之前,客户端的 IP1,使用非探测包(non-probing packet)和服务端进行通信。

  • 客户端的 IP 变成 2,它可以发送包含非探测帧(non-probing frames)的包,将连接迁移到新的地址。

  • 客户端在新路径启动路经验证,验证新路径的可达性。

  • 客户端发送包含 path_challenge 帧的探测包(probing packet),path_challenge 帧里面包含一个不可预测的随机值。

服务端在 path_response 帧里面包含前一步 path_challenge 接收到的随机值,响应探测包(probing packet)。

客户端接收到服务端的 path_response,验证 payload 里面的值是否正确。

同样的,服务端也需要使用路经验证,验证客户端对其新IP地址的所有权。

因此,引入 QUIC 协议之后的长链接能够做到在 wifi 和 cellular 之间的无缝切换,而不必重新建立连接。用户在会议中发生网络切换场景时,音视频数据和开关麦克风/摄像头等等网络操作都可以直接续传,用户是完全无感知的。

03

尝试吃掉 QUIC 这只大螃蟹:解决方案

QUIC 目前只有 http 协议的应用,那么它对于长链接的适用性怎么样呢?理论上完全可行,实际上我们一无所知,业界之前也没有做过这方面的尝试。但既然它如此满足需求,为什么不试一试呢?我们考察了业内比较完善的 quic 组件方案,详见图 6:

10b74646f7ea019b826b8bfd6a711e33.png

图 6 QUIC 方案选型

*注:cronet 仅暴露应用层 http 接口,无法满足传输层接口封装需求。QuicTransport 仅支持 TLS1.3 加密实现,无法与 stgw 互通,后者还停留在 quic 私有加密算法版本。

综合接入成本、使用广泛性和其他各方面考虑, TQUIC 是较优的选择。TQUIC 是由腾讯公司 stgw(secure tencent gateway) 团队提供的与其后台架构相辅相成的 sdk。它只封装了原始的 quic 功能接口,轻便易用。如果使用 stgw 的 quic 接入层服务,TQUIC 应该是首选。我们将 TQUIC sdk 集成到客户端,打造了新的客户端服务器交互架构。如图 7 所示:

075a883da69d3f13647314e48f8e95c2.png

图 7 QUIC 协议传输网络

接入之后,业务数据包传输没有任何问题。但是 tquic 基于 goolge 的 cronet 库实现,google 只实现了 android 端的连接迁移, 而腾讯会议的网络层是跨平台的设计。因此我们面临的一个重要问题是需要将连接迁移的特性扩展到全平台,通过分析 google 的 android 平台实现。该技术方案如图 8 所示:

f0a699d9e2ee8908480625cda843965c.png

图 8 cronet里实现的连接迁移

其中实现了对 android 平台的物理网络监听。在网络切换时,会收到系统通知,由于 ip 已经切换了, 原始 ip 绑定的 socket 已经无法继续通信。因此需要新建一个 socket 跟新的 ip 绑定,继续进行网络收发包,并且对原始socket 缓存中发送失败的包进行重发,从而完成网络通道的迁移。

通过对连接迁移的原理和 google 的代码分析,结合系统 socket 编程技术,引入跨平台通用的连接迁移技术方案,真正实现了移动端 wifi 和 cellular 的无缝切换!

04

蟹钳厉害,务必小心:难点挑战

2020 年开始投入 QUIC 预研时, QUIC 还没有在业界成为主流,主要的原因有以下几点:

  • 中间件为了保证 TCP 网络链路通畅,强制丢弃 UDP 包;

  • 机构和企业设置拦截防火墙,关闭了 QUIC 的通用端口。

而切换到新的建连方式,又面临了如下挑战:

  • 提供 QUIC 服务的服务器集群发生故障,导致 QUIC 大规模连接失败;

  • 引入 TQUIC 的 sdk,做的改造还没有经过外网的大量验证,可能带来crash,在长连接建立路径上发生 crash 将直接导致登录失败,会议所有功能都无法使用,这是致命的。

为了避免这些问题导致的 QUIC 不通,或者会议服务不可用的情况,在正式上线前,我们从四个方面进行了预防,规避和补救。

  • 从 TCP 切换到 QUIC 前,先进行嗅探,确认此路可通,才具备切换条件,而且连通性在使用过程中也会进行刷新;

  • 通过云端配置 QUIC 开关,可以进行地区,版本,网段,具体用户等粒度的控制,进行 QUIC 功能的灰度和日常容灾;

  • 使用 QUIC 过程中,一旦产生协议层面的错误,就降级成 TCP;

  • 在 QUIC 长连接建立过程中设置 crash 保护,一旦发生 QUIC 引入的crash,降级成 TCP,避免连续 crash;

总结如下图:

c4f87c72322e8922b8b2059ac38db162.png

图 9 QUIC 开启和在线降级策略

在正式灰度 QUIC 之前,我们统计了嗅探数据:外网的 QUIC 连通性达到98% 以上,所以理论上是可以全面铺开的。完成这一系列的防护措施之后,才开始灰度,2021 年已经完成全量。

关于 QUIC 的知识科普,官方的学习资料和一些科技大佬的解析都非常通俗易懂、值得学习。如果各位感兴趣的话,可以在公众号后台回复 QUIC 领取。

05

螃蟹果然美味:优化成果

通过将 QUIC 协议引入到建立客户端和服务器之间的长链接过程,并结合腾讯会议产品的登录握手协议,利用 QUIC 的快速握手同时通道加密的特性和连接迁移特性,取得了较大的优化效果。

根据线上数据统计,登录平均耗时优化效果达 48.6%。因为登录耗时高产生的超时问题也得到改善,进而提高了登录成功率,优化效果达 0.09%。

在实际会议场景中,大家用得最多的应该是开关麦和开关摄像头功能。有过会议体验的人应该有所感触,网络不是很好的时候,点击开麦按钮,半天都没有反应,令人捉急。或者要关麦的时候怎么都关不了......这些尴尬情况在使用QUIC 之后也得到了有效改善。

QUIC 协议的拥塞控制算法比 TCP 更加灵活。因为加大了 sack,所以其丢包重传策略也比 TCP 更高效,可以有效增加弱网抗性。根据数据统计,会议中开关麦成功率,开关摄像头等等关键信令成功率都得到不同程度的提升。

在添加网络损伤场景下,QUIC 连接也表现出比 TCP 更好的网络抗性.通过专业网络损伤仪模拟不同的弱网场景,在加大丢包率和抖动的情况下,TCP 长链接的在线心跳在丢包率 70% 场景下会断开。而 QUIC 长链接,同样的心跳策略能扛住 80% 丢包率,如图 10 所示。

5effff98de9a29ae7e38b1793f4159f2.png

图 10 抗丢包率优化效果

从用户角度来说,最直观的感受是,网络切换再也不「转菊花」啦!

b4fe427254c3026758cfbaa316bd7bcb.gif

图 11 QUIC 连接情况下 cellular/wifi 切换表现

06

路漫漫其修远兮:未来展望

目前,QUIC 在会议业务长连接上的应用已经稳定运行 2 年多了。HTTP 切换QUIC 通道也基本部署完成、进入测试环节。QUIC 本来就是 google 为 HTTP 请求量身打造的。0-rtt、避免队头阻塞、多路复用等等黑魔法的加持,使 QUIC 在 HTTP 业务上更「得心应手」。升级版的腾讯会议将给用户带来网页秒开,资源秒加载的更棒的使用体验。

因为篇幅原因,这里对 QUIC 的知识科普有限。个人强烈推荐各位去看看 QUIC 官方的学习资料和一些科技大佬的解析,非常通俗易懂、值得学习。各位,可以在公众号后台回复 QUIC 领取(码住,别吃灰5972407655e0f2c0bc8cf5d05b6328d4.png)。

更多腾讯会议的优化 case,可直接点击腾讯会议10秒编译百万代码|鹅厂编译加速标杆案例公开、企业微信零耦合集成腾讯会议和腾讯文档插件化架构实践。以上是本次分享全部内容,欢迎大家在评论区分享交流。

-End-

原创作者|余一

技术责编|余一

d0b2e49ac89a2767f9175bccc1c30616.png

一直以来,性能优化是程序员面对的重要课题。页面功能、代码细节、数据库调优......你见过哪些令你「瞠目结舌」的优化?在工作中经历过哪些性能优化的项目?有什么经验分享?有哪些工具推荐?欢迎评论区留言。

我们将选取1则最有创意的分享,送出腾讯云开发者-限定马克杯1个(见下图)。4月26日中午12点开奖。

d109f6ac2b26d667efea1028780418b5.png

8f84c81845c479ebe1732164b691a533.png

a1d2bf7dfacad980b857df8be9a53acb.png

b28136274b04a1d3f7b8e889a41ef4fd.png

ee4f998b72edfada6459b1a8496dae7d.png

下方关注腾讯云开发者并点亮星标

回复「QUIC」领作者推荐的连接迁移学习材料

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

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

相关文章

腾讯会议的各种使用办法

如何关闭某一成员突然打开的麦克风 1.点击管理成员 2.点击关闭麦克风或者关闭视频即可 如何更换背景 1.点击设置 2.点击虚拟背景和美颜 3.选择已有背景或者点击支持图片/视频从本地进行上传 调整声音 1.点击设置 2.点击音频 3.点击音量调节

Zoom会议使用指南

一、使用手册 1、加入会议 1.1 下载ZOOM 下载ZOOM客户端:https://ruanshi1.8686c.com/prod/4.4.55389.0716/ZoomInstaller.exe 1.2 点击加入会议 1.3 点击会议URL或输入会议ID https://cnegroup.zoom.us/j/768131602 1.4 开始会议 2、召开会议 2.1登录Zoom 2.…

使用 Microsoft Teams 开会到底有多少途径——建会

疫情原因公司开始远程办公,过程不赘述,最终选择了 Microsoft Teams 作为开会的工具。 通过这几个月的摸索,终于算是上手了,开始时被 Teams 开会整懵圈了,每天收到各种工单,问怎么开会。后来发现 Teams 开会…

使用 Microsoft Teams 开会到底有多少途径——参会

上一篇关于Teams建会的文章发完之后,总想着把参会的赶紧写了,结果发现两个月就这么过去了,趁着最近不忙,赶紧更新 接前文 使用 Microsoft Teams 开会到底有多少途径——建会添加链接描述 和建会一样,参会也是条条大路…

油猴脚本尝试

现在是这样的,我这边有个运维系统,里面有个日志,我们经常要复制,然后我们复制的时候需要打开内容,然后去选中复制。 类似于这种,我觉得这个时候,去选中复制就很麻烦,右边这里不是有…

油猴插件/脚本还不会使用?看这篇文章就够了, 各种实用的插件/脚本使用技巧

本文是众多使用技巧中其中的一篇, 全部使用技巧点击链接查看, 或直接查看本专栏其他文章, 保证你收获满满 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页 了解更多计算机学科的精品思维导图整理 本文可以转载&…

油猴插件安装以及好用的脚本推荐

现在浏览器不搞几个插件和IE浏览器有啥区别,因此今天推荐一下及其强力的油猴(Tampermonkey)插件。 一、Tampermonkey插件安装 想使用插件首先要安装插件,我这里以Edge浏览器举例。 1、先打开浏览器的扩展项,然后在搜…

Tampermonkey油猴脚本的简单实现教程

先把上面的描述信息修改成自己的 这里假装你已经在浏览器上安装好了油猴插件,并且点击了 号进入了新增脚本页面 重点修改 *name 自定义一个脚本名称 *include 目标网址 *connect 目标网站域名 *require 可以在这里加载jQuery *grant 会用到的方法,一…

Tips【油猴Tampermonkey】脚本安装教程

前言 我本人喜欢在百度网盘上存一些东西,但是网盘的下载限速真的恶心到惊人,于是搜索了知乎等处,发现油猴这个扩展程序,其中百度网盘下载助手是我最中意的,但是我的chrome浏览器不好用,不知道为什么哈&…

“油猴”的五大神级脚本

上一片文章介绍过谷歌的五大神级拓展 其中压箱底的就是“油猴”了,油猴的厉害之处就在于它丰富的脚本,这些脚本可以让你自由的干你想干的事,今天我就介绍五个我用着十分顺手的脚本。 当然由于我不刷微博所以关于这方面的脚本就不做介绍了。 …

油猴脚本(Tampermonkey)的安装和使用小结

0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢! 浏览器:Firefox 93.0 0x01 油猴脚本(Tampermonkey)安装和使用 1.油猴脚本(Tampermonkey)简介 Ta…

【油猴Tampermonkey】脚本安装教程+自用脚本推荐

转自:52破解 本帖最后由 Pandolar 于 2017-6-5 17:21 编辑 ①:软件简介: Tampermonkey,这是一个伟大的Chrome扩展。可以说,就算Chrome没有其他扩展,只有Tampermonkey,Chrome依然能吸引到一大群…

【阿里面试】最近一个朋友去阿里面试 P6 跟我分享了一下面试题

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人 Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 ,不然下次找不到哟💕…

我是如何通过阿里面试的?

笔者参加18年阿里春招,有幸最终拿到阿里offer,base杭州,岗位客户端开发。一直忙于其他事情,拿到意向已经过去十多天,在此分享一些关于面试的干货,攒一波RP,回馈社会。 从阿里面试说起&#xff0…

63GB,2.35 亿 Twitter 用户的姓名、邮件在裸奔……

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 在互联网的世界里,隐私和安全无小事。伴随着科技迅速发展,数据安全已成为至关重要的话题。 但是,近年来的黑客攻击、数据安全与隐私泄露事件依然频发…

高手们都是怎么下载文献的呀?

只要你是在搞科研,文献检索就如同你生活中的吃饭喝水一样,随时随地,无时无刻。当你文献检索入门之后,就该进阶修炼了!相信我,只要你给我一点点时间,我将让你有大大的收获。这篇答案会让你的科研…

文献管理软件Mendeley最新使用指南看这里!

Why Mendeley? 文献管理软件千千万,为什么要选择Mendeley呢? 官网里给出了下面九个选择它的理由。 With Mendeley, you can: 从Web和UCI数据库收集文献 (Collect references from the Web and UCI databases)自动生成引文和引用书目 (Automatically …

文献阅读利器--HistCite安装与使用

软件下载和安装 链接:HistCite Pro 2.1 (永久有效) 提取码:vpii 链接:HistCiteInstaller(永久有效) 提取码:46cd 官方网站的下载链接 以上链接任取其一进行下载,下载后不需要安装&#xff0…

亚马逊、速卖通、Lazada、Shopee的福音,TikTok站外引流神器

大家好,我是泽哥。随着我们中国内地市场几大电商平台逐渐趋于饱和状态,买家不断入驻跨境平台赚美刀,像亚马逊、速卖通这些平台也趋于饱和状态,这对新手卖家的确很不友好,要么走冷门路线产品,要么就是红海竞…

新手必看!Facebook广告怎么投放?Facebook 怎么养号?

Facebook平台是帮助海外营销人员获取流量和用户的最佳方式之一,功能齐全且操作简单,是跨境营销中的一把利器。每一个跨境电商卖家都不能不了解Facebook 广告投放流程。 Facebook 广告投放流程 1、开通Facebook广告企业账户 2、熟悉Facebook广告投放工…