我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅析HTTP3

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅析HTTP3

简介

很多小伙伴可能还沉浸在HTTP1.1的世界无法自拔,但是时代的洪流已经带领我们来到了HTTP3的世界了。是的,你在桥上看风景,而桥边的房子上有人正在看你。

为了不被时代所抛弃,今天给大家讲解一下HTTP3的新特性。

HTTP成长介绍

HTTP的全名叫做超文本传输​​协议,是万维网所基于的应用层传输协议。最初的版本是HTTP 0.9,是在80年的后期产生的,后面在1996年升级到了1.0.

但是HTTP1.0满足不了日益增长的物质文化需求和对美好世界的向往。所以在1997年出现了HTTP1.1,随后到2014年,HTTP1.1都一直都在更新。

然后到了2015年,为了适应快速发送的web应用和现代浏览器的需求,在Google的SPDY项目基础上发展出了新的HTTP2协议。

又过了4年,在2019年,Google又开发出了一个新的协议标准QUIC协议,它就是HTTP3的基石,其目的是为了提高用户与网站和API交互的速度和安全性。

不同HTTP协议解决的问题

不同HTTP协议解决的问题也是不同的,HTTP1.1有什么问题呢?

1.因为HTTP1.1一个连接中数据是顺序传输的,所以会有Head-of-line Blocking的问题,如果前面是一个大的数据包,则会导致后续数据包的阻塞。

2.HTTP1.1无法对请求头和cookie进行压缩,所以传输效率会比较低。

3.为了保证缓冲区不会溢出,HTTP1.1有一个TCP慢启动的功能,作为拥塞控制措施,协议反复探测网络以计算可用容量,但是这样就会导致多次数据的传输,从而导致消息的延时。

对于HTTP2来说,它使用二进制进行消息传输,并且将消息拆分成一个个的stream,在stream中又包含了多个frame,允许资源通过多路复用使用同一个连接发送,解决了行头阻塞的问题,并且还支持数据包的优先级和服务器推送。

但是HTTP2的服务器推送会导致应用程序变得复杂,TCP级别的头阻塞的问题在数据包丢失并且必须重新以正确的顺序重新发送时,仍然可能发生。

要注意,HTTP/2是HTTP/1.1的扩展,而不是它的替代品。 应用程序语义保持不变,具有相同的HTTP方法、状态代码、URI和标头字段。 所以HTTP/2可以被用在任何使用HTTP/1.1的地方。

HTTP/2在客户端和服务器之间使用单个TCP连接,该连接在交互期间保持打开状态。

虽然HTTP/2支持并发,但是过多的并发会导致HTTP/2服务器接收到大批量的请求,从而导致请求超时。

HTTP3和QUIC

HTTP/3的目标是通过解决HTTP/2的传输相关问题,在所有形式的设备上提供快速、可靠和安全的Web连接。为此,它使用了一种不同的传输层网络协议,称为QUIC,该协议最初由Google开发的。

感慨一下,虽然最近中国在系统的应用方面有了一定的进步,但是看看这些底层的协议,还都是外国人搞出来的。

HTTP/2和HTTP/3的根本区别在于,HTTP/2底层使用的是TCP协议,而HTTP/3使用的是QUIC,而QUIC的底层使用的是UDP协议。

我们看一下HTTP/2和HTTP/3的协议栈对比:

TCP协议主要保证服务的可靠性和有序交付,但是TCP需要同握手来建立连接,这样做是为了确保客户端和服务器都存在并且他们愿意并且能够交换数据。但是,它也需要一个完整的网络往返才能完成,然后才能在连接上完成任何其他操作。 如果客户端和服务器端相距比较远,那么就需要花费较多的时间来进行连接。

我们知道UDP是无连接的,所以它要比TCP简单很多。它不需要TCP这种建立多次连接的步骤,只需要发送数据包出去就够了。

所以使用QUIC的优点就在于减少了系统的延时,适用于可以容忍一些数据丢包的情况,比如在线游戏、广告竞价、在线视频、实时流等地方。

另外因为UDP支持广播,所以HTTP3还适用于广播应用中,如精确时间协议和路由信息协议等。

另外HTTP3还可以用在物联网、大数据和VR等方面。

既然HTTP3使用的是QUIC协议,那么QUIC到底是什么呢?

通常来说QUIC是一种通用传输协议,与TCP非常相似。为什么要打造一套新的协议呢?这是因为现有的TCP协议扩展起来非常困难,因为已经有太多太多的设备使用了各种不同的TCP协议的版本,如果想直接在现有的TCP协议上进行扩展非常困难,因为需要给这么多台设备进行升级几乎是不可能完成的任务。

所以QUIC在选择在UDP协议之上进行构建。QUIC使用UDP,主要是因为希望能让HTTP/3更容易部署,因为它已经被互联网上的所有设备所知并已实现.

QUIC实际上就是在UDP基础上重写了TCP的功能,但是又比TCP更加智能,更高效的实现了TCP的核心功能。

接下来我们看下QUIC具体有哪些特征。

TLS1.3

TLS主要用来保证客户端和服务器端在数据传输过程的数据安全性,可以对明文数据进行加密传输。TLS1.3是TLS协议的最新版本,在旧的版本如TLS1.2中,客户端和服务器端的握手至少需要两次网络往返,但是在TLS1.3中,将其减少到只有一次往返。

虽然在HTTP/2中是支持无加密传输模式,但是默认情况下所有的现代浏览器都不支持这种模式,所以HTTP/2必须配合HTTPS一起使用。长远看来HTTPS肯定是未来的趋势,所以在QUIC中,直接就使用了TLS 1.3协议。QUIC本身就封装了TLS1.3。

这样做的好处就是QUIC没办法运行明文,所以更加的安全。并且QUIC内置了加密协议,将传输和加密握手合二为一,节省了往返。

因为QUIC是全程加密的,所以对于某些ISP和中间网络来说,无法再对网络数据进行分析和统计,所以可能会限制它的使用。并且因为QUIC是单独对每个数据包进行加密的,在高并发的情况下,可能会造成性能问题。

解决HoL阻塞

传统的HTTP1.1和HTTP2底层协议是TCP,虽然HTTP2在应用层可以将不同文件的数据拆分成一个个的stream放在同一个连接中进行传输。但是对于TCP本身来说,它并不知道这些stream属于不同的文件,它会将其当成同一个文件。所以如果发送数据丢包的情况,TCP会重新发送所有的文件包。从而导致HOL阻塞的问题。

而QUIC更加细粒度一点,它可以在每个流的基础上执行丢包检测和恢复逻辑。从而只会重发失败的流,而不是整个文件。

连接的迁移

在TCP中,如果我想要建立客户端和服务器端的连接,需要知道这4个元素:客户端IP地址 + 客户端端口 + 服务器IP地址 + 服务器端口。

如果这4个元素中有一个发送了变化,则需要重新建立TCP连接。并且需要根据应用程序级协议,重新启动进程中的操作。

比如你正在下载一个大的文件,但是网络地址突然发生了变化,则可能需要重新请求该文件。

为了解决这个问题,QUIC引入了一个名为连接标识符(CID)的概念 。 每个连接都在上述4个元素中额外分配一个编号,用于标记客户端和服务器端的唯一连接。

因为这个CID是由QUIC定义的,所以不会随着网络迁移的变化而变化。从而不需要新的握手,这种情况被称为连接迁移 。

总结

好了,今天的HTTP/3和QUIC就介绍到这里,虽然我们没有涉及到底层的更多细节,但是相信大家应该都听得明白了,再总结一下,QUIC实际上行就是在UDP协议之上,再造了一个更加高级有效的TCP协议。

到此这篇关于浅析HTTP3的文章就介绍到这了,更多相关HTTP3内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅析HTTP3

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

HTTP3的示例分析

这篇文章给大家分享的是有关HTTP3的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。HTTP3是HTTP协议的最新版本。从诞生之初,HTTP就是交换超文本文档的首选应用层协议。多年来,为了跟上互联网的发展
2023-06-27

浅析Android.mk

Android.mk简介:Android.mk文件用来告知NDK Build 系统关于Source的信息。 Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。所以,请尽量少的在Andr
2022-06-06

EDMA3浅析

基于C66x的内核处理器主要具有两种DMA传输:IDMA、EDMA3。IDMA:只提供核内部(L1P、L1D、L2、CFG)的数据移动服务。EDMA3:实现器件上两个存储器映射的从终端(Slave Endpoint)之间的数据传输(如DDR
2023-01-31

浅析Linux resolv.conf

1.简介 resolv.conf是各种操作系统域名系统解析器(DNS Resolver)的配置文件。每当一个程序需要通过域名来访问Internet上面的其它主机时,需要利用Resolver库函数将域名转换成对应的IP,然后才可进行访问。 注
2022-06-03

python yield浅析

在python(本文python环境为python2.7)中,使用yield关键字的函数被称为generator(生成器)。故为了了解yield,必然先要了解generator,而了解generator之前,我们先要了解一下迭代。递归和迭代
2023-01-31

BI浅析(3)

五、实施商业智能的步骤如何?   实施商业智能系统是一项复杂的系统工程,整个项目涉及企业管理, 运作管理, 信息系统, 数据仓库, 数据挖掘, 统计分析等众多门类的知识. 因此用户除了要选择合适的商业智能软件工具外还必须按照正确的实施方法才
2023-01-31

浅析MySQL - MVCC

版本链 在InnoDB引擎表中,他们的聚簇索引记录中有两个隐藏列:trx_id:用来存储对数据进行修改时的事务idroll_pointer:每次对哪条聚簇索引记录有修改的时候,就会把老版本写入undo日志中。这个roll_pointer就是
2022-05-15

python setup.py 浅析

setuptools.setup() 参数说明packages对于所有 packages 列表里提到的纯 Python 模块做处理 需要在 setup 脚本里有一个包名到目录的映射。 默认对于 setup 脚本所在目录下同名的目录即视为
2023-01-31

Spark Operator浅析

本文作者: 林武康(花名:知瑕),阿里巴巴计算平台事业部技术专家,Apache HUE Contributor, 参与了多个开源项目的研发工作,对于分布式系统设计应用有较丰富的经验,目前主要专注于EMR数据开发相关的产品的研发工作。 本文介绍Spark Op
Spark Operator浅析
2017-07-26

浅析MPLS技术

  传统的IP数据转发是基于逐跳式的,每个转发数据的路由器都要根据IP包头的目的地址查找路由表获得下一跳的出口,这是个繁琐又效率低下的工作,主要原因是两个:1、有些路由的查询必须对路由表进行多次查找,这就是所谓的递归搜索;2、由于路由匹配遵循最长匹配原则,所以迫使几乎所有的路由器的交换引擎必须用软件来实现,用软件实现的
浅析MPLS技术
2024-04-18

MySQL行锁浅析

概述 MySQL是非常流行的关系型数据库,许多系统都使用它来存储和管理数据。在高并发环境下,为了保证数据的一致性和可靠性,数据库需要实现并发控制,其中包括锁机制。MySQL提供了两种锁类型,一种是表级锁,另一种是行级锁。本文将深入探讨My
2023-08-19

Java_Cloneable 接口浅析

Java中的Cloneable接口是一个标记接口,用于指示实现了该接口的类可以进行对象的克隆(复制)操作。1. 标记接口:Cloneable接口本身没有定义任何方法,它只是一个标记接口,用于告诉编译器实现了该接口的类可以进行克隆操作。这种接
2023-09-21

浅析QinQ技术

  QinQ技术(也称Stacked VLAN或者Double VLAN)是指用户私网VLAN标签封装在公网VLAN标签中,使报文带着两层VLAN标签穿越运营商的骨干网络,在公网中只根据外层VLAN标签传播,私网VLAN标签被屏蔽,这样,不仅对数据流进行了区分,而且由于私网VLAN标签被透明传送,不同的用户VLAN标签
浅析QinQ技术
2024-04-18

深入浅析AngularSSR

AngularUniversal主要关注将AngularApp如何进行服务端渲染和生成静态HTML,对于用户交互复杂的SPA并不推荐使用SSR,本文是在Angular14环境中完成,有些内容对于新的Angular版本可能并不适用,感兴趣的朋友一起通过本文学习
2022-11-13

怎样浅析ButterKnife

怎样浅析ButterKnife,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。不管是Android开发的老司机也好,新司机也罢,想必大家都对findViewById这种样板代
2023-06-04

ThreadLocal原理浅析

ThreadLocal即线程局部变量的意思!所以什么是线程局部变量?这玩意有什么鸟用?是不是面试被问到了说不出个一二三?今天就来扒一扒这货的源码,从根本上了解这货是干啥的。Thread、ThreadLocalMap、Entry三者关系其实研究下来他的源码实现,
ThreadLocal原理浅析
2014-12-05

JAVA泛型浅析

本文主要列举了在使用Java泛型时应该注意的问题。Java泛型是Java5的一个重要特性,它和自动装箱、变长参数等新特性一起,提升了Java代码的健壮性和易用性,但SUN本身过分强调向前的兼容性,也引入了不少问题和麻烦。[@more@]JA
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录