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

QUIC不是TCP的替代品

QUIC取代了TCP成为HTTP3的基础传输协议,不是因为QUIC能够取代TCP的所有应用场景,而是因为QUIC更适合HTTP的请求/响应业务模型。原文: QUIC Is Not a TCP Replacement

TCP新规范(RFC 9293)的发布是网络界的一件大事,值得围绕这一主题发表第二篇文章(第一篇: 下一代TCP[1]),本文我们将围绕QUIC和TCP的比较展开。


我们在上一篇关于TCP的过去和未来的文章中,谈到了QUIC可能取代TCP的可能性。本文我们想说的是,实际上QUIC解决的问题与TCP解决的问题有所不同,因此不应该被视为TCP的替代品。对于某些(甚至大多数)应用来说,QUIC很可能成为默认传输方式,但这是因为TCP被用到了原本就不适合的场景。接下来看看为什么这么说。

早在1995年Larry和我编写《计算机网络: 一种系统方法》第一版的时候,当我们编写传输协议那一章时,将其命名为"端到端协议[2]"。那时候,互联网上只有两种值得注意的传输协议,UDP和TCP,所以我们分别给它们写了独立的章节。由于那本书旨在教授网络原理而不仅仅是RFC的内容,因此我们将这两个部分框定为两种不同的通信范式: 一个是简单的多路复用服务(以UDP为例),一个是可靠字节流(TCP)。但还有第三种范式,即远程过程调用(Remote Procedure Call[3], RPC),Larry认为有必要介绍这种范式,但并没有真正知名的互联网协议示例实现了该范式。当时我们用来说明RPC的例子现在看来很奇怪,是SunRPC[4]以及Larry当时研究x-kernel[5]时自己写的一个例子。不过现在有许多基于IP的RPC实现,gRPC[6]就是最著名的例子之一。

当大多数网络书籍只涉及TCP和UDP时,为什么我们觉得需要完整的章节来讨论RPC 呢?首先,RPC在当时是分布式系统社区的关键研究领域之一,1984年Nelson和Birrell的论文[7]刺激了一代与RPC相关的项目。在我们看来,可靠字节流并不是RPC的正确抽象。RPC的核心是请求/应答范式。客户端发送一堆参数到服务器,服务器用这些参数做一些计算,然后返回计算结果。是的,可靠字节流可能有助于通过网络正确获得所有参数和结果,但对于RPC来说,还有更多东西。先不考虑通过网络传输序列化参数的问题,RPC实际上并不是传输字节流,而是发送消息并获得对应的响应。有点像数据报文服务(如UDP或IP提供的),但它需要的不仅仅是不可靠的数据报文传递,而是需要处理丢包、无序和重复的消息;需要一个标识符空间来匹配请求和响应;还需要支持消息的分片和重组,以及其他一些需求。可靠字节流可以防止乱序传递,这也是RPC所需要的。这可能是为什么在20世纪八九十年代出现了这么多RPC框架的原因,因为分布式系统需要RPC机制,而标准TCP/IP协议套件没有任何现成的东西。(RFC 1045实际上定义了一种实验性的面向RPC的传输,但从未流行起来。)当时TCP/IP是否会像今天这样占据主导地位也并不明显,因此一些RPC框架(例如DCE)被设计成独立于底层网络协议。

TCP/IP协议栈中缺少对RPC的支持,从而为QUIC奠定了基础。当HTTP在20世纪90年代初出现时,并没有试图解决RPC问题,而是试图解决信息共享问题,但它确实实现了请求/响应语义。HTTP的设计者由于缺乏明显更好的选择,决定在TCP上运行HTTP,由于每个"GET"都使用一个新连接,在早期版本中性能非常差。为了提高性能,引入了对HTTP的各种优化,如流水线(pipelining)、持久化连接以及并行连接,但是TCP的可靠字节流模型从来都不是完美适配HTTP的。随着传输层安全(TLS)的引入,又叠加了一组加密信息的双向交互,HTTP的需求和TCP的支持之间的不匹配变得越来越明显。Jim Roskind在2012年的QUIC设计文档中清晰的解释了这一点,行首阻塞、拥塞响应不佳以及TLS引入的额外RTT都被认为是在TCP上运行HTTP的固有问题。

简单介绍一下这里发生的事情: 互联网的"窄腰(narrow waist)"最初只是IP协议,旨在支持上面的各种协议。但不知何故,"腰"也开始包括TCP和UDP,这两者是唯一可用的传输协议。如果只想要数据报文服务,可以使用UDP。如果需要任何可靠传输,TCP就是答案。如果需要的东西既不能完全映射到不可靠的数据报文,也不能完全映射到可靠的字节流,那么就不走运了。但是,要让TCP支持这么多上层协议,要求就太高了。

QUIC正在做很多工作,其定义跨越三个RFC,涵盖了基本协议(RFC 9000)、TLS的使用(9001[8])和拥塞控制机制(9002[9])。但其核心是互联网缺失的第三种范式: RPC的实现。如果需要真正的可靠字节流(例如下载几个G的操作系统更新时),那么TCP确实是为这项工作而设计的,但是HTTP(S)更像RPC而不是可靠字节流。可以这样理解QUIC,它最终将RPC范式交付给了互联网协议族,而这肯定会使运行在HTTP(S)上的应用程序受益,特别是包括gRPC以及大家广为依赖的RESTful API。

之前的文章[10]提到QUIC时,我们认为这是一个很好的案例研究,可以在需求变得更清晰时重新考虑系统分层,要点是TCP(可靠字节流)满足了一组需求,并且其拥塞控制算法[11]持续演进并为这些需求服务。QUIC实际上满足了一组不同的需求。由于HTTP在今天的互联网处于绝对中心地位(确实有人争论它是否正在成为新的"窄腰"),QUIC可能成为主要传输协议(不是因为取代TCP,而是因为满足了运行其上的主要应用程序的需求)。

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind

参考资料

[1]

下一代TCP: https://www.mdnice.com/writing/6c05ab8e49954207a5f583268b6c4e58

[2]

端到端协议: https://book.systemsapproach.org/e2e.html

[3]

Remote Procedure Call: https://book.systemsapproach.org/e2e/rpc.html

[4]

SunRPC: https://en.wikipedia.org/wiki/Open_Network_Computing_Remote_Procedure_Call

[5]

x-kernel: https://dl.acm.org/doi/10.1145/74850.74860

[6]

gRPC: https://grpc.io

[7]

Implementing remote procedure calls: https://dl.acm.org/doi/10.1145/2080.357392

[8]

RFC 9001: https://datatracker.ietf.org/doc/html/rfc9001

[9]

RFC 9002: https://datatracker.ietf.org/doc/html/rfc9002

[10]

The Importance of Thinking Across Layer Boundaries: https://systemsapproach.substack.com/p/the-importance-of-thinking-across

[11]

TCP拥塞控制: https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU2MTgxODgwNA==&action=getalbum&album_id=2460055314927255553#wechat_redirect

- END -

本文由 mdnice 多平台发布

相关文章:

QUIC不是TCP的替代品

QUIC取代了TCP成为HTTP3的基础传输协议,不是因为QUIC能够取代TCP的所有应用场景,而是因为QUIC更适合HTTP的请求/响应业务模型。原文: QUIC Is Not a TCP Replacement TCP新规范(RFC 9293)的发布是网络界的一件大事,值得围绕这一主题发表第二篇…...

计算机竞赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …...

GPT系列模型解读:GPT-1

GPT系列 GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI开发。以下是GPT系列的主要模型: GPT:GPT-1是于2018年发布的第一个版本,它使用了12个Transformer…...

王杰国庆作业day3

父子进程对话 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <my_head.h> int main(int argc, const char *argv[]) {mkfifo("./fifo1",0664);mkfifo("./fifo2",0664);pid_t cpid fork();if(0 < cp…...

量子计算基础知识—Part1

1.什么是量子计算机&#xff1f; 量子计算机是基于量子力学原理构建的机器&#xff0c;采用了一种新的方法来处理信息&#xff0c;从而使其具有超强的功能。量子计算机使用Qubits处理信息。 2. 什么是量子系统&#xff1f; 一个量子系统指的是由量子力学规则描述和控制的物理…...

【PostgreSQL】【存储管理】表和元组的组织方式

外存管理负责处理数据库与外存介质(PostgreSQL8.4.1版本中只支持磁盘的管理操作)的交互过程。在PostgreSQL中&#xff0c;外存管理由SMGR(主要代码在smgr.c中)提供了对外存的统一接口。SMGR负责统管各种介质管理器&#xff0c;会根据上层的请求选择一个具体的介质管理器进行操作…...

VSCode安装图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍VSCode的安装过程及其注意事项。 下载VSCode 请在官方网站 https://code.visualstudio.com/ 下载https://code.visualstudio.com/至本地&…...

vscode 无法打开源文件

以下是c/c插件的intelligense设置情况&#xff1a; 解决办法&#xff1a; 重新安装vsode无用&#xff1b;重新下载mingw64&#xff0c;管用了&#xff01;&#xff08;我猜可能是之前换电脑移植文件的时候导致了部分文件丢失&#xff09;...

1.8.C++项目:仿muduo库实现并发服务器之eventloop模块的设计

项目完整在&#xff1a; 文章目录 一、eventloop模块&#xff1a;进行事件监控&#xff0c;以及事件处理的模块二、提供的功能三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 四、框架五、代码 一、eventloop模…...

Linux基本指令(二)

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…...

量化交易全流程(五)

本节目录 策略回测 多因子模型 本节主要讨论回测相关的内容&#xff0c;包括两种不同的回测机制&#xff0c;即向量化回测和事件驱动回测&#xff1b;如何灵活使用开源工具来编写自己的回测程序&#xff1b;不同实现方式的优劣对比等。 在我们研究策略的时候&#xff0c;需要…...

聊聊MySQL的InnoDB引擎与MVCC

目录 一、InnoDB引擎 1.1逻辑存储结构 1). 表空间 2). 段 3). 区 4). 页 5). 行 1.2架构 1.2.1内存结构 1). Buffer Pool 2). Change Buffer 3). Adaptive Hash Index 4). Log Buffer 1.2.2磁盘结构 1). System Tablespace 2). File-Per-Table Tablespaces 3). …...

小病变检测:Gravity Network for end-to-end small lesion detection

论文作者&#xff1a;Ciro Russo,Alessandro Bria,Claudio Marrocco 作者单位&#xff1a;University of Cassino and L.M. 论文链接&#xff1a;http://arxiv.org/abs/2309.12876v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;医学影像中小病变检测 2&#xff0…...

Flink--7、窗口(窗口的概念、分类、API、分配器、窗口函数)、触发器、移除器

星光下的赶路人star的个人主页 内心的平静始于不再让他人掌控你的感情 文章目录 0、前言1、窗口&#xff08;Window&#xff09;1.1 窗口的概念1.2 窗口的分类1.3 窗口API概览1.4 窗口分配器&#xff08;Window Assigner&#xff09;1.4.1 时间窗口1.4.2 计数窗口 1.5 窗口函数…...

vscode 注释插件koroFileHeader

https://blog.51cto.com/u_15785499/5664323 https://blog.csdn.net/weixin_67697081/article/details/129004675...

Centos7安装php-fpm

目录 第一步&#xff1a;查看系统IP地址和网卡名称 第二步&#xff1a;更改网络配置模式 第三步、重启network 查看iptablies ,将第十行&#xff0c;十一行删除 第四步&#xff1a;关闭config 第五步&#xff1a;创建nginx 文件夹 查看目录下的文件 进入nginx文件夹 第…...

计算机网络(五):运输层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 1. 运输层概述 之前所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题&#xff0c;实现了主机到主机的通信&#xff…...

适合在校学生的云服务器有哪些?

随着云计算技术的发展&#xff0c;越来越多的学生开始使用云服务器来进行学习和实践。对于学生来说&#xff0c;选择一款便宜的云服务器不仅可以帮助他们降低成本&#xff0c;还可以提高学习和实践的效率。本文将介绍几款适合学生使用的便宜云服务器。 1、腾讯云学生服务器【点…...

计算机竞赛 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的驾…...

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树 前言一. 验证二叉搜索树二. 不同的二叉搜索树三. 不同的二叉搜索树II 前言 想要精通算法和SQL的成长之路 - 系列导航 二叉搜索树的定义&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...