http协议版本的区别 -- 2和3

目录

http2和http3的区别

传输层协议

QUIC协议

介绍

连接建立与握手

建立安全连接的过程

RTT

建连为什么需要两个过程

原因

解决

QUIC协议的1-RTT 建连

必要性

连接过程

第一次握手(Client Hello)

版本号

key_share

其他

第二次握手

介绍

Server Hello

身份验证

生成对称密钥

QUIC协议的0-RTT 建连

介绍

连接过程

队头阻塞

如何解决队头阻塞问题

安全性

性能

连接迁移

引入

介绍

连接 ID

过程

拥塞控制算法

介绍

TCP计算RTT

QUIC计算RTT

热插拔特性

QUIC 的两级流量控制


http2和http3的区别

传输层协议

HTTP/2

基于 TCP(传输控制协议)实现

HTTP/3

在 HTTP/3 中,弃用 TCP 协议,改为使用基于 UDP 协议 QUIC 协议实现

  • QUIC(Quick UDP Internet Connections)协议(传输层协议)

QUIC协议

介绍

QUIC 协议实现在用户态,建立在内核态的 UDP 的基础之上,集成了 TCP 的可靠传输特性+ TLS1.3 协议,保证了用户数据传输的安全

  • 具有建连快,连接迁移的优秀特性
  • 解决了tcp的队头阻塞问题
  • 实现了更好的拥塞/流量控制算法

连接建立与握手

HTTP/2

需要进行 TCP 三次握手,然后再进行 TLS(传输层安全)握手

  • 总共可能需要多次往返才能建立安全连接

建立安全连接的过程

首先,当客户端使用域名访问服务器时,需要借助DNS服务器获取ip地址

传统http的建连需要TCP和TLS两个过程

  • 三次握手需要1 RTT
  • 交换秘钥需要2 RTT -- 客户端发起握手,服务端确认TLS版本+发送证书,客户端内部进行验证+生成对称密钥+加密发送,服务器确认

对于一个小请求(用户数据量较小)而言,传输数据只需要 1 个 RTT

RTT

RTT -- (Round-Trip Time,往返时延)

  • 从发送方发送一个数据包开始,到接收到接收方返回的应答包为止的总时间

建连为什么需要两个过程

原因

因为TCP 和 TLS 没办法合并

  • TCP 是内核态协议:传统的 TCP 协议实现是在内核中的,属于操作系统内核的一部分,应用层无法修改其行为

  • TLS 是用户态协议:TLS 是应用层协议,运行在用户空间,比如浏览器或应用程序内

  • 二者在物理上就不同(内核态/用户态),所以无法合并

解决

如果把tcp挪到用户态呢?

  • 不可行,没法弃用内核里的 TCP
  • 所有操作系统和网络设备(防火墙、路由器等)都已经高度适配和优化了 TCP 协议,内核级别实现是几十年演进的结果

  • 想在用户态重写 TCP,意味着你得重新实现拥塞控制、重传机制、滑动窗口、头部格式、与 OS 协同等等,成本极高,而且还不一定跑得过内核版 TCP

  • 更关键的是,没法让全球其他服务器配合你一起改内核,这不现实

既然干不掉,那就自定义一个传输层协议放在用户态.如何呢?

  • 当然可行,既然 TCP 合并不了 TLS,那就自己造个轮子
  • 在用户态实现后,再结合 TLS.就可以把两个建连过程合二为一了
  • 这就是 QUIC协议 的实现思路

HTTP/3

QUIC 协议将握手和加密过程合并,初次建连只需一次往返即可建立安全连接,减少了连接建立的延迟

  • 并且,后续再次建连可以使用 0-RTT 特性

QUIC协议的1-RTT 建连

必要性

如果客户端与服务端初次建连(之前从未进行通信过),或者长时间没有通信过(0-RTT 过期了),只能进行 1-RTT 建连

  • 只有先进行一次完整的 1-RTT 建连,后续一段时间内的通信才可以进行 0-RTT 建连
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值