HTTP/3是什么

https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/

跟HTTP/2有什么不同

HTTP/3的传输层不是TCP,而是UDP+QUIC。

为什么不用TCP?因为TCP不是按最高效率设计的,比如在传输数据前要先握手,握手要先来一个RTT,如果两端地理位置比较远,这可能要超过100ms。而且TCP传输数据时,把数据当成一个文件或者一个字节流,这意味着如果中间有数据丢失,那后面的数据也会堵住,这叫队头阻塞,HTTP/2在应用层解决了这个问题,但用了TCP,在传输层还是有这个问题。

当然TCP有也很多扩展来解决这些效率问题,比如TCP Fast Open,以前握过手的可以一开始就发数据。比如MultiPath TCP,在移动端,如果同时连着Wi-Fi和4G,那两条道道都可以用阿里传输数据。

这些都是TCP的扩展,也不是很难实现,但却很难部署。像我们的电脑、手机,可以很快更新换代,但在互联网中,还有其他中间设备,这些不容易更新。比如防火墙会拦截他不认识的拓展,除了防火墙,还要负载均衡器、路由、缓存服务器、代理等等。在实际应用中,这些很多都不支持这些新的拓展。如果选择去逐步更新这些设备,可能要用超过十年,而且人家可能还不想更新,总会有遗漏。

那能不能不做这些更新,但也更快呢?有的,用现有的UDP协议,在UDP协议上再去造一个更高效的TCP,这就是QUIC。这也是QUIC为啥不抛弃UDP的原因,抛弃UDP,还是得升级设备。
在这里插入图片描述

所以实际上我们是需要TCP/2,我们叫它QUIC,在HTTP/3之下,HTTP/3用了QUIC和UDP来替代传输层协议。

QUIC

基于UDP,QUIC更加高效的重新实现了TCP的特性。包括可靠传输、流量控制(针对网络)、拥塞控制(针对接收者),结合了几十年的经验,用了最好的方法。

QUIC的四个主要改变(跟HTTP/2好像……):

深度结合了TLS

安全且高效。

部分QUIC协议头部也加密了,不像HTTP/2,只加密了TCP的payload,攻击者能看到的更少了。头部能泄漏啥?

深度结合,所以QUIC的握手和TLC的握手可以合一起,更快了。
但也有缺点

  1. 有些网络可能不允许用QUIC,因为监控不到了,比如高科技公司的内部网络?这也不利于quic的推广,挺扯淡的又好像很合理……
  2. 因为是分帧,每个帧都要独立加密,相比TCP的TLS整体加密,会慢一点

支持多个独立流

一个连接同时发多个流,更加高效。

在HTTP/1.1,每个文件都要开一个新的TCP连接,浏览器一般也限制每个页面6到30个连接,但资源一多,就会很慢,要下完一个才能去下载下一个,最多30个并发。

HTTP/2在一个连接里用不同流去下载多个文件解决了这个问题。但当丢包了,还是会阻塞后面已经到了的数据的处理,因为TCP层不理解这是不同流的数据,不会说这个流的丢了,就只阻塞这个流的,其他流的可以给上层处理,会全部阻塞。

QUIC区分了不同流,所以就可以只阻塞丢包的流。

引入了connection ID

Wi-Fi切4G这种切换了网络,但接收者的ip和端口没变的情况,可以复用连接,不需要重新握手,因为还是往同一个ip和端口发数据。ip确定机器,端口确定网络程序(如果有nat,那就是端口确定子网的机器+网络程序)。虽然发送者变了,但connection id没变,对接收者来说,那可以理解为还是同一个发送者,该连接还能用(连接并不是说真的有那么一条管道,只是有了握手和挥手,真的有个接收者,且接收者肯接受数据。)。但在TCP,因为没有标记区分开来,所以只能用发送者ip,那连接就不能用了,因为发送者ip肯定变了。

除了切网络,如果有NAT重绑定,端口也会变,连接也会失效。

为了防止黑客、窃听者定位一个用户(比如你在图书馆连Wi-Fi搜了一本漫画书,黑客发现这里有个二次元,然后你切4G了,黑客发现还是那个id,一看你ip,原来就是你这台手机?),QUIC在新的网络里用一个新的connection ID,那ID还是变了?是的,但client和server会提前加密协商好,比如id为a、b、c的其实都是同一个连接X,这样切网络时就从a换b。

分帧

不像TCP,一堆数据就是一个TCP包,QUIC会分为ACK帧、新CID帧、数据流帧。

这样以后QUIC拓展也方便,加一种新的帧就可以了。

分帧也是分流的基础,每个QUIC帧都带上一个CID,区分不同的流。在这里插入图片描述

小结

这样看来,QUIC需要在有丢包、切网络的情景下才能打赢TCP,不然在稳定的网络,反而因为每个帧都加密,可能更慢?

总结

所以HTTP/3就是替换了TCP?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值