QUIC 协议是如何在蚂蚁集团落地的?

谷歌出品!读懂 QUIC 协议:更快、更高效的通信协议 在TCP里,如果一个segment传递丢失,那么后续segment乱序到达,也不会被应用层使用,只到丢失的segment重传成功为止,因此TCP实现的HTTP2的多路复用能力受到制约。QUIC解决了上面的歧义问题。与采用Sequence Number 标记不同的是,其使用的Packet Number标记严格单调递增,如果 Packet N 丢失了,那么重传时 Packet 的标识不会是 N,而是比 N 大的数字,比如N+M,这样发送方接收到确认消息时就能方便地知道 ACK 对应的是原始请求还是重传请求。 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:金融级分布式架构


3488f83af823456af9245bfe34b5320f.png

自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:HTTP3.0 的底层传输协议,蚂蚁集团支付宝客户端团队与接入网关团队于 2018 年下半年开始在移动支付、海外加速等场景落地 QUIC。

本文是综述篇,介绍 QUIC 在蚂蚁的整体落地情况。之所以是综述,是因为 QUIC 协议过于复杂,如果对标已有的协议,QUIC 近似等于 HTTP + TLS +TCP,无法详细的毕其功于一役,因此我们通过综述的方式将落地的重点呈现给读者,主要介绍如下几个部分:

  • QUIC 背景 :简单全面的介绍下 QUIC 相关的背景知识;

  • 方案选型设计 :详细介绍蚂蚁的落地方案如何另辟蹊径、优雅的支撑 QUIC 的诸多特性,包括连接迁移等;

  • 落地场景 :介绍 QUIC 在蚂蚁的两个落地场景,包括:支付宝客户端链路以及海外加速链路;

  • 几项关键技术 :介绍落地 QUIC 过程中核心需要解决的问题,以及我们使用的方案,包括:“支持连接迁移”、“提升 0RTT 比例", "支持 UDP 无损升级”以及“客户端智能选路” 等;

  • 几项关键的技术专利。

本文也是 QUIC 协议介绍的第一篇,后续我们会把更多的落地细节、体验优化手段、性能优化手段、安全与高可用、QUIC 新技术等呈现给大家。

【注】蚂蚁 QUIC 开发团队包括:支付宝客户端团队的梅男、苍茫、述言,以及接入网关的伯琴、子荃、毅丝。

1. QUIC 背景介绍

鉴于读者的背景可能不同,在开始本文之前,我们先简单介绍下 QUIC 相关的背景知识,如果您对这个协议的更多设计细节感兴趣,可以参见相关 Draft:

https://datatracker.ietf.org/wg/quic/documents/

1.1 QUIC 是什么?

简单来说,QUIC (Quick UDP Internet Connections) 是一种基于 UDP 封装的安全 可靠传输协议,他的目标是取代 TCP 并自包含 TLS 成为标准的安全传输协议 。下图是 QUIC 在协议栈中的位置,基于 QUIC 承载的 HTTP 协议进一步被标准化为 HTTP3.0。

3667ffc0cd85712931092aa4e18131ac.png

1.2 为什么是 QUIC ?

在 QUIC 出现之前,TCP 承载了 90% 多的互联网流量,似乎也没什么问题,那又为何会出现革命者 QUIC 呢?这主要是因为发展了几十年的 TCP 面临 “协议僵化问题”,表现在几方面:

  • 网络设备支持 TCP 时的僵化,表现在:对于一些防火墙或者 NAT 等设备,如果 TCP 引入了新的特性,比如增加了某些 TCP OPTION 等,可能会被认为是攻击而丢包,导致新特性在老的网络设备上无法工作;

  • 网络操作系统升级困难导致的 TCP 僵化,一些 TCP 的特性无法快速的被演进;

  • 除此之外,当应用层协议优化到 TLS1.3、 HTTP2.0 后, 传输层的优化也提上了议程,QUIC 在 TCP 基础上,取其精华去其糟粕具有如下的硬核优势:

439897c069c93d689b47d7df749d2c78.png

1.3 QUIC 生态圈发展简史

下图是 QUIC 从创建到现在为止的一些比较重要的时间节点,2021 年,QUIC V1 即将成为 RFC,结束百花齐放的态势。

1d89b7c8da4b78169564f7e737282ff7.png

介绍完 QUIC 相关背景,之后我们来介绍蚂蚁的整个落地的内容。这里为了便于阐述,我们用蚂蚁 QUIC 的 一、二、三、四 来进行概括总结,即 “一套落地框架 ”、“两个落地场景 ”、“三篇创新专利保护 ”、“四项关键技术 ”。

推荐下自己做的 Spring Boot 的实战项目:

https://github.com/YunaiV/ruoyi-vue-pro

2. 一套落地框架

蚂蚁的接入网关是基于多进程的 NGINX 开发的 (内部称为 Spanner,协议卸载的扳手),而 UDP 在多进程编程模型上存在诸多挑战,典型的像无损升级等。为了设计一套完备的框架,我们在落地前充分考虑了服务端在云上部署上的方便性、扩展性、以及性能问题,设计了如下的落地框架以支撑不同的落地场景:

a43cdd210f6928e1cc3e4051bcb846e9.png

在这套框架中,包括如下两个组件:

  • QUIC LB 组件:基于 NGINX 4层 UDP Stream 模块开发,用来基于 QUIC DCID 中携带的服务端信息进行路由,以支持连接迁移。

  • NGINX QUIC 服务器:开发了 NGINX_QUIC_MODULE,每个 Worker 监听两种类型的端口:

    (1)BASE PORT ,每个 Worker 使用的相同的端口号,以 Reuseport 的形式监听,并暴露给 QUIC LB,用以接收客户端过来的第一个 RTT 中的数据包,这类包的特点是 DCID 由客户端生成,没有路由信息。

    (2)Working PORT,每个 Worker 使用的不同的端口号,是真正的工作端口,用以接收第一个 RTT 之后的 QUIC 包,这类包的特定是 DCID 由服务端的进程生成携带有服务端的信息。

当前框架支持的能力包括如下:

  • 在不用修改内核的情况下,完全在用户态支持 QUIC 的连接迁移,以及连接迁移时 CID 的 Update;

  • 在不用修改内核的情况下,完全在用户态支持 QUIC 的无损升级以及其他运维问题;

  • 支持真正意义上的 0RTT ,并可提升 0RTT 的比例。

为何能支持上述能力,我们后面会展开叙述。

推荐下自己做的 Spring Cloud 的实战项目:

https://github.com/YunaiV/onemall

3. 两个落地场景

我们由近及远的两个落地场景如下:

场景一、支付宝移动端落地

如下为我们落地架构的示意图,支付宝手机客户端通过 QUIC 携带 HTTP 请求,通过 QUIC LB 等四层网关将请求转发到 Spanner (蚂蚁内部基于 NGINX 开发的 7 层网关),在 Spanner 上我们将 QUIC 请求 Proxy 成 TCP 请求,发送给业务网关(RS)。

8146e1c5de68ccd4b54545d332826b7d.png

具体的方案选型如下:

  • 支持的 QUIC 版本是 gQUIC Q46;

  • NGINX QUIC MODULE 支持 QUIC 的接入和 PROXY 成 TCP 的能力;

  • 支持包括移动支付、基金、蚂蚁森林在内的所有的 RPC 请求;

  • 当前选择 QUIC 链路的方式有两种 :a) Backup 模式,即在 TCP 链路无法使用的情况下,降级到 QUIC 链路;b) Smart 模式,即 TCP和 QUIC 竞速,在 TCP 表现力弱于 QUIC 的情况下,下次请求主动使用 QUIC 链路。

在此场景下,通过使用 QUIC 可以获得的红利包括:

  • 在客户端连接发生迁移的时候,可以不断链继续服务;

  • 客户端在首次发起连接时,可以节省 TCP 三次握手的时间;

  • 对于弱网情况,QUIC 的传输控制可以带来传输性能提升。

场景二、海外加速落地

蚂蚁集团从 2018 年开始自研了海外的动态加速平台 AGNA(Ant Global Network Accelerator)以替换第三方厂商的加速服务。AGNA 通过在海外部署接入点:Local Proxy(LP) 以及在国内部署接出点:Remote Proxy(RP) 的方式,将用户的海外请求通过 LP 和 RP 的加速链路回源国内。如下图所示,我们将 QUIC 部署在 LP 和 RP 之间的链路。

fa6284bab509d31274e8103d045d2363.png

在海外接入点上(LP),每一个 TCP 连接都被 Proxy 成 QUIC 上的一个 Stream 进行承载,在国内接出点上(RP),每一个 QUIC Stream 又被 Proxy 成一个 TCP 连接,LP 和 RP 之间使用 QUIC 长连接。

在此场景下,通过使用 QUIC 可以获得的红利包括:

  • 通过 QUIC 长连接的上的 Stream 承载 TCP 请求,避免每次的跨海建联;

  • 对于跨海的网络,QUIC 的传输控制可以带来传输性能提升。

4. 三篇关键专利

到目前为止,我们把落地过程中一些创新的技术点通过申请专利进行了保护,并积极在 IETF 进行标准化分享我们的研究成果,包括:

专利一

我们将落地场景 2 中,通过 QUIC Stream 进行四层代理的手段来进行海外回源的加速方法进行专利保护,提出:“一种基于 QUIC 协议代理的的链路加速方法 ”,目前此专利已经获得美国专利授权,专利号:CN110213241A 。

专利二

将我们落地框架中的 QUIC LB 组件作为专利进行保护,提出:“一种无状态、一致性、分布式的 QUIC 负载均衡设备 ”,目前此专利还在受理中 。由于通过 QUIC LB 可以很好的支持 QUIC 协议的连接迁移问题,所以目前 IETF QUIC WG 上有关于 QUIC LB 相关的草案,我们目前已经参与到 Draft 的讨论和制定中,后序相关的方案也会继续推广到云上产品。

专利三

将我们解决的 UDP 的无损升级方法进行专利保护,提出 “一种 QUIC 服务器无损升级方案 ”,目前此专利还在受理中 。由于 UDP 无损升级问题是一个业界难题,当前有些手段需要在用户态进行跳转,性能损失较大。我们的方案可以在我们的落地框架中解决当前问题,关于这个方案的细节我们在后面的关键技术中进行介绍。

5. 四项关键技术

在整个的落地中,我们设计的方案围绕解决几个核心问题展开,形成了四项关键技术,分别如下:

技术点1. 优雅的支持连接迁移能力
先说 连接迁移面临的问题 ,上文有提到,QUIC 有一项比较重要的功能是支持连接迁移。这里的连接迁移是指:如果客户端在长连接保持的情况下切换网络,比如从 4G 切换到 Wifi , 或者因为 NAT Rebinding 导致五元组发生变化,QUIC 依然可以在新的五元组上继续进行连接状态。
QUIC 之所以能支持连接迁移,一个原因是 QUIC 底层是基于无连接的 UDP,另一个重要原因是因为 QUIC 使用唯一的 CID 来标识一个连接,而不是五元组。

如下图所示,是 QUIC 支持连接的一个示意图,当客户端出口地址从 A 切换成 B 的时候,因为 CID 保持不变,所以在 QUIC 服务器上,依然可以查询到对应的 Session 状态。

4cde90be242d49f56fcc29b30ba21e71.png

然而,理论很丰满,落地却很艰难。在端到端的落地过程中,因为引入了负载均衡设备,会导致在连接迁移时,所有依赖五元组 Hash 做转发或者关联 Session 的机制失效。以 LVS 为例,连接迁移后, LVS 依靠五元组寻址会导致寻址的服务器存在不一致 。

即便 LVS 寻址正确,当报文到达服务器时,内核根据五元组关联进程,依然会寻址出错。同时,IETF Draft 要求,连接迁移时 CID 需要更新掉,这就为仅依靠 CID 来转发的计划同样变的不可行。

再说我们的解决方法,为了解决此问题,我们设计了开篇介绍的落地框架,这里我们将方案做一些简化和抽象,整体思路如下图所示:
  1. 在四层负载均衡上,我们设计了 QUIC LoadBalancer 的机制:

  • 我们在 QUIC 的 CID 中扩展了一些字段(ServerInfo)用来关联 QUIC Server 的 IP 和 Working Port 信息;

  • 在发生连接迁移的时候,QUIC LoadBalancer 可以依赖 CID 中的 ServerInfo 进行路由,避免依赖五元组关联 Session 导致的问题;

  • 在 CID 需要 Update 的时候,NewCID 中的 ServerInfo 保留不变,这样就避免在 CID 发生 Update 时,仅依赖 CID Hash 挑选后端导致的寻址不一致问题。

  1. 在 QUIC 服务器多进程工作模式上,我们突破了 NGINX 固有的多 Worker 监听在相同端口上的桎梏,设计了多端口监听的机制,每个 Worker 在工作端口上进行隔离,并将端口的信息携带在对 First Initial Packet 的回包的 CID 中,这样代理的好处是:

  • 无论是否连接迁移,QUIC LB 都可以根据 ServerInfo,将报文转发到正确的进程;

  • 而业界普遍的方案是修改内核,将 Reuse port 机制改为 Reuse CID 机制,即内核根据 CID 挑选进程。即便后面可以通过 ebpf 等手段支持,但我们认为这种修改内核的机制对底层过于依赖,不利于方案的大规模部署和运维,尤其在公有云上;

  • 使用独立端口,也有利于多进程模式下,UDP 无损升级问题的解决,这个我们在技术点 3 中介绍。

3aaeac33a333dbdbbfb2df6640ad9eab.png

技术点2. 提升 0RTT 握手比例

这里先 介绍 QUIC 0RTT 原理。前文我们介绍过, QUIC 支持传输层握手和安全加密层握手都在一个 0RTT 内完成。TLS1.3 本身就支持加密层握手的 0RTT,所以不足为奇。而 QUIC 如何实现传输层握手支持 0RTT 呢?
我们先看下传输层握手的目的,即:服务端校验客户端是真正想握手的客户端,地址不存在欺骗,从而避免伪造源地址攻击。在 TCP 中,服务端依赖三次握手的最后一个 ACK 来校验客户端是真正的客户端,即只有真正的客户端才会收到 Sever 的 syn_ack 并回复。
5a9c6a1f7ca3a2e454fdfd5e2fabde55.png

QUIC 同样需要对握手的源地址做校验,否则便会存在 UDP 本身的 DDOS 问题,那 QUIC 是如何实现的?依赖 STK(Source Address Token) 机制。

这里我们先声明下,跟 TLS 类似,QUIC 的 0RTT 握手,是建立在已经同一个服务器建立过连接的基础上,所以如果是纯的第一次连接,仍然需要一个 RTT 来获取这个 STK。

如下图所示,我们介绍下这个原理:

  1. 类似于 Session Ticket 原理,Server 会将客户端的地址和当前的 Timestamp 通过自己的 KEY 加密生成 STK。

  2. Client 下次握手的时候,将 STK 携带过来,由于 STK 无法篡改,所以 Server 通过自己的 KEY 解密,如果解出来的地址和客户端此次握手的地址一致,且时间在有效期内,则表示客户端可信,便可以建立连接。

  3. 由于客户端第一次握手的时候,没有这个 STK,所以服务度会回复 REJ 这次握手的信息,并携带 STK。

a8bbea0e9f42d21f7d17a92d9e991a90.png

理论上说,只要客户端缓存了这个 STK,下次握手的时候带过来,服务端便可以直接校验通过,即实现传输层的 0RTT。但是真实的场景却存在如下两个问题:

  • 因为 STK 是服务端加密的,所以如果下次这个客户端路由到别的服务器上了,则这个服务器也需要可以识别出来;

  • STK 中 encode 的是上一次客户端的地址,如果下一次客户端携带的地址发生了变化,则同样会导致校验失败。此现象在移动端发生的概率非常大,尤其是 IPV6 场景下,客户端的出口地址会经常发生变化。

再介绍下我们的解决方法。第一个问题比较好解,我们只要保证集群内的机器生成 STK 的秘钥一致即可。第二个问题,我们的解题思路是:
  1. 我们在 STK 中扩展了一个 Client ID, 这个 Clinet ID 是客户端通过无线保镖黑盒生成并全局唯一不变的,类似于一个设备的 SIMID,客户端通过加密的 Trasnport Parameter 传递给服务端,服务端在 STK 中包含这个 ID;

  2. 如果因为 Client IP 发生变化导致校验 STK 校验失败,便会去校验 Client ID,因为 ID 对于一个 Client 是永远不变的,所以可以校验成功,当然前提是,这个客户端是真实的。为了防止 Client ID 的泄露等,我们会选择性对 Client ID 校验能力做限流保护。

49dd49aa24d5932e68d4a29744b1e943.png
技术点3. 支持 QUIC 无损升级
我们知道 UDP 无损升级是业界难题。无损升级是指在 reload 或者更新二进制时,老的进程可以处理完存量连接上的数据后优雅退出。以 NGINX 为例,这里先介绍下 TCP 是如何处理无损升级的,主要是如下的两个步骤:
  1. 老进程先关闭 listening socket,待存量连接请求都结束后,再关闭连接套接字;

  2. 新进程从老进程继承 listening socket , 开始 accept 新的请求。

而 UDP 无法做到无损升级是因为 UDP 只有一个 listening socket 没有类似 TCP 的连接套接字,所有的收发数据包都在这个 socket 上,导致下面的热升级步骤会存在问题:

  1. 在热升级的时候,old process fork 出 new process 后,new process 会继承 listening socket 并开始 recv msg;

  2. 而 old process 此时如果关闭 listenging socket, 则在途的数据包便无法接收,达不到优雅退出的目的;

  3. 而如果继续监听,则新老进程都会同时收取新连接上的报文,导致老进程无法退出。

2be310a575c45ceefdbea40564c6e4cd.png
这里介绍下相关的解决方法。针对此问题,业界有一些方法,比如:在数据包中携带进程号,当数据包收发错乱后,在新老进程之间做一次转发。考虑到接入层上的性能等原因,我们不希望数据再做一次跳转。
结合我们的落地架构,我们设计了如下的 基于多端口轮转的无损升级方案,简单来说,我们让新老进程监听在不同的端口组并携带在 CID 中,这样 QUIC LB 就可以根据端口转发到新老进程。为了便于运维,我们采用端口轮转的方式,新老进程会在 reload N 次之后,重新开始之前选中的端口。如下图所示:
  1. 无损升级期间,老进程的 Baseport 端口关闭,这样不会再接受 first intial packet, 类似于关闭了 tcp 的 listening socket;

  2. 老进程的工作端口,继续工作,用来接收当前进程上残余的流量;

  3. 新进程的 Baseport 开始工作,用来接收 first initial packet, 开启新的连接,类似于开启了 tcp 的 listening socket;

  4. 新进程的 working port = (I + 1) mod N,  N 是指同时支持新老进程的状态的次数,例如 N = 4, 表示可以同时 reload 四次,四种 Old、New1、New2、New3 四种状态同时并存,I 是上一个进程工作的端口号,这里 + 1 是因为只有一个 worker, 如果 worker 数有 M 个,则加 M;

  5. 建好的连接便被 Load Balancer 转移到新进程的监听端口的 Working Port 上。

49fa1728ed9b553bea75cb2643a4d76a.png

技术点4. 客户端智能选路

尽管落地 QUIC 的愿望是好的,但是新事物的发展并不是一帆风顺的。由于 QUIC 是基于 UDP 的,而 UDP 相比于 TCP 在运营商的支持上并非友好,表现在:

  1. 在带宽紧张的时候,UDP 会经常被限流;

  2. 一些防火墙对于 UDP 包会直接 Drop;

  3. NAT 网关针对 UDP 的 Session 存活时间也较短。

同时,根据观察发现,不同的手机厂商对于 UDP 的支持能力也不同,所以在落地过程中,如果盲目的将所有流量完全切为 QUIC 可能会导致一些难以预料的结果。

为此,我们在客户端上,设计了开篇介绍的 TCP 和 QUIC 相互 Backup 的链路,如下图所示,我们实时探测 TCP 链路和 QUIC 链路的 RTT、丢包率、请求完成时间、错误率等指标情况,并根据一定的量化方法对两种链路进行打分,根据评分高低,决定选择走哪种链路,从而避免寻址只走一条链路导致的问题。

cbe59af633273fb66d9b29c78930acd8.png

6. 总结

本文主要综述性的介绍了 QUIC 在蚂蚁的落地方案、场景以及一些关键技术。关键技术上,主要介绍了我们如何通过创造性的提出 QUIC LB 组件、以及多端口监听的机制来优雅的支持 QUIC 的连接迁移机制、QUIC 服务端的无损升级等,依赖这套方案我们的接入网关不需要像业界一样依赖底层内核的改动,这极大的方便了我们方案的部署,尤其在公有云场景下。

除了连接迁移以外,我们还提出了 0RTT 建联提升方案、客户端智能选路方案,以最大化 QUIC 在移动端上的收益。截止当前,QUIC 已经在支付宝移动端以及全球加速链路两个场景上平稳运行,并带来了较好的业务收益。

7. 未来规划

两年来,我们主要以社区的 gQuic 为基础,充分发挥 QUIC 的协议优势,并结合蚂蚁的业务特征以最大化移动端收益为目标,创造性的提出了一些解决方案,并积极向社区和 IETF 进行推广。在未来,随着蚂蚁在更多业务上的开展和探索以及HTTP3.0/QUIC 即将成为标准,我们会主要围绕以下几个方向继续深挖 QUIC 的价值:

  • 我们将利用 QUIC 在应用层实现的优势,设计一套统一的具备自适应业务类型和网络类型的 QUIC 传输控制框架,对不同类型的业务和网络类型,做传输上的调优,以优化业务的网络传输体验。

  • 将 gQUIC 切换成 IETF QUIC,推进标准的 HTTP3.0 在蚂蚁的进一步落地。

  • 将蚂蚁的 QUIC LB 技术点向 IETF QUIC LB 进行推进,并最终演变为标准的 QUIC LB。

  • 探索并落地 MPQUIC(多路径 QUIC) 技术,最大化在移动端的收益。

  • 继续 QUIC 的性能优化工作,使用 UDP GSO, eBPF,io_uring 等内核技术。

  • 探索 QUIC 在内网承载东西向流量的机会。

- END -

欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

28f3374f8fae3af8b0a039b5009d5351.png

已在知识星球更新源码解析如下:

ec7d5a00f62304b19deca99b04861bc9.png

2b94859820a1adc20361537678459a57.png

a69ceb369744ca5bde5ec59e82c64fbb.png

4004e3d8b371e5b5e67a36aa14259b9f.png

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
QUIC(Quick UDP Internet Connection)协议概述 QUIC协议的概述 阅读详情

相关推荐

实战丨QUIC协议在蚂蚁集团落地

本文是综述篇,介绍QUIC在蚂蚁的整体落地情况。之所以是综述,是因为 QUIC 协议过于复杂,如果对标已有的协议,QUIC 近似等于 HTTP + TLS +TCP,无法详细的毕其功于一役,因此我们通过综述的方式将落地的重点呈现给读者,主要介绍如下几个部分: QUIC背景:简单全面的介绍下 QUIC 相关的背景知识 方案选型设计:详细介绍蚂蚁的落地方案如何另辟蹊径、优雅的支撑 QUIC 的诸多特性,包括连接迁移等 落地场景:介绍 QUIC 在蚂蚁的两个落地场景,包括:支付宝客户端链路以及海外加速链..

20年码农 708

QUIC协议原理详解

QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时降低网络延迟。众所周知UDP比TCP传输速度快,TCP是可靠协议,但是代价是双方确认数据而衍生的一系列消耗。其次TCP是系统内核实现的,如果升级TCP协议,就得让用户升级系统,这个的门槛比较高,而QUIC在UDP基础上由客户端自由发挥,只要有服务器能对接就可以。1.1 什么是QUIC。.........

Lce的专栏 1万+

支付宝二面:如何用 UDP 实现可靠传输?

相信大家面试经常会被问到一个问题 “如何用UDP实现可靠传输”,今天就给大家分享一个基于 UDP 实现的可靠传输协议:QUIC 。 这几天看到一篇蚂蚁集团实战 QUIC 的文章,我觉得很不错,特此分享给大家。 作者:孔令涛 自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:HTTP3.0 的底层传输协议,蚂蚁集团支付宝客户端团队与接入网关团队于 2018

m0_69305074的博客 497

QUIC详解

1. QUIC是什么 QUIC(全称Quick UDP Internet Connections)是谷歌公司制定的一种基于 UDP 协议的低时延互联网传输协议,它提供了多项改进,旨在加速HTTP传输并使其更加安全,目标是想最终取代TCP和TLS协议。 可以用一个公式大致概括如下: TCP + TLS + HTTP2 = UDP + QUIC + HTTP2’s API。 ...

Arlingtonroad的博客 1万+

快速UDP网络连接之QUIC协议介绍

QUIC的FEC是使用的XOR的方式,即发N + 1个包, 多发一个冗余的包,在正常数据的N个包里面任意一个包丢了,可以通过这个冗 余的包恢复出来,使用异或可以做到切换网络操持连接。由于原始包和重传包的序列号是一样的,客户端不知道服 务器返回的 ACK 包到底是原始包的,还是重传包的。新的传输层协议通常会经过严格的设计,分析和评估可重复的结果,证明候选协议对 现有协议的正确性和公平性,开发新的传输层协议和它在操作系统进行广泛部署之间 通常需要花费数年的时间。

琅嬛福地 4649

Android P HAL层添加HIDL实例(详细实现步骤)

Android P HAL层添加HIDL实例 本文将介绍如何在P OS上添加HIDL实例,简单增加seLinux策略使得可以在system_service调用测试,并用模拟器emulator验证。 调用过程为 APP->TestManager->TestService->ITast.hal 文章目录Android P HAL层添加HIDL实例实现过程一 、hardware部分1...

sinat_18179367的博客 1万+

QUIC 协议在蚂蚁集团落地总结

点击上方“朱小厮的博客”,选择“设为星标”后台回复"书",获取后台回复“k8s”,可领取k8s资料自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外...

朱小厮的博客 1684

深入解析DDR5 SDRAM中的CA训练模式(CATM):原理与实现

本文深入解析DDR5 SDRAM中的CA训练模式(CATM),详细探讨其工作原理与实现方法。通过分析JESD79-5标准,揭示CATM在时序校准、信号质量优化和系统稳定性方面的核心价值,并提供硬件设计考量和系统级调试技巧,帮助工程师解决高速内存系统中的信号完整性问题。

weixin_29235923的博客 387

实战|QUIC协议在蚂蚁集团落地

自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:H...

极客重生 765

深入解析MTK平台hang_detect机制:从原理到实战调试

本文深入解析了MTK平台hang_detect机制的工作原理与实战调试技巧。作为系统健康监测的核心机制,hang_detect通过多层级监控体系检测应用层和内核层异常,结合Kernel_exception等日志信息快速定位问题。文章详细介绍了典型问题案例、调试方法及预防措施,帮助开发者提升MTK平台系统稳定性调试能力。

purple的博客 1005

Vector CANape的使用记录

开门见山,今天想和大家分享下CANape使用记录,分享原因是近日在分析一个客户现场软件问题时,需要用到CANape来实时的监测ECU中的变量,因为之前对CANape的认知比较浅薄,觉得标定工程师使用他就足够了,但是这次的经历让我觉得需要写点东西来记录自己学习并使用他的过程。 相信大家能够在网上找到很多关于如何使用CANape的文章,从新建Project到后面的数据的观测、保存以及回放等等。我个人也是这么学过来的,所以我不打算从那些方面着手去描述如何使用她,而是根据我的真实使用过程以及问题的抛出到如何解决来

2万+

积跬步至千里:QUIC 协议在蚂蚁集团落地之综述

自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:H...

金融级分布式架构 848

RPG MV游戏数据修改指南:从JSON解析到脚本进阶

游戏数据修改是游戏开发与逆向工程中的常见实践,其核心原理在于解析和操作游戏资源文件。许多现代游戏引擎采用结构化数据格式(如JSON)存储游戏配置,这为外部修改提供了可能。通过理解文件结构、数据格式与游戏逻辑的关联,开发者或爱好者可以调整游戏平衡、修复问题或实现个性化定制,这不仅能深化对游戏设计机制的理解,也具备实际的技术学习价值。本文以基于Web技术栈的RPG Maker MV(RPG MV)引擎为例,其游戏数据多以明文JSON存储,结构清晰。文章将具体阐述如何安全地修改角色属性、物品效果、敌人数据及技能公

weixin_29001419的博客 408

QUIC 协议在蚂蚁落地综述

积跬步至千里:QUIC 协议在蚂蚁集团落地之综述自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连...

梦醒人间 1130

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

bfq05234214的博客 441

使用CloudCompare和CANUPO进行点云分类的编程指南

在本文中,我们将介绍如何使用CloudCompare和CANUPO库进行点云分类的编程。CloudCompare是一款功能强大的开源点云处理软件,而CANUPO是一个用于点云分类和分割的C++库。这只是一个简单的点云分类示例,CANUPO库还提供了其他更高级的功能和算法,以满足各种点云分类需求。该函数接受点云数据、地面点掩码和非地面点掩码作为输入,并将分类结果存储在这两个掩码向量中。完成安装后,我们可以开始编写点云分类的代码。最后,我们遍历点云数据,并根据地面点和非地面点的掩码将结果打印出来。

ByteWhisper的博客 1060

「 直播预告 」走进下一代互联网协议:HTTP3.0

他来了他来了,他带着 HTTP3.0 走来了!不知道大家对于我们的伯琴老师还有没有印象?孔令涛(花名:伯琴),蚂蚁集团技术专家,主要从事四七层协议优化,网关开发等工作。大家是不是脑海瞬间对...

金融级分布式架构 168

# 【WorkBuddy专栏33】工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

AI人人懂 2157

go每日新闻(2021-04-29)——QUIC 协议在蚂蚁落地综述

每日一谚: Keep Your APIs Concurrency-Free. go中文网每日资讯--2021-04-29 一、Go语言中文网 Go 切片的一种有趣内存泄漏方式 Go 切片的一种有趣内存泄漏方式 二、亚军进化史 Go技术日报(2021-04-28)——在Go中,你犯过这些错误吗 三、码农桃花源 QUIC 协议在蚂蚁落地综述 KubeSphere 3.1.0 GA:混合多云走向边缘,让应用无处不在 四、腾讯技术 “鹅厂老司机”谈破局:做自己的破壁人 五、polarisxu G.

韩亚军的博客 838

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

实战|QUIC协议助力腾讯业务提速30%

hi ,大家周五好,之前分享过一篇QUIC在蚂蚁金服落地的文章:实战|QUIC协议在蚂蚁集团落地今天我们分析一篇,QUIC在腾讯落地的文章,希望大家了解和学习新技术是如何在大厂落地,其中会...

极客重生 1331

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深入 HTTP/3(一)|从 QUIC 链接的建立与关闭看协议的演进

文|曾柯(花名:毅丝 ) 蚂蚁集团高级工程师 负责蚂蚁集团的接入层建设工作 主要方向为高性能安全网络协议的设计及优化 本文 10279 字 阅读 18 分钟 PART. 1 引言 作为系列文章的第一篇,引言部分就先稍微繁琐一点,让大家对这个系列文章有一些简单的认知。 先介绍下这个系列文章的诞生背景。QUIC、HTTP/3 等字眼想来对大家而言并不陌生。从个人的视角来看,大部分开发者其实都已经有了一些背景知识,比如 HTTP/3 的核心是依赖 QUIC 来实现传输层及 TLS 层的能力。而谈及其中细节之时,大

金融级分布式架构 1562

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

「 直播倒计时 」走进下一代互联网协议:HTTP/3

刚刚过去的七夕节,不知道是不是一只“孤寡”青蛙陪你度过的?如果是那也太可怜了……不用伤心,让我们跟着伯琴老师走进下一代互联网协议:HTTP/3中去忘掉“孤寡孤寡”!不知道大家对于我们的伯...

金融级分布式架构 149

从网络接入层到 Service Mesh,蚂蚁金服网络代理的演进之路

详细阅读本文大约需要15分钟,先花150s听听是否对本文感兴趣吧~本文作者:肖涵(涵畅)从网络硬件设备到自研平台,从传统服务治理到 Service Mesh,本文将介绍蚂蚁金服网络代理在接入层以及 Service Mesh 化道路上是如何一步步支撑起秒级百万支付,千万春晚咻一咻的。前言在云计算和 SDN 下,我们经常听到流量的东西南北向概念,简单来说从外部 Internet 等到数据中心内部的流量...

金融级分布式架构 2098

go每日新闻(2021-04-30)——如何提高代码的扩展性

每日一谚: Functions that users wait for should take a Context. go中文网每日资讯--2021-04-30 一、Go语言中文网 Go 运行时调度器处理系统调用的巧妙方式 掌握 cgo 的字符串函数 二、亚军进化史 Go技术日报(2021-04-29)——QUIC 协议在蚂蚁落地综述 三、奇伢云存储 存储进阶—怎么才能保证 IO 数据的安全? 四、腾讯云CDN 大咖聊QUIC—腾讯CDN技术总监李丛 五、k8s技术圈 KubeSphere.

韩亚军的博客 547

喜报!SOFAStack 社区荣获2021 年度云原生技术创新解决方案/产品奖

“5月26日,由中国信息通信研究院主办,云计算开源产业联盟、云原生产业联盟、云原生计算基金会(CNCF)支持的“云原生产业大会”在北京成功举办。”在 2021 云原生产业大会上,SO...

金融级分布式架构 490
上一篇: 简历造假的后果!
下一篇: 月薪没到30K的程序员必须要背的面试八股文,我先啃为敬!
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值