新一代互联网传输协议QUIC浅析
QUIC(Quick UDP Internet Connection)是谷歌制定的一种互联网传输层协议,它基于UDP传输层协议,同时兼具TCP、TLS、HTTP/2等协议的可靠性与安全性,可以有效减少连接与传输延迟,更好地应对当前传输层与应用层的挑战。
QUIC的由来:为什么是UDP而非TCP?
UDP和TCP都属于传输层协议。TCP是面向连接的,更强调的是传输的可靠性,通过TCP连接传送的数据,无差错,不丢失,不重复,按序到达,但是因为TCP在传递数据之前会有三次握手来建立连接,所以效率低、占用系统的CPU、内存等硬件资源较高;而UDP的无连接的(即发送数据之前不需要建立连接),只需要知道对方地址即可发送数据,具有较好的实时性,工作效率比TCP高,占用系统资源比TCP少,但是在数据传递时,如果网络质量不好,就会很容易丢包。
我们知道,大部分Web平台的数据传输都基于TCP协议。实际上,TCP在设计之初,网络环境复杂、丢包率高、网速差,所以TCP可以完美解决可靠性的问题。而如今的网络环境和网速都已经取得了巨大的改善,网络传输可靠性已经不再是棘手的问题。另外,TCP还有一个很大的问题是更新非常困难。这是因为:TCP网络协议栈的实现依赖于系统内核更新,一旦系统内核更新,终端设备、中间设备的系统更新都会非常缓慢,迭代需要花费几年甚至十几年的时间,这显然跟不上当今互联网的发展速度。所以现在解法就是,抛弃TCP而使用UDP,来实现低延迟的传输需求。
(QUIC is very similar to TCP+TLS+HTTP/2 implemented on UDP)
为了结合两者优点,谷歌公司推出了QUIC,它的升级不依赖于系统内核,只需要Client和Server端更新到指定版本。如此一来,基于UDP的QUIC就能月更甚至周更,很好的解决了TCP部署和更新的困难,更灵活地实现部署和更新。
为什么要用QUIC?
第一,建连延迟低
网民传统TCP三次握手+TLS1~2RTT握手+http数据,基于TCP的HTTPS一次建连至少需要2~3个RTT,而QUIC基于UDP,完整握手只需要1RTT乃至0RTT,可以显著降低延迟。
(握手比对)
第二,安全又可靠
QUIC具备TCP、TLS、HTTPS/2等协议的安全、可靠性的特点,通过提供安全功能(如身份验证和加密)来实现加密传输,这些功能由传输协议本身的更高层协议(如TLS)来实现。
第三,改造灵活
QUIC在应用程序层面就能实现不同的拥塞控制算法,不需要操作系统和内核支持,这相比于传统的TCP协议改造灵活性更好。
第四,改进的拥塞控制
QUIC主要实现了TCP的慢启动、拥塞避免、快重传、快恢复。在这些拥塞控制算法的基础上改进,例如单调递增的 Packet Number,解决了重传的二义性,确保RTT准确性,减少重传次数。
第五,无队头阻塞的多路复用
HTTP2实现了多路复用,可以在一条TCP流上并发多个HTTP请求,但基于TCP的HTTP2在传输层却有个问题,TCP无法识别不同的HTTP2流,实际收数据仍是一个队列,当后发的流先收到时,会因前面的流未到达而被阻塞。QUIC一个connection可以复用传输多个stream,每个stream之间都是独立的,一个stream的丢包不会影响到其他stream的接收和处理。
综上所述,QUIC具有众多优点,它融合了UDP协议的速度、性能与TCP的安全与可靠,大大优化了互联网传输体验。
作为提升终端用户访问效率的CDN服务,其节点之间存在大量数据互通,节点之间的网络连接、传输架构等因素都会对CDN服务质量产生影响。而将QUIC应用在CDN系统中,CDN用户开启QUIC功能后,系统将遵循QUIC协议进行用户IP请求处理,既能满足安全传输的需求,也能提升传输效率。目前,阿里云CDN除了在资源部署、智能调度等方面进行提升之外,也在网络传输协议优化上不断钻研演进,以此确保为用户提供更低延迟、更高性能的内容分发加速服务。
早在2018年杭州云栖大会上,阿里云率先提出AliQUIC的概念,它是基于QUIC协议而推出的一种CDN last mile和middle mile的网络传输解决方案。在这个网络方案里,AliQUIC不仅仅针对Web类应用,它在游戏,实时音视频通信,互动直播和IM弹幕等各种场景中,延伸出针对性地算法和技术,以达到最佳的加速效果。点击阅读详情。
阿里云CDN全面支持QUIC协议
阿里云CDN全面支持QUIC协议,适用的产品包含静态内容分发(图片小文件、大文件下载、视音频点播)和 动态内容分发(全站加速)。QUIC基于UDP协议,可以为用户提供更高的弱网性能、更低的握手延迟、更好的多路复用和更灵活的拥塞算法。
用户只需在CDN、全站加速控制台对域名开启【QUIC协议开关】功能,支持QUIC协议的客户端即可通过QUIC协议与阿里云CDN节点通信。
(在阿里云CDN中使用QUIC的工作原理)
QUIC对客户端的要求
- 如果您使用Chrome浏览器,则只支持QUIC协议Q43版本。当前阿里云CDN的QUIC协议是Q39版本,不支持直接对阿里云CDN发起QUIC请求。
- 如果您使用自研App,则App必须集成支持QUIC协议的网络库,例如:lsquic-client或cronet网络库。
QUIC应用场景
一、图片小文件:明显降低文件下载总耗时,提升效率
二、视频点播:提升首屏秒开率,降低卡顿率,提升用户观看体验
三、动态请求:适用于动态请求,提升访问速度,如网页登录、交易等交互体验提升
四、弱网环境:在丢包和网络延迟严重的情况下仍可提供可用的服务,并优化卡顿率、请求失败率、秒开率、提高连接成功率等传输指标
五、大并发连接:连接可靠性强,支持页面资源数较多、并发连接数较多情况下的访问速率提升
六、加密连接:具备安全、可靠的传输性能
如何开通使用QUIC
目前QUIC对外开放处于公测阶段,请您扫下方二维码进入钉钉群,进群后按群公告提供域名信息,由后台工程师帮您开启QUIC协议。当您在阿里云CDN开启QUIC协议功能时,阿里云CDN将会处理通过QUIC协议发起的用户请求。
Tips:QUIC协议属于增值服务,会对QUIC请求数进行额外计费,详情请参见CDN详细价格信息的QUIC部分。
本文作者:樰篱
本文为云栖社区原创内容,未经允许不得转载。
新一代互联网传输协议QUIC浅析的更多相关文章
- 新一代互联网传输协议QUIC
QUIC(Quick UDP Internet Connections,快速UDP互联网连接)是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验. Q ...
- [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
- FTP(文件传输协议)工作原理
目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...
- HTTP超文本传输协议-HTTP/1.1中文版
摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...
- http 超文本传输协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接 ...
- 超文本传输协议-HTTP/1.1
超文本传输协议-HTTP/1.1(修订版) ---译者:孙超进本协议不限流传发布.版权声明Copyright (C) The Internet Society (1999). All Rights R ...
- FTPS (FTP over SSL) vs. SFTP (SSH 文件传输协议): 我们如何做出选择
第一个RFC的FTP协议发布通过网络使用FTP协议(由RFC 959或更高版本)的文件传输始于1980年,FTP提供上传,下载和删除文件,创建和删除目录,读取目录内容的功能.虽然FTP是非常受欢迎的, ...
- 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识
第41章 HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...
- TCP与UDP传输协议
目录结构: contents structure [-] 1 TCP协议和UDP协议的比较 1.1 TCP协议 TCP的全称是Transmission Control Protocol (传输控制协议 ...
随机推荐
- JZOJ2368 【SDOI2011】黑白棋
题目 题目大意 在一个1*n的棋盘上,有黑棋和白棋交错分布,每次,一个人可以移动自己的ddd颗旗子. 问先手必胜的方案数. 思考历程 在一开始,我就有点要放弃的念头. 因为这题是一道博弈问题. 我是非 ...
- 最小费用最大流——ZKW
对于最小费用最大流,我们的通常做法是EK+SPFA. 然而,卡常界大佬ZKW发明了一个求解最小费用最大流的方法,很强啊. 在学ZKW费用流前,先说说KM算法. KM算法 为啥要先提这个呢?因为ZKW费 ...
- php循环语句(二)
for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; 增量) { 要执行的代码; } 参数: 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以 ...
- 同名的cookie会不会存在多个
cookie new了多个.同一个名字.会不会存在多个呢. //若果不设置Cookie的path,则名字相同的Cookie视为相同的Cookie,后面的覆盖前面的,注意:大小写敏感 Cookie c1 ...
- VirtualBox安装CentOS后分辨率和鼠标无缝切换问题
问题:VirtualBox安装完后出现分辨率只有800*600和1024*768,鼠标不能在虚拟机和本机件无缝切换. 解决办法:在终端中执行以下命令 yum install kernel yum in ...
- JS 中 Tween 的使用
JavaScript Tween算法及缓动效果 Flash做动画时会用到Tween类,利用它可以做很多动画效果,例如缓动.弹簧等等.我这里要教大家的是怎么利用flash的Tween类的算法,来做j ...
- LRU Cache数据结构简介
什么是LRU Cache LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法. 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM ...
- Java学习笔记 - 类方法与代码块的执行顺序
类的初始化顺序 使用一个简单的父子类例子来做示范,代码执行顺序在代码后有标注. class Parent { public static String p_StaticField = "父类 ...
- springcloud:Eureka的使用
1.认识Eureka 服务的管理. 问题分析 在刚才的案例中,itcast-service-provider对外提供服务,需要对外暴露自己的地址.而consumer(调用者)需要记录服务提供者的地址. ...
- Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal前序与中序构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15 ...