目录

  • 说一下HTTP3牛币在哪里?
  • 美中不⾜的 HTTP/2
  • QUIC 协议的特点
  • 在HTTP层改动

说一下HTTP3牛币在哪里?

美中不⾜的 HTTP/2

HTTP/2 通过头部压缩、⼆进制编码、多路复⽤、服务器推送等新特性⼤幅度提升了 HTTP/1.1 的性能,⽽美中不⾜的是 HTTP/2 协议是基于 TCP 实现的,于是存在的缺陷有三个。

  • 队头阻塞;
    ( TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且有序的,如果序列号较低的 TCP 段在⽹络传输中丢失了,即使序列号较⾼的 TCP 段已经被接收了,应⽤层也⽆法从内核中读取到这部分数据)
  • TCP 与 TLS 的握⼿时延迟和慢启动减速;
  • ⽹络迁移需要重新连接;
    (⼀个 TCP 连接是由四元组(源 IP 地址,源端⼝,⽬标 IP 地址,⽬标端⼝)确定的,这意味着如果 IP 地址或者端⼝变动了,就会导致需要 TCP 与 TLS 重新握⼿,这不利于移动设备切换⽹络的场景,⽐如 4G ⽹络环境切换成WIFI。)

这些问题都是 TCP 协议固有的问题,⽆论应⽤层的 HTTP/2 在怎么设计都⽆法逃脱。要解决这个问题,就必须把传输层协议替换成 UDP,这个⼤胆的决定,HTTP/3 做了!

QUIC 协议的特点

QUIC 协议的优点有很多,这⾥举例⼏个,⽐如:

  • ⽆队头阻塞;
    一个连接上的多个 stream 之间没有依赖。由于 QUIC 使⽤的传输协议是 UDP,UDP 不关⼼数据包的顺序,如果数据包丢失,UDP 也不关⼼。不过 QUIC 协议会保证数据包的可靠性,每个数据包都有⼀个序号唯⼀标识。当某个流中的⼀个数据包丢失了,即使该流的其他数据包到达了,数据也⽆法被 HTTP/3 读取,直到 QUIC 重传丢失的报⽂,数据才会交给 HTTP/3。⽽其他流的数据报⽂只要被完整接收,HTTP/3 就可以读取到数据。这与 HTTP/2 不同,HTTP/2 只要某个流中的数据包丢失了,其他流也会因此受影响。)
  • 自定义连接机制;
    (QUIC 内部包含了 TLS,它在⾃⼰的帧会携带 TLS ⾥的“记录”,再加上 QUIC 使⽤的是 TLS1.3,因此仅需 1 个 RTT 就可以「同时」完成建⽴连接与密钥协商,甚⾄在第⼆次连接的时候,应⽤数据包可以和 QUIC 握⼿信息(连接信息 + TLS 信息)⼀起发送,达到 0-RTT 的效果。)
  • 连接迁移;
    ( QUIC 协议没有⽤四元组的⽅式来“绑定”连接,⽽是通过连接 ID来标记通信的两个端点,客户端和服务器可以各⾃选择⼀组 ID 来标记⾃⼰,因此即使移动设备的⽹络变化后,导致 IP 地址变化了,只要仍保有上下⽂信息(⽐如连接 ID、TLS 密钥等),就可以“⽆缝”地复⽤原连接,消除重连的成本)

在HTTP层改动

HTTP/3 同 HTTP/2 ⼀样采⽤⼆进制帧的结构,不同的地⽅在于 HTTP/2 的⼆进制帧⾥需要定义 Stream,⽽ HTTP/3 ⾃身不需要再定义 Stream,直接使⽤ QUIC ⾥的 Stream,于是 HTTP/3 的帧的结构也变简单了。

QPACK和HPACK差不多,只不过静态表扩⼤了。

HTTP2动态表是具有时序性的,如果⾸次出现的请求发⽣了丢包,后续的收到请求,对⽅就⽆法解码出HPACK 头部,因为对⽅还没建⽴好动态表,因此后续的请求解码会阻塞到⾸次请求中丢失的数据包重传过来。

HTTP/3 的 QPACK 解决了这⼀问题,那它是如何解决的呢?
QUIC 会有两个特殊的单向流,所谓的单项流只有⼀端可以发送消息,双向则指两端都可以发送消息,传输 HTTP消息时⽤的是双向流,这两个单向流的⽤法:

  • ⼀个叫 QPACK Encoder Stream, ⽤于将⼀个字典(key-value)传递给对⽅,⽐如⾯对不属于静态表的HTTP 请求头部,客户端可以通过这个 Stream 发送字典;
  • ⼀个叫 QPACK Decoder Stream,⽤于响应对⽅,告诉它刚发的字典已经更新到⾃⼰的本地动态表了,后续就可以使⽤这个字典来编码了。

这两个特殊的单向流是⽤来同步双⽅的动态表,编码⽅收到解码⽅更新确认的通知后,才使⽤动态表编码 HTTP 头部。

网络夺命连环问8--说一下HTTP3牛币在哪里?相关推荐

  1. 网络夺命连环问1--说一下HTTPS咋保证通信安全的

    目录 说一下HTTPS咋保证通信安全的? 谈谈对称加密与非对称加密的区别 谈谈机密性怎么实现的? 谈谈完整性怎么实现的? 怎么实现身份认证和不可否认呢? 公钥的信任问题怎么解决?怎么判断公钥真假? 总 ...

  2. redis夺命连环问10--说说Redis是怎么做旁路缓存的?

    目录 相关前置知识文章 说说Redis是怎么做旁路缓存的? 先谈缓存大概怎么做 再谈旁路缓存两种模式 redis和mysql如何保证数据一致性? 那怎么解决缓存和数据库的数据不一致问题? 如何保证缓存 ...

  3. 夺命连环问-集合篇1

    夺命连环问-集合篇1 1.简单谈谈数组和集合,并说说他们有什么区别? 答:数组和集合都是用来存储一组数据的容器. 区别有以下几点: 1.在存储方式上,数组是一个固定长度的容器,它的长度一旦被初始化之后 ...

  4. 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?|文末送书

    时间有限,快来薅,当当的羊毛!!! 时间有限,快来薅,当当的羊毛!!! 时间有限,快来薅,当当的羊毛!!! 作者:松若章 来源:http://c7.gg/f8txF 曾经有这么一道面试题:从 URL ...

  5. HashMap夺命连环问,你扛得住吗

    HashMap是面试中最常被问到的问题,被问到的概率基本是99%,关于HashMap的知识点很多,这里做个总结,如果没有提及版本,默认为jdk1.8. 1.HashMap的数据结构? 底层是数组+单链 ...

  6. HashMap夺命连环问

    1:HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点.当链表长度超过 8 时,链表转换为红黑树. transient Node<K,V>\[\ ...

  7. 每日一面系列之HashMap夺命连环问

    1.HashMap的底层数据结构是什么? 底层数据结构是哈希表结构(链表散列:数组+单向链表),结合了数组和链表的优点,当链表长度超过8时,链表会转为红黑树.数组中的每一个元素都是链表.总结来说就是H ...

  8. 每日一面系列之ArrayList夺命连环问

    1.ArrayList用过吗?知道是干什么的吗?有什么特点? ArrayList是用来存储数据的一个集合,当我们存储的数据类型是基本数据类型的时候,需要存储他们的包装类.ArrayList底层是Obj ...

  9. 荐书丨脑电实验的夺命连环问,你敢来么

    Hello, 这里是心研书籍,我是明明~ 疫情阴影还未逐渐过去,不知你还好吗,科研生活还顺利吗?明明最近就遇到了一些小问题,是怎么回事呢?请大家一起快来看看吧- 01 脑电,我该拿你怎么办 最近,我和 ...

最新文章

  1. python过滤器 lambada表达式 可变元组字典参数**kwargs
  2. HTML 5 视频,音频
  3. 【数据库】MySQL创建视图(CREATE VIEW)
  4. 论文浅尝 - IJCAI2020 | Mucko:基于事实的多层跨模态知识推理视觉问答
  5. LMSn没有运行在RT (real time) 模式Oracle 19c RAC?
  6. html5与python哪个好_3个原因告诉你,为什么选择HTML5大前端?
  7. 关于程序员前途的看法和我系列文章的想法
  8. 脾气好的领导不是好领导
  9. python cryptography key加密_python3利用cryptography 进行加密和解密
  10. android nfc贴卡多次读写,Android Studio NFC 读写卡程序 (二)(示例代码)
  11. 零基础java学习---温故而知新
  12. python混合线性模型_如何在Python statsmodels中有多组线性混合效应模型?
  13. 求高手请进,帮我分析这种情况是什么原因
  14. python中shape是什么意思_对numpy中shape的深入理解
  15. SQL语句的五大类:DQL、DML、DDL、DTL、DCL
  16. IceSword冰刃使用方法
  17. html5怎么将字体变成斜体,;html5斜体字
  18. N1・N2听力单词 —— 交通、出行 / 家庭生活、人际关系
  19. Eclipse插件安装(在线和离线方式)
  20. 计算机安装重装出现错误,电脑重装系统老是失败要怎么办?我教你几个方法,一定能装上去!...

热门文章

  1. java-net-php-python-ssm公司人力资源管理系统计算机毕业设计程序
  2. java计算机毕业设计网上拍卖系统设计源码+系统+数据库+lw文档+mybatis+运行部署
  3. 你是个靠谱的程序员吗?
  4. EasyDL定制化图像识别-爬虫清洗
  5. 计算机德育论文,计算机德育创新能力论文
  6. lwip网络接口netif
  7. 国内屏蔽多家GODADDY域名解析服务器
  8. 第二阶段在线作业计算机,计算机应用基础第二阶段在线作业.doc
  9. Redis二:redis-cli操作各种数据类型
  10. 维乐带你回到维多利亚时代!让复古与创新碰撞~