【图解计算机网络】http1.1,http2.0,http3.0

http1.1,http2.0,http3.0

  • http1.1
    • 长连接
    • 管道传输
    • 缺点
  • http2.0
    • 头部压缩
    • 二进制格式
    • 并发传输
    • 服务端推送
    • 缺点
  • http3.0
    • 无队头阻塞
    • 快速建立连接
    • 连接迁移

http1.1

长连接

在http1.0的时候,一次http请求就要建立一次TCP连接,这一次的http请求完成以后,TCP连接就会断开,如果还要发起第二次的http请求,就要再建立一次TCP连接。

在这里插入图片描述

这样显然效率是很低的,于是http1.1提供了长连接的优化。http的长连接实际上是TCP连接的复用,在完成了一次http的请求与响应之后,该TCP连接不断开,继续供下一个http请求与响应使用。

在这里插入图片描述

通过对TCP连接的复用,减少了过多的TCP握手造成的性能开销,从而提升性能。

管道传输

管道(pipeline)传输是指当第一个http请求发送出去之后,不必等待该http请求的响应,就可以发送下一个http请求。服务端会按顺序处理http请求,客户端也会按顺序的接收到服务端发来的响应。

在这里插入图片描述

但是由于服务端是按顺序处理http请求的,如果前面有一个http请求处理时间较长,迟迟没有处理好,就会阻塞后面的http请求的处理。

在这里插入图片描述

缺点

http1.1虽然做了长连接和管道传输的优化,但是缺点还是很明显的。

  1. 头部没有压缩,存在头部冗余传输造成的带宽浪费,也就是相同的头部字段重复传输的问题
  2. 存在http队头阻塞的问题
  3. 只能由客户端发起请求,服务端只能被动响应

在这里插入图片描述

http2.0

头部压缩

http2.0使用HPACK算法,客户端和服务端双方各维护一张头部信息表,里面存放的头部字段对应的索引号,当有重复的头部字段需要发送时,就不发送该字段,而是发送该字段在头部信息表中对应的索引号。

在这里插入图片描述

二进制格式

http1.1以及之前的版本都是采用纯文本的形式传输的,而http2.0改成二进制格式进行传输。http2.0传输的二进制数据是帧(frame),http2.0就是一帧一帧的传输的。http2.0的二进制数据分为头部帧(Headers frame)和数据帧(Data frame)。

在这里插入图片描述

并发传输

http2.0引入了Stream,不同Stream复用同一条TCP连接,使得不同Stream之间的请求与响应可以并发传输。

在这里插入图片描述
一个TCP连接可以包含多个Stream,不同Stream之间互不影响并且可以并发传输。一个Stream里面包含一个或多个Message,一个Message代表一个http请求或一个http响应,一个Message包含一个过多个frame。

每个Stream都有一个唯一的Stream ID,不同Stream之间通过这个ID区分。

在这里插入图片描述

服务端推送

http2.0还有一个优化就是允许服务端主动推送,比如客户端请求一个html页面,服务端可以在给客户端返回html页面的之后,主动把html里面的css推送给客户端。

在这里插入图片描述

主动推送的css会在服务端建立的Stream中进行发送,也就是说客户端和服务端双方都可以建立Stream。但是客户端建立的Stream的Stream ID必须是奇数,而服务端建立的Stream的Stream ID必须是偶数。

在这里插入图片描述

缺点

http2.0相较于http1.1来说性能已经大大的提高了,而且占用的网络带宽也更小,还支持服务端主动推,可以说是做了非常大的优化。要说http2.0还有什么缺点的话,那就是TCP队头阻塞。

TCP是一个字节流协议,必须保证接收到的字节数据完整且连续,才能把缓冲区里的数据返回给应用层。如果前面有一个字节的数据没有接收到,即使后面的字节数据已经到达,也不能被应用层读取。只有等待该字节到达以后,应用层才能从内核缓冲区中读取到该数据。

在这里插入图片描述

http3.0

为了解决TCP队头阻塞的问题,从http3.0开始,底层就不再依赖TCP协议了,而是改用UDP协议。

由于UDP协议是一个不可靠的协议,所以http3.0不是直接依赖UDP协议的,而是依赖基于UDP协议的QUIC协议。http3.0通过基于UDP协议的QUIC协议可以实现与TCP协议一样的可靠传输。

QUIC有以下三个优点:

  • 无队头拥塞
  • 快速建立连接
  • 连接迁移

在这里插入图片描述

无队头阻塞

在这里插入图片描述
由于QUIC协议是基于UDP协议的,UDP协议不要求收到数据包按顺序,因此不会像TCP协议那样存在队头阻塞的问题。当一个stream中的某个quic包丢失,只会阻塞这个stream被应用层读取,而后面的stream还是可以被应用层读取。

快速建立连接

http2.0以前是基于TCP协议的,而TCP协议是与TLS处于不同层的协议,因此这两个协议的握手流程要分开。但是http3.0是基于QUIC协议的,而QUIC协议内部就包含了TLS协议。

在这里插入图片描述

因此TLS握手流程可以包含在QUIC协议握手流程里面。

在这里插入图片描述

不需要单独进行TLS握手,因此能更快的建立连接。

连接迁移

由于http2.0及以前是基于TCP协议的,TCP协议是通过TCP四元组唯一确定一条TCP连接的,TCP四元组:源IP、源端口号、目标IP、目标端口号。

在这里插入图片描述

当一个设备从一个网络迁移到另一个网络(比如手机从4G网络切换到WIFI),那么IP地址就会改变,而由于IP地址是组成TCP连接的四元组中的元素,IP地址改变意味着TCP四元组改变,这样就不是同一条TCP连接了,因此要重新经过TCP三次握手的流程建立新的TCP连接。

在这里插入图片描述

而QUIC协议则是通过一个连接ID确定一条唯一的QUIC连接,而这个连接ID在网络迁移的时候依然保持不变,这样就能够在网络迁移的时候也能做到连接复用。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3项目Easy云盘(二):文件列表+新建目录+文件重命名+文件上传

一、文件列表 1.封装全局组件Table.vue 因为Main.vue等都会用到文件列表table&#xff0c;所以直接封装成组件。 src/components/Table.vue <template><!-- 表格 --><div><el-tableref"dataTable":data"dataSource.list || []":h…

基于AIoTedge+ThingsKit物联网平台,实现办公室人员进出AI统计

在AIoT时代&#xff0c;智能办公已成为提升企业效率的关键。本期文章将带你了解如何利用AIoTedge结合ThingsKit物联网平台&#xff0c;实现办公室人员进出的智能统计。这不是简单的技术堆砌&#xff0c;而是一场关于AI与IoT融合的实战演示。&#x1f31f; 提示&#xff1a;AIoT…

【Linux】Centos7安装部署unimrcp,搭建MRCP服务器

yum install libtool yum install libtool-ltdl-devel yum install libsofia-sip-ua find / -name libsofia-sip-ua.so.0 2>/dev/null # 设置环境变量&#xff1a;如果库文件存在但不在默认搜索路径中&#xff0c;你可以通过设置 LD_LIBRARY_PATH 环境变量来告诉系统在哪…

Github学习

1.Git与Github 区别: Git是一个分布式版本控制系统&#xff0c;简单的说就是一个软件&#xff0c;用于记录一个或若干个文件内容变化&#xff0c;以便将来查阅特点版本修订情况的软件。 Github是一个为用户提高Git服务的网站&#xff0c;简单说就是一个可以放代码的地方。Gi…

数字化社会的引擎:揭示Facebook的影响力

在当今数字化社会中&#xff0c;社交媒体平台扮演着至关重要的角色&#xff0c;而Facebook作为其中的巨头之一&#xff0c;其影响力不可忽视。本文将深入探讨Facebook的影响力&#xff0c;从多个角度揭示其在数字化社会中的引擎作用。 1. 社交互动的核心平台 Facebook作为社交…

使用Python递归重命名文件和文件夹

使用 Python 递归重命名文件和文件夹可以通过 os 模块和 os.path 模块来完成。下面是一个示例代码&#xff0c;演示如何递归地重命名文件和文件夹&#xff1a; 1、问题背景 在研究大型数字档案时&#xff0c;需要将这些档案复制到本地存储进行保存。这些档案通常存储在 USB 驱…

【机器学习】LoFTR:革命性图像特征批评技术等领跑者

LoFTR&#xff1a;革命性图像特征匹配技术的领跑者 一、引言二、LoFTR技术的创新之处三、LoFTR技术的实现原理四、LoFTR技术的代码实例五、结语 一、引言 在3D计算机视觉领域&#xff0c;图像特征匹配技术一直是研究的热点和难点。随着技术的不断发展&#xff0c;传统的特征检…

力扣:48. 旋转图像(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使…

图神经网络实战(10)——归纳学习

图神经网络实战&#xff08;10&#xff09;——归纳学习 0. 前言1. 转导学习与归纳学习2. 蛋白质相互作用数据集3. 构建 GraphSAGE 模型实现归纳学习小结系列链接 0. 前言 归纳学习 (Inductive learning) 通过基于已观测训练数据&#xff0c;建立一个通用模型&#xff0c;使模…

Maven:Maven基础

Maven apache旗下的一个开源项目,一款用于管理和构建java项目的工具 什么是Maven 一个项目管理和构建工具,基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,报告和文档. Maven的作用 依赖管理 方便快捷的管理项目依赖的资源jar包,避免版本冲突问题 统一…

C++的数据结构(四):队列

在数据结构中&#xff0c;队列&#xff08;Queue&#xff09;是一种特殊的线性表&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作。队列中没有元素时&#xff0c;称为空队列。队列的…

小程序的小组件

进度的组件 文字换行过滤 以及 排序 简单易懂 只为了记录工作 <template><div><ProgressBar :progress"progress" /><button click"increaseProgress">增加进度</button><view class"goods-name">12…

电脑锁屏快捷键是哪个?1分钟弄懂锁屏设置!

“当我暂时不需要使用电脑时&#xff0c;想给电脑设置锁屏&#xff0c;有朋友知道电脑锁屏快捷键是哪个吗&#xff1f;” 随着信息技术的飞速发展&#xff0c;我们在日常生活中经常需要使用电脑。然而&#xff0c;当我们暂时离开电脑时&#xff0c;如何确保电脑信息安全&#x…

【解决】Android APK文件安装时 已包含数字签名相同APP问题

引言 在开发Android程序过程中&#xff0c;编译好的APK文件&#xff0c;安装至Android手机时&#xff0c;有时会报 包含数字签名相同的APP 然后无法安装的问题&#xff0c;这可能是之前安装过同签名的APP&#xff0c;但是如果不知道哪个是&#xff0c;无法有效卸载&#xff0c;…

图文详解:synchronized关键字 及其底层原理

目录 一.线程安全问题 二.synchronized关键字 ▐ synchronized图解 ▐ 可重入锁及图解 ▐ synchronized用于方法上 三.Java标准库中synchronized的使用 四.synchronized的底层实现原理 一.线程安全问题 线程安全是指在多线程环境下&#xff0c;对共享资源的访问不会导致…

详解循环队列——链表与数组双版本

前言&#xff1a;本节内容主要是讲解循环队列。 在本篇中会讲到两个版本——数组版本、链表版本。本篇内容适合正在学习数据结构队列章节或者已经学过队列但对循环队列感觉模糊的友友们 。 首先先来看一下什么是循环队列 什么是循环队列 因为是刚开始讲解&#xff0c; 所以我们…

【基础绘图】 10.饼图

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;自己赋值的随机数 2. 图像绘制&#xff1a;绘制饼图 详细代码&#xff1a;着急的直接拖到最后有完整代码 步骤一&#xff1a;导入库包及图片存储路径并设置中文字体为宋体&#xff0c;西文为新罗马&#…

totoriseSVN 常见问题

1. SVN 无法 clean up 上传时没有关闭 Excel&#xff0c;导致传入了一些临时文件&#xff08;文件名以$开头&#xff09;&#xff0c;关闭文件后临时文件自动删除&#xff0c;导致 SVN 版本错乱&#xff0c;使用 CleanUp 功能无效 更新时提示【Previous operation has not fin…

win7 phpstudy 多站点无法保存hosts的原因

1、先找到hosts文件位置 C:\Windows\System32\drivers\etc hosts文件不是txt的后缀&#xff0c;它是一个系统文件 2、如果不显示需要查找隐藏文件 组织-》文件夹和搜索选项-》查看-》取消隐藏文件夹的的√ 3、文件无法编辑 属性不要勾选只读

【SAP-FICO】SAP-FICO生产订单-结算规则配置路径(OKO7)

需求&#xff1a; 作为一个ABAPer&#xff0c;有接到一个狗屁倒灶的配置需求&#xff0c;要求如下&#xff0c;给生产订单的结算规则显示出来 图1&#xff1a;找一个生产订单&#xff0c;显示其结算规则 CO03→菜单栏-表头→结算规则 图2&#xff1a;查看该生产订单&#xff0c…