QUIC 协议简介
QUIC英文全称为Quick UDP Internet Connections
,意思是快速UDP网络连接,是一种位于传输层的网络传输协议,最早由Google
开发,旨在使用UDP来替换TCP协议,解决TCP传输建连和传输延迟并且提供类似SSL/TLS网络安全功能,希望使用该协议使得网络传输更快。
2018 年 10 月,互联网工程任务组 HTTP 及 QUIC 工作小组正式将基于 QUIC 协议的 HTTP (英语:HTTP over QUIC) 重命名为 HTTP/3 以为确立下一代规范做准备。
QUIC协议主要特点
- 减小连接创建时的开销,QUIC使协商密钥和支持的协议成为初始握手过程的一部分,当客户端打开连接时,服务器响应的数据包包括将来的数据包加密所需的数据
- QUIC的另一个目标是提高网络切换期间的性能,例如当移动设备的用户从WiFi热点切换到移动网络时发生的情况。
- QUIC在应用程序空间中实现,而不是在操作系统内核中实现。QUIC允许更容易地进行未来更改,因为它不需要更改内核就可以进行更新
- 改进的拥塞控制
- 避免队头阻塞的多路复用
- 前向冗余纠错
协议提出历史背景
- 多个协议栈在内核中实现,升级困难问题
当前互联网中最常用的应用层协议HTTP,传输层协议采用TCP,安全套接字采用SSL/TLS,域名解析解析采用DNS,网络层协议采用IPV4协议。这几种协议历史悠久,更新缓慢,由于很多协议栈的实现在内核中实现,互联网中间设备众多,协议更新难度大。国家层面也在推进IPV6基础建设,但是由于难度大至今仍未普及。
- 建立连接握手延迟问题
当前互联网中使用最多的HTTP协议,HTTP/1.1、HTTPS、HTTP2,都使用了TCP传输层协议,HTTPS和HTTP2才使用到了SSL/TLS,这就出现了多个建连延迟。一个TCP三次握手延迟,另一个是TLS建连至少需要2个RTT。
- TCP队头阻塞问题
TCP使用了序号来标识报文,数据处理必须按照顺序处理,如果前面的数据丢失,后面的数据到了也不会通知应用层处理。所以 QUIC 协议选择了 UDP,因为 UDP 本身没有连接的概念,不需要三次握手,优化了连接建立的握手延迟,同时在应用程序层面实现了 TCP 的可靠性,TLS 的安全性和 HTTP2 的并发性,只需要用户端和服务端的应用程序支持 QUIC 协议,完全避开了操作系统和中间设备的限制。(引用自科普:QUIC协议原理分析)
- TCP拥塞控制算法问题
传统的TCP拥塞控制算法,基本分为慢启动,拥塞避免,快速重传,快速恢复
,后续改进的拥塞控制算法诸如CUBIC
,BBR
,Reno
等,这些拥塞控制算法实现不太一样,但是可以确定的是这些算法都需要内核支持。
Quic协议优势
- 不是在内核中实现
QUIC在应用程序空间中实现,而不是在操作系统内核中实现。QUIC允许更容易地进行未来更改,因为它不需要更改内核就可以进行更新
- 建连握手延迟低
Quic协议可在1RTT或者0RTT就可以完成服务器端和移动端的建连
避免队投阻塞
改进的拥塞控制
QUIC协议也实现了BBR/CUBIC
等控制算法,不过是在应用层实现的这些控制算法,并非在操作系统的内核层面。最为牛逼的还是QUIC协议可以同时使用多个拥塞控制算法,甚至可以为每个接入用户单独设置拥塞控制算法,如果再加上人工智能算法,根据终端用户接入的网络环境,自动设置不同的控制算法,这还是非常牛逼