​HTTP和TCP协议的队头阻塞​

news2024/5/20 1:21:48

队头阻塞(Head-of-line blocking)其实有两种,一种是 TCP 队头阻塞,另一种是 HTTP 队头阻塞,而这两者之前其实还存在一定的联系,毕竟 HTTP1/2 是建立在 TCP 协议之上的应用层协议,另外还有HTTP3对队头阻塞的解决。

1、HTTP/1.x 的队头阻塞

HTTP/1.x 有个问题叫队头阻塞,即一个连接同时只能有效地承载一个请求。

问题:HTTP/1.1 是一个纯文本协议,它只在有效荷载(payload)的前面附加头(headers),在资源块(resource chunks)之间不使用分隔符。它不会进一步区分单个资源与其他资源。HTTP 规定报文必须是“一发一收”,这就形成了一个先进先出的串行队列。

“请求 - 应答”模式则加剧了 HTTP 的性能问题,这就是著名的“队头阻塞”(Head-of-line blocking),当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户端迟迟收不到数据。

比如:当浏览器发送给服务器的资源包括:js(大资源块)、css(小资源块)等内容,但是服务器不能对他们进行分块解析,就会导致需要等到js块解析完毕后,才去解析css块。

一种解决办法,浏览器打开许多并行TCP连接,但这既不高效,也不可扩展。

2、TCP传输层队头阻塞 

TCP 是面向连接的、可靠的流协议,其为上层应用提供了可靠的传输,保证将数据有序并且准确地发送至接收端。为了做到这一点,TCP采用了“顺序控制”和“重发控制”机制,另外还使用“流量控制”和“拥塞控制”来提高网络利用率。

应用层(如HTTP)发送的数据会先传递给传输层(TCP),TCP 收到数据后并不会直接发送,而是先把数据切割成 MSS 大小的包,再按窗口大小将多个包丢给网络层(IP 协议)处理。

IP 层的作用是“实现终端节点之间的通信”,并不保证数据的可靠性和有序性,所以接收端可能会先收到窗口末端的数据,这个时候 TCP 是不会向上层应用交付数据的,它得等到前面的数据都接收到了才向上交付,所以这就出现了队头阻塞,即队头的包如果发生延迟或者丢失,队尾必须等待发送端重新发送并接收到数据后才会一起向上交付。 

即:如果一个 TCP 包丢失,所有后续的包都需要等待它的重传,即使它们包含来自不同流的无关联数据。

当然 TCP 有快重传和快恢复机制,一旦收到失序的报文段就立即发出重复确认,并且接收端在连续收到三个重复确认时,就会把慢开始门限减半,然后执行拥塞避免算法,以快速重发丢失的报文。

3、HTTP/2(基于 TCP)的队头阻塞

使用 SPDY协议 作为 HTTP/2 的起点,并使用多路复用(单个连接上可以进行并行交错的请求和响应,之间互不干扰),解决了队头阻塞的问题,不过 TCP 本身的队头阻塞是无法避免的,而且对其影响更大,因为多个同域名的请求都只会使用同一个 TCP 连接,不会有多个并行连接。

目标:回到单个 TCP 连接,正确地复用资源块,解决http队头阻塞问题。

解决方案:在资源块之前添加了数据帧(DATA frame),标识每个资源块属于哪个“流”(stream)。这些数据帧主要包含两个关键的元数据。

首先:下面的块属于哪个资源。每个资源的“字节流(bytestream)”都被分配了一个唯一的数字,即流id(stream id)。

第二:块的大小是多少。

这样报文到达服务端之后,服务端应用可以区分哪些属于同一个资源快,进而可以进行复用。即:解决了“应用层”队头阻塞。

4、HTTP/3(基于 QUIC)的队头阻塞

由于tcp本身的限制,难以对其进行改变,使其具有”流“的意识。

选择的替代方法是以 QUIC 的形式实现一个全新的传输层协议。它运行在不可靠的 UDP 协议之上。但它包括 TCP 的所有特性(可靠性、拥塞控制、流量控制、排序等),且集成了TLS,不允许未加密的连接。故创建了 HTTP/3,运行在QUIC协议上。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode 图论 一】初探有向图Directed Graph

今天主要介绍DAG (Directed acyclic graph),有向无环图。 无向图的问题相对有向图比较简单,比如岛屿问题,迷宫问题等。 在有向图中,我们通常只关注环是否存在,因为有向图中环的存在会让我们的…

HBuilderX的快捷键 和 常见配置

快捷键说明ctrl /添加注释&#xff08;js&#xff1a;// 注释、css&#xff1a;/* 注释 */、vue/nvue模板&#xff1a; <!-- 注释 -->&#xff09;Ctrl C 拷贝当前行或者所选代码块到剪切板Ctrl X剪切当前行或所选代码块到剪切板Ctrl V粘贴剪切板上的内容Ctrl D 删除…

浏览器实时查看日志系统-log.io

标题 前言操作步骤1. Install server via npm安装Nodejs2. Launch server3. Install file input via npm4. Configure file input前言 log.io 是一个实时日志监控工具,采用 node.js + socket.io 开发,使用浏览器访问,每秒可以处理超过5000条日志变动消息。有一点要指出来的…

叔可忍婶不可忍!马斯克3月呼吁暂停人工智能,4月却创立TruthGPT

2018年马斯克退出了OpenAI团队。 2022年11月&#xff0c;ChatGPT在北美大陆问世。 2023年3月21日&#xff0c;马斯克在未来生命&#xff0c;签署并呼吁&#xff0c;暂停高级人工智能的研发。 2023年4月18日马斯克创立了TruthGPT。 同时&#xff0c;亚马逊&#xff0c;也创立了B…

提桶跑路转行到软件测试,鬼知道我经历了什么?很庆幸转行成功...

说来惭愧&#xff0c;我的大学不是985也不是211&#xff0c;不过地质学科群一直排名国内前几&#xff0c;2017年也藉由地质学学科评上了“双一流”。咱们土木工程跟着沾沾光&#xff0c;也能和别人吹吹牛逼&#xff0c;所以毕业后的工作基本上在省内是不愁的。 但是我还是低估了…

“全自主、全流程、全覆盖”2023实景三维新技术研讨会广州站圆满举行!

4月12日&#xff0c;由中国测绘学会、中国地理信息产业协会指导&#xff0c;广州省测绘学会主办&#xff0c;武汉大势智慧科技有限公司承办的全自主、全流程、全覆盖”2023实景三维新技术研讨会广州站在广州珠江宾馆隆重举行。 本次会议广东省测绘学会、地图院、测绘院、市城市…

ChatGPT促进中国大语言模型发展,底层标注数据质量成关键,景联文科技提供专业数据采集标注服务

自开年以来&#xff0c;ChatGPT的热浪带来了一场全民的科技狂欢&#xff0c;同时打开了业内对NLP发展的想象空间&#xff0c;拉开了大语言模型产业和生成式AI产业飞速发展的序幕。 海外市场中OpenAI、微软、谷歌、Meta等巨头都在积极争抢布局ChatGPT&#xff0c;中国市场中百度…

NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022

然后我们来看一下如何操作模板 首先我们准备好了一个模板,叫做CsvToJSON这样一个模板文件了 然后我们再来看左下角有个上传模板 可以选择这个模板上传上来,然后,就可以在右侧找到,菜单,找到template,点击,来查看模板了 然后添加组,就是顶部的那个两个圆圈的组件拖过来以后用来…

android compiled_local_resources\debug\out‘ is not a readable directory.

需要删除android目录下的.gradle文件。如下文件即可&#xff1a;

PyTorch实战1:实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营-第P1周&#xff1a;实现mnist手写数字识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 目录 一、 前期准备1. 设置GPU2. 导入数…

EPICS Archiver Appliance在Debian11 容器下安装文档

PC安装虚拟化平台趟坑记录 上面proxmox在pc上安装好之后&#xff0c;相关的后台开始搭建&#xff0c;首先是AA数据存档服务。 EPICS Archiver Appliance在Debian11下安装文档 上面文档是晓康整理的&#xff0c;还一直没空完整的按流程做一遍&#xff0c;正好就着proxmox平台在…

【MySQL | 进阶篇】08、InnoDB 引擎架构、事务原理及 MVCC 讲解

目录 一、逻辑存储结构 二、架构 2.1 概述 2.2 内存结构 2.2.1 Buffer Pool 2.2.2 Change Buffer 2.2.3 Adaptive Hash Index 2.2.4 Log Buffer 2.3 磁盘结构 2.3.1 System Tablespace 2.3.2 File-Per-Table Tablespaces 2.3.3 General Tablespaces 2.3.4 Undo T…

Hbase1.3:Hbase基础架构、Hbase基础架构角色:Master、Region Server、Zookeeper、HDFS

Hbase1.3&#xff1a;Hbase基础架构、Hbase基础架构角色&#xff1a;Master、Region Server、Zookeeper、HDFS Hbase基础架构Hbase基础架构角色1&#xff09;Master2&#xff09;Region Server3&#xff09;Zookeeper4&#xff09;HDFS Hbase基础架构 Hbase架构里面&#xff0…

ubuntu18.04手动安装网卡驱动,重启系统后,驱动消失的解决方案

ubuntu18.04手动安装网卡驱动&#xff0c;重启系统后&#xff0c;驱动消失的解决方案 文章目录 ubuntu18.04手动安装网卡驱动&#xff0c;重启系统后&#xff0c;驱动消失的解决方案 1.问题描述2.问题分析3.解决方案&#xff08;使用 Netplan 配置网络&#xff09; 参考&#x…

XXL-JOB介绍

一、介绍 1.1、什么是XXL-JOB XXL-JOB是一个分布式任务调度平台&#xff0c;用于解决分布式系统中定时任务执行问题 1.2、架构图 二、部署 2.1、源码部署 2.1.1、下载源码 gitee下载地址 github下载地址 2.1.2、初始化数据库 2.1.3、修改数据库配置 2.1.4、将xxl-job-admi…

Java泛型--Java中的E、T、?

&#x1f341; 先说结论&#xff1a; T、E、K、V、&#xff1f;本质都是通配符。用于定义泛型类、泛型方法、泛型接口…换成其他字母也行&#xff0c;只是这几个字母是一种编码约定。T&#xff0c;即type&#xff0c;表示一个具体的Java类型E&#xff0c;即element&#xff0c;…

2023测试人必备60个实用测试工具推荐,让你成为测试大咖

目录 引言 一、测试管理工具 二、接口测试工具 三、性能测试工具 四、C/S自动化工具 五、白盒测试工具 六、代码扫描工具 七、持续集成工具 八、网络测试工具 九、app自动化工具 十、web安全测试工具 绵薄之力 引言 无论你是一名资深测试人员还是刚入行的新手&…

大数据实战 --- 世界新冠疫情数据分析

目录 开发环境 数据描述 功能需求 数据准备 统计计算 Hbase Hive 分析数据 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup hiveserver2 1>/dev/null 2>&1 &…

基于多种流量检测引擎识别pcap数据包中的威胁

在很多的场景下&#xff0c;会需要根据数据包判断数据包中存在的威胁。针对已有的数据包&#xff0c;如何判断数据包是何种攻击呢&#xff1f; 方法一可以根据经验&#xff0c;对于常见的WEB类型的攻击&#xff0c;比如SQL注入&#xff0c;命令执行等攻击&#xff0c;是比较容…

Radzen Blazor Studio 2.84 Crack

Radzen Blazor Studio 是一种桌面工具&#xff0c;它使 开发人员 能够创建漂亮的商业 Blazor 应用程序。快速地。 开放技术栈 没有供应商锁定。生成的源代码是人类可读的&#xff0c;您可以使用免费工具构建它。 Radzen 由流行的开源技术——ASP.NET Core、Blazor、Bootstrap …