前端面试常问--计算机网络--HTTP3

在前端面试中,除了最为重要的JavaScript知识外,计算机网络和操作系统也是尤为重要的(html和css还算比较简单的),而计算机网络中http协议是经常被问到的内容,包括常见的状态码,常见的头部字段,握手过程等等,而这里要说的是其中一个常问的问题,http版本

在之前我已经写过一篇http版本相关的博客HTTP基本学习与演变中(HTTP/0.9,HTTP/1.0,HTTP/1.1,HTTP/2.0,HTTPS)的比较,但里面并没有包含HTTP3,所以这里额外写了个HTTP3的内容

实际上在之前我也没在意HTTP3,毕竟连HTTP2都很少用到,但之前面试百度的时候被问到了,还好看过一点HTTP3,还是回答上了一些,后面把一些优化都看了一遍,秋招面试几个大厂都问到了,还好有去学习了。。所以做为程序猿,要进大厂还是要紧跟技术前沿(虽然HTTP3也不算技术前沿了。)

那么废话不多说(说了老多了),进入正题

HTTP3


HTTP3介绍

HTTP3.0,又称为HTTP over QUIC。HTTP3.0的核心是QUIC协议。我们知道传统的HTTP协议是基于TCP协议的,而QUIC是基于UDP协议,这是HTTP3.0与之前的HTTP协议的一个大区别

QUIC协议

既然HTTP3.0的核心是QUIC协议,那么我们就要先简单了解一下,什么是QUIC协议

QUIC协议简介

QUIC是由Google提出的基于UDP进行多路并发传输的协议,全名quick udp internet connection,从全名就可以看出,QUIC是基于UDP的,翻译过来就是,快速的UDP网络连接。

核心优势

QUIC协议的出现,是为了解决现在网络协议中的一些传输层和应用层存在的问题,且几乎不需要应用修改。它基于UDP实现了类似于HTTP2的多路复用数据流,可靠交付等功能,大致实现如下

  1. 传输可靠性:QUIC在UDP的基础上增加了一层来保证数据传输可靠性,它提供了数据包重传,拥塞控制等TCP实现的可靠交付特性
  2. 加密:QUIC使用了TLS1.3,而TLS1.3的0-RTT握手机制减少了握手阶段所花费的RTT数
  3. 多路复用:QUIC协议与HTTP2.0同样有多路复用的功能,但是由于QUIC是基于UDP的,所以解决了TCP的队头阻塞问题
  4. 快速握手:由于基于UDP且TLS1.3的0-RTT握手机制,所以QUIC可以实现使用0~1个RTT来实现连接

HTTP3 VS HTTP2


这个也是面试中,当问起HTTP3时,最常被问到的问题(反正我每次被问起HTTP3都扯到了这个)

1. 等待时延的减少

我们知道,TCP的连接需要三次握手,而如果是加上TLS加密,那在握手阶段的时延会进一步增加。而QUIC协议的连接,只需要让客户端在第一次连接服务端的时候,执行1rt的握手来获取完成握手的所有必要信息。

之所以只需要1rt,是因为UDP本身没有连接这一概念,所以我们可以直接把第一次交互当作连接本身。

2. 优化拥塞控制

在TCP中,我们会对没有在时间内接收到的报文段进行重传,但是,TCP在首次发送的报文段和重传发送的报文段,对应返回的确认报文段是完全一样的,这就导致了我们无法去判断接收到的确认报文段是对应于哪一次发送的报文。

而无法正确判断会对后面的超时重传时间带来影响。

  • 如果收到的确认是对原来发送的报文段的确认,却被当前是重传报文段的确认,就会导致计算出来的超时重传时间变短,那么在后面的拥塞控制中,重传报文会被过多地重传。
  • 如果收到的是重传报文段的确认,却被当前是对原来发送的报文段的确认,就会导致计算出来的超时重传时间变长,那么在后面的拥塞控制中,如果报文段丢失,那么重传报文段的发送就会等待过久的时间才得以发送出去。

即使这个缺点可以使用Karn算法来进行一定的改进,从而更合理地估测往返时间,但并不代表问题已经解决,而且我们还需要做额外的算法处理。

QUIC为了避免这个问题,对于原始的报文段和重传的报文段的确认报文采用了不同的编号,且每次返回都采用新的编号递增,因此客户端可以通过编号来判断这个确认报文段是对哪个报文段的确认。

3. 优化多路复用

在谈及多路复用的优化之前,我们要先说说HTTP2是如何实现多路复用的

HTTP2引入了帧和流的概念

  • 帧:在传输过程中最小的数据单位,每个帧会标识出该帧处于哪个流,且在传输中的顺序
  • 流:可以看出是多个帧组成的数据流,在HTTP2中,同一个TCP连接可以有多个流,这也就是可以进行多路复用的原因

虽然采用了多个流,但是HTTP2使用的流,流与流之间是存在依赖关系的,如果其中的一个流出现丢包,那么其后续的帧也会受到影响

而QUIC协议中,同一个连接中的多个流之间是没有依赖关系的,所以当发生丢包的时候,只会影响当前的流,减少了丢包时造成的损失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值