当前位置: 首页 > news >正文

QUIC浅析

QUIC(Quick UDP Internet Connections)是由Google主导设计、IETF标准化的下一代传输层协议,旨在解决TCP在现代网络环境下的性能瓶颈。

一、TCP的局限性

为什么需要QUIC?。TCP作为传统传输协议,存在两个问题:

(1) 连接建立延迟高

TCP需三次握手建立连接,HTTPS在此基础上还需TLS握手(通常1-2个RTT),总计耗时显著。尽管TLS 1.3支持0-RTT,但TCP握手仍不可免。

(2) 队头阻塞(Head-of-Line Blocking)

TCP以字节流为单位传输,单个数据包丢失会导致后续所有数据缓存等待重传,即使其他流的数据已到达,应用层也无法使用。

QUIC通过基于UDP重构传输逻辑,从根本上解决这些问题。

二、QUIC核心特性与技术实现

  1. 基于UDP,实现快速连接建立
    QUIC运行在UDP之上,规避了内核TCP协议栈的限制,允许在用户空间实现协议逻辑。其最大优势在于加密与连接建立的合并
  • 1-RTT握手:首次连接时,QUIC将传输层与加密层(TLS 1.3)握手合并,客户端在第一条消息中携带密钥材料,服务器响应时即可开始发送加密数据,实现1-RTT安全连接。
  • 0-RTT快速重连:若客户端与服务器曾通信,可利用之前协商的密钥直接发送应用数据,实现0-RTT,显著提升重复访问性能(如页面刷新、APP重连)。
  • 注:强调“0-RTT并非无安全风险”,其存在重放攻击(replay attack)隐患,需应用层设计防重放机制(如一次性令牌)。
  1. 多路复用与无队头阻塞
    QUIC在协议层原生支持多路复用(Multiplexing),每个HTTP请求映射为独立的QUIC流(Stream)。每个流独立编号和确认,一个流的数据包丢失仅影响该流,其他流可继续传输与交付,彻底消除TCP的队头阻塞问题。支持单向流与双向流,并在连接级和流级分别实施流量控制,避免接收端缓冲区溢出。
  2. 连接迁移(Connection Migration)
    传统TCP依赖四元组(源IP、源端口、目的IP、目的端口)标识连接。当设备网络切换(如Wi-Fi转4G),IP变更导致TCP连接中断需重新握手。QUIC引入连接ID(Connection ID) 作为唯一标识。即使IP或端口变化,只要Connection ID不变,服务器即可识别原连接,实现无缝迁移。
  3. 前向纠错(FEC)与改进的拥塞控制
    QUIC支持在数据包中添加冗余信息,允许接收方在少量丢包时无需重传即可恢复数据,适用于高丢包场景。在用户空间实现拥塞控制算法(如Google的BBR、Cubic),可动态更新而无需操作系统升级。

三、QUIC与HTTP/3

HTTP/3 是HTTP协议的第三个主要版本,其底层传输协议从TCP变为QUIC。
HTTP/3继承了HTTP/2的多路复用、头部压缩(QPACK)等特性,并通过QUIC获得低延迟、抗队头阻塞等优势。

注意:QUIC ≠ HTTP/3。QUIC是传输层协议,也可承载其他应用协议(DNS、MQTT)。

http://www.dtcms.com/a/335952.html

相关文章:

  • 流浪循环 全DLC(Rogue Loops)免安装中文版
  • 超市电商销售分析项目:从数据分析到业务决策
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十一节:网关安全-对称与非对称加密
  • PHP静态类self和static用法
  • 【计算机视觉与深度学习实战】04基于K-Means聚类的图像分割系统设计与实现
  • Java Stream 初解
  • 14.web api 5
  • 基于MATLAB多智能体强化学习的出租车资源配置优化系统设计与实现
  • 无人机视角乱堆垃圾垃圾场地分割数据集labelme格式1501张1类别
  • qt svg缺失元素, 原因是不支持 rgba
  • Android studio gradle有关设置
  • 图解 setTimeout + 循环:var 共享变量 vs let 独立绑定
  • 《若依》介绍和环境搭建
  • 基于径向基函数神经网络的数据回归预测 RBF
  • 2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
  • 三维重建-动手学计算机视觉19(完结)
  • Android Studio中创建Git分支
  • ——分治——
  • metasploit 框架安装更新遇到无法下载问题如何解决
  • Sentinel和12.5米高程的QGIS 3D效果
  • 双椒派E2000D Sysfs与GPIO控制实战指南
  • KINGBASE集群日常维护管理命令总结
  • 云原生俱乐部-杂谈3
  • 深入掌握 Kubernetes Deployment:部署、重启、管理和维护全攻略
  • 为什么TCP连接是三次握手?不是四次两次?
  • 《Cocos游戏开发入门一本通》第四章
  • 智能体的记忆(Memory)系统
  • HAL-USART配置
  • 数据处理到底能做什么?数据处理核心原理与流程拆解
  • Web 开发 16