【图解计算机网络】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在网络迁移的时候依然保持不变,这样就能够在网络迁移的时候也能做到连接复用。

在这里插入图片描述

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

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

相关文章

LeetCode 654.最大二叉树

LeetCode 654.最大二叉树 1、题目 题目链接:654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地…

11、关系运算符、逻辑运算符(讲解 和 的区别)、赋值表达式、三目表达式、运算符优先级(超详细版本)+结合性的分析

这里写目录标题 一、关系运算符(比较运算符)二、⭐逻辑运算符1、 && 和 &2、|| 或 |3、!4、^ 三、赋值运算符四、三目运算符(条件运算符)五、运算符优先级 在讲之前先明确几个概念: 1、单目运算…

【人工智能基础】GAN与WGAN实验

一、GAN网络概述 GAN:生成对抗网络。GAN网络中存在两个网络:G(Generator,生成网络)和D(Discriminator,判别网络)。 Generator接收一个随机的噪声z,通过这个噪声生成图片…

阿里开源编程大模型 CodeQwen1.5:64K92编程语言,Code和SQL编程,评测接近GPT-4-Turbo

前言 阿里巴巴最近发布的CodeQwen1.5模型标志着其在编程语言模型领域的一次重大突破。这款开源模型不仅支持高达92种编程语言和64K的上下文长度,而且在多项性能评测中显示出接近或超过当前行业领导者GPT-4-Turbo的能力。 Huggingface模型下载:https://h…

Boost库的使用

1 下载与安装 1.1 下载 网址:Boost C Libraries 进入后选择自己需要的版本安装即可 1.2 安装 1.2.1 解压 1.2.2 编译安装 双击bootstrap.bat 这一步完成后会生成一个b2.exe文件 双击b2.exe文件运行(此步需要花费较长的时间) 之后再stag…

双向链表(双向带头循环)的增删查改的实现(简单易懂)

一:双向链表的概念 每个节点除开存有数据,还有一个指针指向前一个节点,一个指针指向后一个节点,尾节点和哨兵位互相指向,从而形成一个循环。 二:双向链表的实现第一点: 本文采用三个文件进行实…

GIS数据—1984-2020中国1km人造夜间灯光观测数据

夜间灯光观测数据(Nighttime Light,NTL)是评估人类活动边界的常用手段,目前,该数据已经广泛应用于城市范围、不透水面、基础设施建设等一系列过程。今天,小编要带来的是长时间序列中国区域边界的夜间灯光观测数据。 数…

springcloud -nacos实战

一、nacos 功能简介 1.1.什么是Nacos? 官方简介:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 Nacos的关键特性包括: 服务发现和服务健康监测动态配置服务动态DNS服务服务及其元数…

VMware配置Kali linux + 物理机连接Xshell

VMware 配置 kali linux 首先需要先安装VMware Workstation 我是在Windows 安装的 VMware Workstation Pro 17 虚拟化,产品密钥。。这里不做多说了 下载kali linux 这里我下载的是kali-linux-2024.1 Note:这里选Virtual Machines,建议不要…

景源畅信:抖音小店的商品怎么同步到橱窗?

在数字营销的海洋中,抖音小店与橱窗的同步操作无疑是商家们关注的焦点。这不仅能增加商品的曝光度,还能提高交易的可能性。那么,如何将抖音小店的商品同步到橱窗呢? 一、核心步骤解析 要实现商品从抖音小店同步到橱窗,你需要确保…

【Linux 网络】网络编程套接字 -- 详解

⚪ 预备知识 1、理解源 IP 地址和目的 IP 地址 举例理解:(唐僧西天取经) 在 IP 数据包头部中 有两个 IP 地址, 分别叫做源 IP 地址 和目的 IP 地址。 如果我们的台式机或者笔记本没有 IP 地址就无法上网,而因为…

Unity引擎是什么?有哪些优点

大家好,我是咕噜土豆,很高兴又和大家见面了。今天我们一起来了解一下Unity引擎和它有哪些优点。 首先带大家了解什么是Unity引擎 Unity引擎是一款由Unity Technologies开发的跨平台游戏开发引擎,广泛用于创建2D和3D游戏以及其他交互式内容&…

C++动态内存区域划分、new、delete关键字

目录 一、C/C中程序的内存区域划分 为什么会存在内存区域划分? 二、new关键字 1、内置类型的new/delete使用方法: 2、new和delete的本质 一、C/C中程序的内存区域划分 为什么会存在内存区域划分? 因为不同数据有不同的存储需求&#xff0…

【SpringBoot记录】从基本使用案例入手了解SpringBoot-数据访问(1)

前言 在程序开发尤其是网页应用开发中,数据访问是必不可少的。通过前面的基本案例我们完成了一个简单的SpringBoot Web应用并对自动配置原理有了一定了解,本节在上述案例基础上,继续编写数据访问案例,将通过SpringBoot中数据访问…

音视频开发6 音视频录制原理和播放原理

音视频录制原理 音视频播放原理

# 电脑突然连接不上网络了,怎么办?

电脑突然连接不上网络了,怎么办? 一、原因分析: 1、IP 地址冲突 2、DNS 解析出现问题。 3、电脑网络设置是否打开了【移动热点】或【飞行模式】。 4、【WLAN AutoConfig】服务是否打开。 5、无线网卡驱动损坏。 6、检查 WIFI 开关是否…

HTML+VUE3组合式+ELEMENT的容器模板示例(含侧栏导航,表格,...)

一个简单的在html中使用Vue3及Element-plus vue-icons的整合示例&#xff1a; 一、示例截图 二、文件代码 直接复制到html文件在浏览器打开即可预览 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title&g…

CCleaner系统优化与隐私保护工具,中文绿色便携版 v6.23.11010

01 软件介绍 CCleaner 是一款高级的系统优化工具&#xff0c;其设计宗旨在于彻底清理 Windows 操作系统中积累的无用文件和冗余的注册表项。此举旨在显著提升计算机的运行效率并回收磁盘空间。该软件拥有高效的能力&#xff0c;可以清除包括临时文件、浏览器缓存及其历史记录在…

08 - hive的集合函数、高级聚合函数、炸裂函数以及窗口函数

目录 1、集合函数 1.1、size&#xff1a;集合中元素的个数 1.2、map&#xff1a;创建map集合 1.3、map_keys&#xff1a; 返回map中的key 1.4、map_values: 返回map中的value 1.5、array 声明array集合 1.6、array_contains: 判断array中是否包含某个元素 1.7、sort_a…

UIKit之UIButton

功能需求&#xff1a; 点击按钮切换按钮的文字和背景图片&#xff0c;同时点击上下左右可以移动图片位置&#xff0c;点击加或减可以放大或缩小图片。 分析&#xff1a; 实现一个UIView的子类即可&#xff0c;该子类包含多个按钮。 实现步骤&#xff1a; 使用OC语言&#xf…