兼顾高可靠和低延迟,Google打算用QUIC协议替代TCP/UDP

Google想到能否把这两种协议的优势结合起来,同时实现低时延和高可靠并将其应用到更高安全的协议上,于是就有了QUIC。

本文就来详细介绍下QUIC协议。

从TCP协议说起

当前,web平台的数据传输都基于TCP协议。TCP协议在创建连接之前需要进行三次握手(图1),如果需要提高数据交互的安全性,既增加传输层安全协议(TLS),还会增加更多的握手次数(图2)。

图1:TCP三次握手示意

图2:TLS初始化握手示意

正因为TCP协议连接建立的成本相对较高,可以通过TCP快速打开(TCP Fast Open)来减少建立连接时的握手次数。但是该技术目前应用较少。

和TCP相反,UDP协议是无连接协议。客户端发出UDP数据包后,只能“假设”这个数据包已经被服务端接收。这样的好处是在网络传输层无需对数据包进行确认,但存在的问题就是为了确保数据传输的可靠性,应用层协议需要自己完成包传输情况的确认。

此时,QUIC协议就登场了。QUIC协议可以在1到2个数据包(取决于连接的服务器是新的还是已知的)内,完成连接的创建(包括TLS)(图3)。

图3:QUIC协议握手示意

QUIC协议的目的

从前文对比可以看出,QUIC协议的主要目的,是为了整合TCP协议的可靠性和UDP协议的速度和效率。QUIC的维基百科页面介绍了该协议的主要目的:

对于Google来说优化TCP协议是一个长期目标,QUIC旨在创建几乎等同于TCP的独立连接,但有着低延迟,并对类似SPDY的多路复用流协议有更好的支持。 如果QUIC协议的特性被证明是有效的,这些特性以后可能会被迁移入后续版本的TCP和TLS协议(它们都有很长的开发周期)。

值得注意的是,如果QUIC的特性被证明是有效的,这些特性以后可能会被迁移到后续版本的TCP协议中

TCP协议的实现是高度管制的。TCP协议栈通常由操作系统实现,如Linux、Windows内核或者其他移动设备操作系统。修改TCP协议是一项浩大的工程,因为每种设备、系统的实现都需要更新。

相反的,UDP协议在操作系统层面实现相对简单,基于UDP协议实现新的协议以验证Google对于TCP协议改进的理论,验证成本相对较低。

QUIC协议内置了TLS栈,实现了自己的传输加密层,而没有使用现有的TLS 1.2。同时QUIC还包含了部分HTTP/2的实现,因此QUIC的地位看起来是这样的:

从图上可以看出,QUIC底层通过UDP协议替代了TCP,上层只需要一层用于和远程服务器交互的HTTP/2 API。这是因为QUIC协议已经包含了多路复用和连接管理,HTTP API只需要完成HTTP协议的解析即可。

QUIC协议特性

1. 避免前序包阻塞

SPDY和HTTP/2协议现在都支持将页面的多个数据(如图片、Java等)通过一个数据链接进行传输。该特性能够加快页面组件的传输速度,但是对于TCP协议来说,这会遇到前序包阻塞的问题。这是由于TCP协议在处理包时是有严格顺序的,当其中一个数据包遇到问题,TCP连接需要等待这个包完成重传之后才能继续进行。因此,即使逻辑上一个TCP连接上并行的在进行多路数据传输,其他毫无关联的数据也会因此阻塞。

QUIC协议直接通过底层使用UDP协议天然的避免了该问题。由于UDP协议没有严格的顺序,当一个数据包遇到问题需要重传时,只会影响该数据包对应的资源,其他独立的资源(如其他css、js文件)不会受到影响。

2. 减少数据包

前文已经介绍过QUIC协议在创建连接握手时,只需要1到2个数据包即可。这对于拥有高速互联网连接的网络环境下可能没有太大的感觉,因为此时一个数据包的延时大概在10~50ms之间。

一般来说延迟在50ms之内不会有太大的感觉。但是对于无线网络来说,情况就不太一样了。且不说传统2G/3G网络,即使是4G网络,客户端和服务器之间的延时也通常在100ms以上。传统TCP+TLS协议的传输方式,在创建连接时的4个数据包和QUIC协议的1个数据包相比,连接创建上就会多耗时300ms以上。

3. 向前纠错

QUIC协议有一个非常独特的特性,称为向前纠错(Forward Error Correction),每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。

这类似网络层的RAID 5!

目前默认的冗余量是10%,既每发送10个数据包,其冗余数据就可以重新构建一个丢失的数据包。

向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传,因为数据重传将会消耗更多的时间(包括确认数据包丢失、请求重传、等待新数据包等步骤的时间消耗)。

4. 会话重启和并行下载

底层协议切换到UDP协议之后的另一大好处是,连接不再依赖于来源IP。

对于TCP协议来说,标识一个TCP连接需要4个参数,既来源IP、来源端口、目的IP和目的端口。其中的任一参数改变,TCP连接就需要重新创建。

这对于传统网络来说影响不大,因为来源和目的IP相对固定。但是在无线网络中,情况就大不相同了。设备在移动过程中,可能会因为网络切换(如从WIFI网络切换到4G网络环境),导致TCP连接需要重新创建。

QUIC协议使用了UDP协议,不再需要这四元组参数。同时QUIC协议实现了自己的会话标记方式,称为连接UUID。当设备网络环境切换时,连接UUID不会发生变化,因此无需重新进行握手。

该特性除了可以减少无谓的连接重连之外,还可以充分利用设备的不同网络接口,进行资源的并行下载。因为虽然这些网络接口有不同的IP,但只要他们能够共享连接UUID,就能够并行的从服务器下载数据。

QUIC协议实践

Chrome浏览器从2014年开始已经实验性的支持了QUIC协议。可以通过在Chrome浏览器中输入chrome://net-internals/#quic查看是否已经支持QUIC协议。如果还未支持,可以在chrome://flags/#enable-quic中进行开启。

开始Chrome浏览器对QUIC协议的支持之后,可以在chrome://net-internals/#quic中查看到当前浏览器的QUIC一些连接。当然目前只有Google服务才支持QUIC协议(如YouTube、 Google.com)。

关于防火墙

通常系统管理员会关注防火墙的TCP规则,而忽略UDP规则。如果要在防火墙之后使用QUIC协议,除了传统web服务需要开放的80/TCP、443/TCP之外,针对QUIC还需要开放443/UDP的访问。

服务端使用QUIC协议

目前支持QUIC协议的web服务只有0.9版本以后的Caddy。其他常用web服务如nginx、apache等都未开始支持。curl表达了对QUIC协议支持的兴趣。

QUIC性能优势

在2015年的博文中,Google分享了一些关于QUIC协议实现的结果。

这些优势在诸如YouTube的视频服务上更为突出。用户报告通过QUIC协议在观看视频的时候可以减少30%的重新缓冲时间。

-END-

欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

相关推荐
<p> <b><span style="font-size:14px;"></span><span style="font-size:14px;background-color:#FFE500;">【Java面试宝典】</span></b><br /> <span style="font-size:14px;">1、68讲视频课,500道大厂Java常见面试题+100个Java面试技巧与答题公式+10万字核心知识解析+授课老师1对1面试指导+无限次回放</span><br /> <span style="font-size:14px;">2、这门课程基于胡书敏老师8年Java面试经验,调研近百家互联网公司及面试官的问题打造而成,从筛选简历和面试官角度,给出能帮助候选人能面试成功的面试技巧。</span><br /> <span style="font-size:14px;">3、通过学习这门课程,你能系统掌握Java核心、数据库、Java框架、分布式组件、Java简历准备、面试实战技巧等面试必考知识点。</span><br /> <span style="font-size:14px;">4、知识点+项目经验案例,每一个都能做为面试的作品展现。</span><br /> <span style="font-size:14px;">5、本课程已经在线下的培训课程中经过实际检验,老师每次培训结束后,都能帮助同学们运用面试技巧,成功找到更好的工作。</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【超人气讲师】</b></span><br /> <span style="font-size:14px;">胡书敏 | 10年大厂工作经验,8年Java面试官经验,5年线下Java职业培训经验,5年架构师经验</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【报名须知】</b></span><br /> <span style="font-size:14px;">上课模式是什么?</span><br /> <span style="font-size:14px;">课程采取录播模式,课程永久有效,可无限次观看</span><br /> <span style="font-size:14px;">课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化</span><br /> <br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><strong>如何开始学习?</strong></span><br /> <span style="font-size:14px;">PC端:报名成功后可以直接进入课程学习</span><br /> <span style="font-size:14px;">移动端:<span style="font-family:Helvetica;font-size:14px;background-color:#FFFFFF;">CSDN 学院APP(注意不是CSDN APP哦)</span></span> </p>
<p> 需要学习Windows系统YOLOv4的同学请前往《Windows版YOLOv4目标检测实战:原理与源码解析》, </p> <p> 课程链接 https://edu.csdn.net/course/detail/29865 </p> <h3> <span style="color:#3598db;">【为什么要学习这门课】</span> </h3> <p> <span>Linux</span>创始人<span>Linus Torvalds</span>有一句名言:<span>Talk is cheap. Show me the code. </span><strong><span style="color:#ba372a;">冗谈不够,放码过来!</span></strong> </p> <p> <span> </span>代码阅读是从基础到提的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。 </p> <p> YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。 </p> <p> YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。 </p> <h3> <span style="color:#3598db;">【课程内容与收获】</span> </h3> <p> 本课程将解析YOLOv4的实现原理和源码,具体内容包括: </p> <p> - YOLOv4目标检测原理<br /> - 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算<br /> - 代码阅读工具及方法<br /> - 深度学习计算的利器:BLAS和GEMM<br /> - GPU的CUDA编程方法及在darknet的应用<br /> - YOLOv4的程序流程 </p> <p> - YOLOv4各层及关键技术的源码解析 </p> <p> 本课程将提供注释后的darknet的源码程序文件。 </p> <h3> <strong><span style="color:#3598db;">【相关课程】</span></strong> </h3> <p> 除本课程《YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括: </p> <p> 《YOLOv4目标检测实战:训练自己的数据集》 </p> <p> 《YOLOv4-tiny目标检测实战:训练自己的数据集》 </p> <p> 《YOLOv4目标检测实战:人脸口罩佩戴检测》<br /> 《YOLOv4目标检测实战:中国交通标志识别》 </p> <p> 建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。 </p> <h3> <span style="color:#3598db;">【YOLOv4网络模型架构图】</span> </h3> <p> 下图由白勇老师绘制 </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006291526195469.jpg" /> </p> <p>   </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202007011518185782.jpg" /> </p>
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值