| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> HTTP 3 -> 正文阅读 |
|
[网络协议]HTTP 3 |
Core Concepts(核心概念)首先,提出几个问题:
????????HTTP/2?曾被誉为令人惊叹的革命,具有令人兴奋的新功能,例如 Server Push、并行流和优先级...但五年后,Server Push 在实践中并没有真正用起来,流和优先级经常被错误地实现,因此资源合并和域名分流在某些情况下仍然是最佳实践 那 HTTP/3 是什么?为什么需要HTTP/3?????????实际上我们并不需要一个新的 HTTP 版本,而是底层传输控制协议 (TCP) 的升级 ????????QUIC 就是用来替代 TCP、SSL/TLS 的传输层协议,运行在 QUIC 之上的 HTTP 协议被称为 HTTP/3 ???????? 为什么需要 QUIC?????????因为 TCP 并没有真正考虑到最大效率
零 RTT 建立连接????????HTTP/2 的连接需要 3 RTT,如果考虑会话复用,即把第一次握手算出来的对称密钥缓存起来,那么也需要 2 RTT;如果 TLS 升级到 1.3,那么 HTTP/2 连接需要 2 RTT,考虑会话复用则需要 1 RTT(TLS 1.3 的握手不再支持静态的 RSA 密钥交换,使用带有前向安全的 Diffie-Hellman 进行全面握手) ????????HTTP/3 首次连接只需要 1 RTT,后面的连接更是只需 0 RTT,意味着客户端发给服务端的第一个包就带有请求数据 ? ?
? ? ? ????????一个 TCP 连接同时传输 10 个请求, ????????其中第 1、2、3 个请求已被客户端接收,但第 4 个请求丢失,那么后面第 5 - 10 个请求都被阻塞,需要等第 4 个请求处理完毕才能被处理,这样就浪费了带宽资源
? ?? ????????在一条 TCP 连接上同时发送 N?个 Stream,其中 Stream1 已正确送达,Stream2 中的第 2?个 Frame 丢失, ????????TCP 处理数据时有严格的前后顺序,先发送的 Frame 要先被处理,这样就会要求发送方重新发送第 2?个 Frame,Stream3 和 Stream4 虽然已到达但却不能被处理,那么这时整条连接都被阻塞 那 QUIC 是如何解决队头阻塞问题的呢??
QUIC 支持连接迁移????????TCP 连接基于四元组(源 IP、源端口、目的 IP、目的端口),切换网络时至少会有一个因素发生变化,导致连接发生变化(比如,NAT重新绑定) ????????当连接发生变化时,如果还使用原来的 TCP 连接,则会导致连接失败,就得等原来的连接超时后重新建立连接 ????????QUIC 连接不以四元组作为标识,而是使用一个 64 位的随机数,这个随机数被称为 Connection ID,这个 CID 是在 QUIC 本身的传输层定义的 ????????所以即使 IP 或者端口发生变化,只要 Connection ID 没有变化,那么连接依然可以维持 QUIC?使用单独的帧来发送元数据????????QUIC 具有较短的数据包头,并在数据包有效载荷中使用各种“帧”来传达额外信息。例如,一个 ????????使用帧的作用是,将来定义新的帧类型作为 QUIC 的扩展将非常容易 Performance Improvements(性能表现)????????QUIC 和 HTTP/3 具有巨大的 Web 性能潜力,但主要适用于网络速度较慢的用户 拥塞控制
TCP 通过使用称为拥塞控制的机制不断尝试发现可用带宽 尽管 TCP 的拥塞控制使其稳健,但这也意味着需要一段时间才能达到最佳发送速率,具体取决于 RTT 和实际可用带宽 QUIC 拥塞控制的实现????????QUIC 实际上使用与 TCP 非常相似的带宽管理技术。它也从较低的发送速率开始,并随着时间的推移而增长,使用确认(ACK)作为衡量网络容量的关键机制。所以?QUIC 在管理带宽方面没有比 TCP 更聪明,只是?QUIC 比 TCP 更灵活,更容易演进。
待摸鱼时补充 ?参考 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 11:51:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |