干货 | 降低20%链路耗时,Trip.com APP QUIC应用和优化实践

2、Qt UI控件 -- qucsdk项目使用 上一篇文章讲了qucsdk的环境部署,可以在QDesigner和Qt Creator中看到qucsdk控件,这一篇来讲下在项目中使用qucsdk库中的控件。 阅读详情

作者简介

 

竞哲,携程资深后端开发工程师,关注网络协议、RPC、消息队列以及云原生等领域。

一、背景

QUIC 全称 quick udp internet connection,即“快速 UDP 互联网连接”(和英文 quick 谐音,简称“快”),是由 google 提出的使用 udp 进行多路并发传输的协议,是HTTP3的标准传输层协议。近几年随着QUIC协议在IETF的标准化发展,越来越多的国内外大厂开始在生产环境对QUIC进行落地,以此提升某些业务场景下的服务性能。

Trip.com App作为一个面向国际化的App,承载了大量海外用户的请求,这些请求需要从海外回源到上海,具有链路长、网络不稳定等特点。在这样的背景下,我们尝试使用QUIC对App的传输链路进行了优化,并与目前的TCP传输链路进行对比实验。结果表明,QUIC协议的落地降低了Trip.com App大约20%的链路耗时,大大提升了用户的体验。

二、QUIC简介

简单来说,QUIC是基于UDP封装的安全的可靠传输协议,通过TLS1.3来保证传输的安全性,并通过协议标准来保证基于UDP传输的可靠性。目前QUIC协议已经成为新一代HTTP协议HTTP3的标准底层协议。QUIC在整个网络协议栈中的位置如下所示:

bfacee012b612198ceee17158ed3b312.png

相较于TCP协议,QUIC主要具备以下优势:


TCP

QUIC

握手延迟

安全传输需要TCP握手+TLS握手

首次握手1-RTT,后续握手0-RTT

队头阻塞

TCP使用链接级别地seq保序,丢包会阻塞后续所有数据流

各stream复用同一条传输链路并行传输,stream之间互不影响

拥塞控制

拥塞控制需要操作系统的支持,部署成本高,升级周期长

在应用层实现拥塞控制算法,升级变更灵活

连接迁移

基于四元组维持连接,四元组发生变化时需要重新建立连接

利用UDP无连接的特性,在QUIC层以cid标识连接,四元组变化,cid“不变”,便可保持连接不断

安全性

Header明文传输

除了一些必要字段,Header也是加密的

三、QUIC服务端落地实践

QUIC的落地需要客户端与服务端的共同支持,客户端我们使用了Google的开源Cronet网络库,服务端基于Nginx的官方quic分支。为了满足我们的业务与部署场景,客户端与服务端都对原生的代码进行了一些改造。本文主要介绍服务端的改造内容以及整体架构。

3.1 服务端整体架构

服务端的整体分层如图所示:

234d74746b12037db76ce661a071677c.png

其中:

AX是公网的负载均衡器,通过配置可以做到将相同客户端ip+port的数据包转发到下游的同一台实例上。

Nginx Stream层是基于Nginx实现的数据包转发层,主要用来支持连接迁移的功能。

Nginx QUIC即QUIC服务端,基于Nginx的官方quic分支开发改造,用来接收QUIC数据包,并解析出Http请求转发到公司的API Gateway上。

为了充分利用CPU的性能,提升整个系统的高可用性,Nginx Stream和Nginx QUIC都是集群多进程部署。这就为请求转发、实现连接迁移和0-RTT带来了一系列问题。下面针对遇到的问题以及我们的解决方案进行简单的介绍。

3.2 集群多进程部署

由于我们在多进程部署Nginx QUIC服务端时采用reuseport的形式监听端口,所以在介绍多进程部署之前,先简单介绍Linux系统的reuseport机制和Nginx的进程模型。

所谓reuseport,简单理解就是允许多个套接字对同一ip+port进行监听。Linux在接收到数据时,会根据四元组转发数据到相应的套接字,即来源于同一个客户端的数据总会被分发给相同的套接字。Nginx基于这个特性,在启动时,对于配置reuseport的端口,会在创建与进程数量一致的套接字,监听同一端口,并为每个进程分配其中的一个套接字。这样便实现了多进程监听同一端口的功能,并且来源于同一源ip+port的数据总是会被分发给同一进程。

有了以上理论基础,我们来看集群多进程部署时,我们的系统会出现什么问题。由于Nginx Stream层主要用来支持连接迁移,所以此处暂时先忽略NginxStream的存在,即服务的架构为AX直连Nginx QUIC集群。

由于AX为四层负载均衡器,所以在对UDP数据包进行转发时,可能将隶属于同一QUIC请求的多个UDP包转发到不同的下游实例中,这就会导致请求无法被处理。其次,即使所有的数据包都被AX转发到同一台Nginx QUIC实例上,由于Nginx QUIC实例为多进程部署,如果多个数据包的源ip+port不同,也会被分发到不同的Nginx进程中。以上两种情况都会导致正常的请求无法被处理,整个系统完全无法正常工作。

幸运的是,经过调研我们发现AX可以通过配置将来源于同一源ip+port的数据包通过同一出口ip+port转发到同一台服务器实例上,服务端实例通过reuseport机制就可以做到将数据分发给同一进程。这样如果客户端的ip+port不发生变化,其请求就会被一直转发到同一台服务端实例的同一进程中。

以上方案只是针对客户端ip+port不发生变化的场景,但在移动网络的环境下,客户端网络变化是十分正常的事情。当客户端网络发生变化时,客户端就需要与服务端进行重新握手建立连接,这样就会带来额外的时延,影响用户体验。

虽然QUIC有对连接迁移的支持,Nginx也对连接迁移的功能进行了实现,但都是针对端对端的场景,在我们集群多进程部署的场景下无法正常工作。为此,我们对代码以及部署架构进行了一些定制化改造以支持集群多进程部署场景下的连接迁移。

3.3 连接迁移

连接迁移是QUIC的一个重大特性。指的是当客户端或服务端的ip+port发生变化时,两端可以保证连接不中断继续通信。大多数情况下都是客户端ip+port变化导致的连接迁移,服务端的ip+port基本不会改变。本文中讨论的也是客户端ip+port发生变化的场景。

在以TCP作为传输层协议的网络链路中,当用户的网络发生变化,如移动网与wifi的切换,客户端需要重新与服务端建立连接才可以继续通信。由于TCP建立连接需要三次握手,这就需要消耗额外的RTT(Round-Trip Time,往返时延)。尤其在弱网或者跨地区调用的场景下,建立连接需要消耗更多的时间,这对用户来说体验非常差。

而由于QUIC基于UDP协议,UDP并没有连接的概念,因此便可以在QUIC协议中通过connectionId来标识一个唯一的连接。当四元组发生改变时,只要connectionId “不变”,便可以维持连接不断,从而实现连接迁移的功能。

3.3.1 Nginx-QUIC连接迁移功能的实现

为了利于大家对Nginx连接迁移功能实现的理解,先简单介绍一下QUIC的握手过程中涉及到的数据包类型。客户端在首次与服务端建立连接时,首先会发送一个Initial包。服务端收到Initial包后返回Handshake包,客户端收到Handshake包后,便可以正常发送应用请求数据。此处我们省略了握手过程中的ACK、加解密过程,精简后的握手流程如图所示:

a770c5139b718f0884803468bfd2c881.png

对QUIC握手流程有了大致的了解之后,我们来看Nginx是如何实现连接迁移功能的。

客户端发起与服务器建立连接的请求时,会在Initial包中携带一个由客户端随机生成的dcid。Nginx服务端收到Initial包后,会随机生成一个cid在Handshake包中返回,后续客户端发送的数据包都会以这个服务端返回的cid作为dcid。握手完成后,Nginx会生成多个cid保存在内存中,并在握手完成后将这些cid发送给客户端作为备用,cid的个数取决于客户端与服务端 active_connection_id_limit 参数的限制。

当客户端主动发起连接迁移时,会从备用的cid集合中取出一个作为后续数据包的dcid。Nginx收到携带新dcid的非探测包后,感知到客户端发生了迁移,会对新的客户端地址进行验证,当验证通过后,后续数据包都会发送给新的客户端地址,也就完成了整个连接迁移的流程。

以上对连接迁移的实现,仅仅在端对端且服务器单进程部署的场景下可以很好地工作。但是,在实际的生产环境中,由于引入了AX等负载均衡设备,而且服务端为多机多进程部署,因此当客户端网络环境发生变化时,新的请求数据包可能会被转发到新的服务器进程中。由于新的服务器进程并不包含此客户端连接迁移所需的上下文,就会导致客户端迁移失败。

解决上述问题的思路就是引入一个中间的LB层,这层的主要作用是解析出udp包中的dcid,然后根据dcid转发,把连接迁移前后的数据包转发到同一服务器的同一进程上。

此处我们基于Nginx搭建了Nginx Stream层,作为QUIC的LB层来实现数据包转发。由于连接迁移后,客户端会使用全新的dcid来发送数据包,为了使得Nginx Stream层通过新dcid的也可以路由到迁移前的机器上,我们还对服务端生成客户端dcid的逻辑进行了改造,在dcid中包含了服务端的ip+port信息。这样,当Stream层的机器收到迁移后的数据包时,便可以根据dcid中的ip+port信息将其转发到客户端迁移之前的服务端机器上。

加入Nginx Stream层之后的服务端整体架构如图所示:

0e7fcd4f6f7142b9eb135eff7c22f4dc.png

以上方案只是实现了将客户端连接迁移前后的请求转发到同一台服务器上,但无法保证请求被转发到服务器的同一进程中。试想,当客户端发生连接迁移时,AX可能会将客户端迁移后的数据包发送到跟之前不同的Nginx Stream实例上,虽然Nginx Stream可以通过dcid中的ip+port信息将数据包转发到同一台Nginx QUIC实例上,但对于Nginx QUIC来说,源ip+port为Nginx Stream的ip+port,源ip+port发生了改变。由于Nginx多进程分发请求依赖了操作系统的reuseport机制,而Linux的reuseport是根据四元组进行请求分发的,因此源ip+port的改变就可能会导致请求在服务端被分发到与迁移前不同的Nginx进程中,从而导致连接迁移失败。

为了解决这个问题,就要求NginxStream可以将数据包准确地转发到指定机器的指定进程中。我们进行了调研,总结下来大致分为两种解决方案:

  • 一是修改操作系统reuseport的分发机制,使其根据dcid将数据分发到指定进程。

  • 二是使不同的进程监听不同的端口,这样就可以通过将数据包转发到不同端口,从而转发到具体的进程。

第一种方案需要修改Linux内核代码,成本较高,并且dcid在整个系统中属于QUIC的应用层数据,我们认为不应该在操作系统代码中嵌入应用层的数据逻辑,因此最终选择了多端口的解决方案。

3.3.2 基于监听多端口的连接迁移方案

为了降低NginxStream配置文件复杂度和系统的整体维护成本,以及未来支持服务端的平滑无损升级,我们让每个进程监听了两种不同的端口:

  • 第1种是监听端口listening port,主要接收客户端的initial或0-RTT包,用来建立连接,每个进程的listening port相同;

  • 第2种是worker port,用来接收客户端第一个包之后的所有数据包,每个进程的workerport不同。

基于此方案,由于不同进程监听了相同的listening port,因此在建立连接时,由Linux根据四元组进行请求分发,从而实现进程间的负载均衡。一旦客户端与服务端建立了连接,后续此客户端所有请求报文中的dcid都包含了此服务器的ip+worker port信息,因此后续请求(包括连接迁移后的请求)都会被Nginx Stream层转发到同一服务器的同一进程进行处理,从而实现了多进程场景下对连接迁移功能的支持。

完整的连接迁移过程如下图:

c2a2814acb991ada1db4de183961492a.png

可以看到,整个连接迁移过程对Nginx Stream来说是透明的,它只负责解析dcid中的ip+port信息,并进行数据包的转发。Stream层并不需要感知服务端worker port的存在,仅仅在收到initial或0-RTT包时,需要根据dcid的hash值将其转发到Nginx QUIC机器的listening port上,因此在Stream机器的配置文件中,只需要配置Nginx QUIC的listening port。这样,如果Nginx QUIC需要修改单机的进程数,Nginx Stream层无需做任何改动。

而在Nginx QUIC端,只需在Nginx现有进程模型的基础上,为每个进程额外分配一个worker port,并在为客户端生成的dcid中包含ip+worker port的信息即可。

3.4 0-RTT实现

QUIC的另一个重要特性是支持0-RTT建立连接,它通过UDP+TLS1.3构建安全的互联服务。对于TLS1.3来说,如果是首次建立连接需要1-RTT,非首次可以实现0-RTT。

当客户端与服务端第一次建立连接时,服务端会依赖加密层的TLS会生成加密的New Session Ticket返回给客户端,并将解密的ticket_key保存在本地。客户端在发起0-RTT请求时,会在报文的PSK中带上NewSession Ticket。服务端收到报文时,通过ticket_key对PSK中的信息进行解密。如果解密成功,则可以恢复之前的session,后续直接进行安全通信。如果失败,则需要重新握手建立TLS连接。

0-RTT实现示意图如下:

047249e758bbfb321e2dc57d9e2c6fac.png

可以看到,服务端支持0-RTT的关键就是需要包含恢复session所需的ticket_key。但是,nginx中生成的ticket_key是保存在进程的上下文中的,由于nginx中各个进程的上下文是相互独立的,因此不同进程间的ticket_key无法共享。

并且0-RTT握手时数据包中的dcid由客户端随机生成,不包含路由信息,所以Nginx Stream层也无法通过dcid将0-RTT请求转发到之前已经与客户端建连的进程中。这就导致如果服务端进程无法解密收到的0-RTT数据包,就会导致0-RTT握手失败,客户端需要重新发起1-RTT握手请求。

为了解决这个问题,我们引入了Redis,使得服务端集群中的各机器各进程共享ticket_key。一个进程在生成ticket_key之前,先去查找redis是否已经存在ticket_key,如果已经存在直接查询出来作为当前进程ticket_key,如果不存在直接生成并且存入Redis。这样可以保证在各个进程中的ticket_key相同,最终的效果是如果A进程加密的session,0-RTT时被转发到了B进程,因为A、B进程的ticket_key相同,B进程也可以解密session,完成连接的建立。

改造后的0-RTT流程如下所示:

54f5e25e3bdd6ec8513c516f3ac6a1e4.png

四、总结

QUIC协议由于其强大的拓展性与灵活性,以及弱网环境下呈现出来的优势,近几年逐渐被各大厂商应用在生产环境中。我们针对IBU业务海外流量大的特点,基于Nginx官方的quic分支进行改造,在生产环境实现了多机多进程环境下0-RTT、连接迁移等功能,并取得了Trip.com App请求总体平均耗时减少20%的良好效果。后续我们也会紧跟社区步伐,将更多QUIC的优秀特性更新集成到我们的服务中,推动QUIC协议在携程更好地落地。

【推荐阅读】

c26e3df5f4aa05df1838d1464dfc84e4.png

 “携程技术”公众号

  分享,交流,成长

Qt6.7.2安装QUC SDK6.5.2控件过程 如果选择,这是关键,Qt6.7.2对应低于的QUC SDK的qt_6_5_2(都是各自目前最高本版),MSVC2019 64-bit 对应qt_6_5_2_msvc2019_64、MinGW 11.2.0 64-bit对应qt_6_5_2mingw112_64 如果看呢11.2.0 64-bit就是112_64,这样找一一对应的本版,编译本版,一定,一定,一定,大版11版,要一一对应,重要的事情说三次,这个一定要一致的本版才能使用,可以看看各个编译本版。在安装过程中,走了不少弯路,现写一个安装过程。 阅读详情

相关推荐

Skywalking链路追踪自身耗时和总耗时算法分析

Skywalking链路追踪自身耗时和总耗时算法分析

domain.5忘初心 6055

Qt自定义控件的使用\quc的使用心得

使用quc自定义控件的心得 开头的话 致谢@feiyangqingyun: https://blog.csdn.net/feiyangqingyun/article/details/89196148 1、如何将quc控件显示在Qt creator中 如何获取quc的文件此处不再详述。 1.1 :查看Qt creator的编译版本 Based on Qt 5. 15.2(MSVC 2019,64bit) 意思是我们现在用的Qt creator是使用MSVC 2019,64bit编译出来的。 1. 2 :

weixin_43388233的博客 8258

1、Qt UI控件 -- qucsdk

Qt编写的自定义控件插件的sdk集合,包括了各个操作系统的动态库文件以及控件的头文件和sdk使用demo。类似于Wpf中的LivChart2控件库,都是一些编译好的控件,可以直接集成到项目中。该控件是飞扬青云大神多年前开发的,通往大神的路如下:

roujian0985的博客 2111

干货 | Trip.com APP QUIC应用和优化实践

作者简介Logan,携程移动开发专家,关注大前端技术领域,对APP网络、性能、稳定性有深入研究。Trip.com APP(携程国际版)主要服务于海外用户,这些用户请求大多需要回源至国内,具有链路长、网络不稳定、丢包率高等特性。为了解决用户请求耗时长、成功率低的痛点,在2021年初我们尝试引入QUIC来提升网络质量。经过近一年的优化实践,取得了显著的成果:网络耗时降低20...

携程技术 787

00前言说明-Qt自定义控件大全

Qt自定义控件是一套纯QtWidget代码编写的自定义控件大全组件,简称quc,是一套和qwt类似的自定义控件插件。不仅控件数量远超qwt以及其他第三方的控件组件,每个控件都有独立的使用demo并且注释详细,非常适合初学者和进阶者。

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 5897

quc自定义控件(超过60个)设计师插件

超多的quc自定义控件,纯widget编写。使用方便可移植;

【Arthas性能排查系列(一)】检查Java程序调用链路的耗时情况

Arthas排查Java程序调用链路耗时情况

qq_43097201的博客 3586

基于深度残差U-Net与多尺度注意力机制的医学图像分割系统

本文提出了一种创新的医学图像分割系统,通过融合残差连接、通道注意力机制和空间金字塔池化技术,构建了高性能的UResnet分割网络。系统采用编码器-解码器架构,创新性地引入多层次特征增强模块,显著提升了医学图像中复杂组织结构的分割精度。实验结果表明,该方案在多个医学图像数据集上均取得了优异性能,边界分割精度提升15%,训练收敛速度提升30%,同时减少20%计算量。系统为临床诊断提供了可靠的技术支持,未来可扩展至3D医学图像分割和联邦学习等方向。

Henry的博客 813

一图看懂 RTT 设备层次

本文由RT-Thread论坛用户@yangjie原创发布:https://club.rt-thread.org/ask/article/2997.html 初学者福利。 粗略地画了一个图,主要针对设备这块,能帮助初学者理解设备架构的层次关系。 基础知识:《IO设备模型》 初学者可以点击链接先做了解。 下图所示为RTT设备层次关系。 (1)STM32为例 使用 cubemx 配置的外设,点击生成代码之后,外设的初始化代码会更新到 stm32xxx_hal_msp.c 文件中,然后被 drv_xxx.C 调用对

rtthreadiotos的博客 1052

Transformers 中的 Softmax 可以并行加速么?

通过融合前两个计算步骤,降低执行Reduce_max和Reduce_sum等操作的通信开销。利用共享内存来存储临时数据,以减少对全局内存的访问成本。

stephen147的博客 1234

AgentFlow:模块化智能体框架与Flow-GRPO强化学习实战解析

在人工智能领域,大语言模型(LLM)与智能体(Agent)技术正推动着自动化任务处理的发展。其核心原理在于通过规划、执行与反馈的循环,使AI系统能够自主调用工具解决复杂问题。这一技术的价值在于突破单一模型的局限性,实现更可靠的多步骤推理。在实际应用中,智能体框架需要处理搜索、代码执行、数学计算等多种场景。本文聚焦的AgentFlow框架,正是通过模块化设计将智能体拆分为规划者、执行者、验证者和生成者四个专家模块,并引入Flow-GRPO强化学习算法进行流程内优化。该框架在搜索增强与工具调用等任务上展现出显著

weixin_42311427的博客 367

如何优化Nginx的HTTP/3性能?

如何优化Nginx的HTTP/3性能?

深山技术宅的博客 864

轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码

轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码

默默科研仔的博客 273

【quic协议】quic介绍及部分ns3-quic源码解析

介绍主要quic特性以及部分ns3-quic源码

m0_54984588的博客 1518

基于YOLOv10的PCB电子元件智能识别系统设计与实现

数据预处理模块:负责对原始PCB图像进行标注、增强和格式转换模型训练模块:基于YOLOv10架构进行模型训练和优化推理检测模块:加载训练好的模型进行实时检测用户界面模块:提供友好的交互界面,方便用户操作和结果可视化YOLO(You Only Look Once)系列算法自2016年提出以来,经历了多次迭代更新。YOLOv1-v3:奠定了YOLO系列的基础架构YOLOv4-v7:引入大量优化技巧和网络结构改进YOLOv8-v9:进一步优化模型结构和训练策略YOLOv10。

YOLO 155

学Simulink——基于风力发电系统的建模与仿真场景:基于自适应控制的风力发电系统输出功率调节

本文详细介绍了使用Simulink搭建风力发电系统自适应控制模型的完整流程。首先阐述了风速波动对电网的影响及自适应控制的优势,然后逐步指导创建Simulink项目、搭建系统结构(包括风速源、风轮机、发电机等模块),重点讲解了模型参考自适应控制器(MRAC)的设计步骤和参数设置方法。通过仿真分析验证了系统在风速变化时仍能保持输出功率稳定,展示了自适应控制的响应速度和鲁棒性。最后提出了引入深度学习预测、多变量控制等优化方向,为新能源领域工程师提供了实用的建模与仿真指导。

amy_mhd的博客 220

微服务链路调用耗时示例图

记录: 1. 没有下级链路数据需要组合,QPS应该在10ms以内,不能超过20ms。 2. 调用链路不是指得服务的调用层级,而是指得API接口的层级! 3. 调用时长对用户体验非常重要,但是又无法避免外部数据的问题,所以没有下级链路的需要竟可能的优化自己的响应时长 链路问题谁都知道,但是不看图,体会的就不清楚。 记一次看到的超长链引起的请求耗时几秒的情况。 转载于:htt...

weixin_33974433的博客 979

Python 实战:全面解析“微信搜一搜”内容爬取,从入门到企业级架构

本文将带你从零搭建爬虫项目,采用 Requests、Scrapy、Selenium、Proxy 池、中间人监控(如 Fiddler/mitmproxy)、分布式调度、数据库持久化、断点续抓等方案,实现可持续、抗封能力强的内容抓取系统。理解“微信搜一搜”页面结构与 Javascript 渲染逻辑;使用 Scrapy 框架搭建分布式爬虫;使用 Selenium 模拟浏览器抓取;构建代理池提升爬取成功率;对抗验证码、IP 封禁与 cookie 过期问题;

2201_76125261的博客 1392

2022年11月 .NET CORE工具案例-.NET 7中的Quic通信

QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。我们知道,TCP/IP协议族是互联网的基础。其中传输层协议包括TCP和UDP协议。与TCP协议相比,UDP更为轻量,但是错误校验也要少得多。这意味着UDP往往效率更高(不经常跟服务器端通信查看数据包是否送达或者按序),但是可靠性比不上TCP。通常游戏、流媒体以及VoIP等应用均采用UDP,而网页、邮件、远程登录等大部分的应用均采用TCP。

微软MVP Eleven 3万+

【漏洞复现】永恒之蓝 MS17-010 远程溢出漏洞(CVE-2017-0143)

文章目录声明前言一、漏洞原理简述二、漏洞代码深层解析三、实验步骤四、漏洞补丁总结 声明 本篇文章仅用于技术研究与技术学习,切勿用于非授权下攻击行为,切记! 前言 Windows7 存在 MS17-010 永恒之蓝(远程溢出漏洞) ,该漏洞是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的漏洞,该漏洞导致攻击者在目标系统上可以执行任意代码 一、漏洞原理简述 MS17-010漏洞出现在Windows SMB v1中的内核态函数 srv!SrvOs2FeaListToNt 在处理FEA(File Ex

李同學AI安全 9626

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

QUIC协议

QUIC协议相关文章 《网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议》 《技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解》 《让互联网更快:新一代QUIC协议在腾讯的技术实践分享》 《七牛云技术分享:使用QUIC协议实现实时视频直播0卡顿!》 ...

努力努力再努力L 4676

IEM模型,地表粗糙度模拟

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

QUIC的优势与缺陷

被寄予厚望的下一代互联网传输协议,QUIC究竟有哪些优点呢? 总结如下:多路复用:QUIC升华了HTTP/2中的多路复用技术,实现了基于互相独立的多流(多通道)数据传输,从根本上解决了TCP存在的队头阻塞问题。快速握手:即使不使用TLS,TCP建连过程也至少需要经过三次握手。而QUIC融合了握手和密钥协商交换的过程,从而实现了“初次光临1-RTT回头客0-RTT”的建连速度,大大提高了握手效率,这对于短连接频繁或者时延较高的场景非常有用精准的RTT计算:TCP由于受到“重传报文仍然使用原始报文的序列号(se

H3C的博客 5363

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

QUIC协议的应用场景和优势

QUIC(Quick UDP Internet Connections)是一种基于用户数据报协议(UDP)的传输层协议,旨在提供比传统的传输层协议(如TCP)更快的连接速度和更好的性能。移动应用程序对低延迟和高性能的需求很高,QUIC协议通过减少握手时间和降低连接建立的成本,使移动应用程序更加响应迅速。总的来说,QUIC协议在提高网络性能、降低延迟、提供安全性和适应移动环境等方面具有显著的优势,因此在各种应用场景中都得到了广泛的应用。这提高了连接的利用率,减少了连接建立和维护的开销,从而提高了整体性能。

ws192786的博客 1915

网络篇03 | 应用层 quic

TCP 的拥塞控制实际上包含了四个算法:慢启动,拥塞避免,快速重传,快速恢复。QUIC协议当前默认使用TCP的拥塞控制算法,并在其基础上进行了相应的改进;当然QUIC也支持其他的拥塞控制算法。主要的改进点有:可插拔设计单调递增的Packet Number不允许Reneging更多的Ack块精确计算RTT时间拥塞控制,对网络传输的重要性不言而喻,TCP的拥塞控制功能集成在操作系统的内核,应用程序是无法控制的。轻微变动就会影响整个机器上的全部TCP连接(已有的和新增的)。

qiushily2030的博客 2178

QUIC原理及使用

QUIC原理及使用

John_ToStr的博客 1358

通过 curl 命令判断网络连接的耗时瓶颈

通过 curl 命令判断网络连接的耗时瓶颈

qq_56809520的博客 4012
上一篇: 干货 | Flutter在携程复杂业务的高性能之旅
下一篇: 干货 | 携程酒店搜索引擎AWS上云实践
携程技术
博客等级 码龄10年 3715粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值