从head of line到http3/quic

2024-08-24 05:18
文章标签 head line quic http3

本文主要是介绍从head of line到http3/quic,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.head of line 队头阻塞

    什么是队头阻塞呢?就是第一个人的问题影响了后面的人.一堆人排队过桥,第一个卡住了,那么后面的人谁也别想过去.

tcp:

    tcp协议为了保证帧的顺序行,每个帧都有编号.接受者会按照编号对数据进行处理.

    1.如果2,3,4都传输过去了,但是1没有传输过去,那么2,3,4还是不可读的.同时1234也不能从写缓存中滑走.

    2.由于读写的socket缓冲区是有限的,会导致用户不可读写.(注意:用户进程写入成功是指,用户将数据从用户空间拷贝到内核空间,同样,读成功是指用户从内核空间拷贝到用户空间)

    3.这样合理吗?比如我想读4张图片,分别在1,2,3,4包中.因为1没有到,导致我后续的包都不可读.

 

http1.1:

    http的请求-应答模型,导致了线头阻塞问题

    由于必须是请求-->应答--->再请求--->再应答,所以这是一个请求队列,所以肯定会有线头阻塞问题.

虽然后来,http做了pipeline的优化,客户端可以同时发送多个请求,但是对于响应还是要排队等待....

http2:

    大幅提高了http1.1性能-->例如全双工/header压缩/背压等等.但是由于http2还是基于tcp的传输协议.依然摆脱不了 线头阻塞问题.🤷‍♀️ 

    所以google推出了quic协议,也就是http3

2.Http3/Quic协议

    http2的遗留问题:

  • 有序字节流引出的队头阻塞(tcp问题)
  • TCP 与 TLS 叠加了握手时延,建链时长还有 1 倍的下降空间
  • 使用四元组确定一个连接.移动网络下,ip经常变.那么就会导致经常三次握手,以及tls握手.
  •  tcp的拥塞控制导致效率变低

 

                                                  有序字节流导致线头阻塞

    那么说下h3的解决方案

  • 针对队头阻塞和拥塞控制,使用了udp方案
  • 针对tcp/tls耗时叠加
  • 队头阻塞问题   

      如果黄色报文不对绿色产生影响,那么就可以继续传输绿色

       其实类似h2中的stream.不同的stream之间是不会影响的,如果一个stream的数据丢了,另一个stream根本不care.只不过tcp不知道steam这个概念

 

http3有很多细节.我会在后面的文章讲解

 

   

参考文章:

https://time.geekbang.org/column/article/279164

https://blog.cloudflare.com/http3-the-past-present-and-future/

这篇关于从head of line到http3/quic的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101554

相关文章

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":

Windows环境下ElasticSearch6.1.1版本安装Head插件

安装Head插件步骤如下: 1、下载node.js ,网址:https://nodejs.org/en/ 安装node到D盘。如D:\nodejs。 把NODE_HOME设置到环境变量里(安装包也可以自动加入PATH环境变量)。测试一下node是否生效: 2、安装grunt grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.0里的head插件就是通过grunt

Linux中head和tail方法的使用

head -5 1.txt 从第五行开始到末尾 head –n 5 1.txt 同上 head –n +5 1.txt 同上 head –n -5 1.txt 除了最后五行的所有内容 少后五行   tail -5 1.txt 最后五行内容 tail –n 5 1.txt 同上 tail –n -5 1.txt 同上 tail –n +5 1.txt 从正数第五行到结尾的所有内容

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from class path resource [bean1.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineN

line.split(‘ ‘).map(Number)

line.split(' ').map(Number) 是一个常见的 JavaScript 操作,分为两部分来理解: line.split(' '): 这一部分将字符串 line 按照空格 ' ' 分割成一个数组。假设 line 是 "1 2",那么 line.split(' ') 将返回 ["1", "2"],这是一个由字符串组成的数组。 .map(Number): map() 是 Jav

less、more、head、tail命令解析集合

一、整体认识 命令使用优点常见使用方式less可以浏览文件内容,它可以用于查看大型文件,而不需要将整个文件加载到内存中。按下空格键向下翻页,按下b键向上翻页,按下q键退出浏览more类似于less,也是用于浏览文件内容的命令,但它不支持向上翻页。 按下空格键向下翻页,按下q键退出浏览。 head用于查看文件的前几行。head [选项] [文件名]。常用选项有-n,指定显示前几行,默认为显示前10

Command line is too long. Shorten command line for DisplayApplication (1) or

微服务项目启动类起不来,如下 解决办法:IEDA开发环境下 找到你的项目下面的.idea\workspace.xml 添加一个property : <property name="dynamic.classpath" value="true" /> 帮同事看的问题,自己测试没问题就关闭了。图片借用网上的。 参考:参考

扫描线Sweep Line算法总结

扫描线算法,推荐还是用标准的模板去写,treemap只适合于求最大的overlap个数的题目,其余的不能用treemap来解,所以推荐还是用event的思想去+1, -1然后排序扫描的方法可以用来解所有的题型; Number of Airplanes in the Sky 思路:经典扫描线算法:把interval起飞和降落做为event,全部打散,按照时间排列,同时时间相等的,按照降落在前面,起

org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: 29 near line 1, column

@SuppressWarnings("unchecked")   public List<Strudent> getStudent(int count) {       String hql = "select top "+count+" from Student";       return (List<Student>)getHibernateTemplate().fin