网络基础(四) — QUIC协议
文章目录
- 一、概述
- 二、TCP 协议 & QUIC协议
- 2.1 TCP 协议
- 2.2 QUIC协议
- 三、QUIC 特性
- 3.1 避免前序包阻塞
- 3.2 减少数据包
- 3.3 向前纠错
- 3.4 会话重启和并行下载
- 四、总结
- 五、参考
一、概述
QUIC(Quick UDP Internet Connections)协议是一种全新的基于 UDP 的 web 开发协议(应用层协议)。
本文主要来分一下 QUIC 协议相对于 TCP 协议的优势。
二、TCP 协议 & QUIC协议
2.1 TCP 协议
我们知道,TCP协议是传输层协议,是一个面向连接,且可靠的的协议。因为TCP协议是面向连接的,所以在建立通信前需要进行3次握手。如果是 TCP+TLS 协议(HTTPS),那么建立连接前的通信次数更多。因此 TCP 协议连接建立的成本相对较高,通常我们会通过服用连接来降低这部分的开销。
同样是传输层的 UDP协议是无连接协议,它的特点是传输速度快,但是可能存在丢包的问题(通信前不需要建立连接)。
2.2 QUIC协议
我们知道,HTTP协议在传输层依赖的是TCP协议,数据的完整性是依赖TCP协议来实现的。相对于UDP协议传输速度快,TCP协议因为需要保证数据的完整性,所以会做很多的保护措施:如建立连接;如:顺序传输数据,如果出现传输失败,要进行失败重试的操作。
QUIC协议:
QUIC 协议如果要提升数据传输速度,就得利用UDP协议。但由于UDP协议不可靠,因此数据的完整性这部分功能就需要应用层的QUIC协议来实现。
QUIC 协议的优点:可以在 1 到 2 个数据包内,完成连接的创建,如下图所示。
协议分层如下图所示:
三、QUIC 特性
如果QUIC协议实现数据完成性的方案与TCP是一致的,那QUIC协议就没有什么优势了,无非是将功能的实现从传入层放到了应用层。所以QUIC协议肯定是通过了其它的方案来实现数据的完整性校验。
3.1 避免前序包阻塞
TCP的拥塞问题。
SPDY 和 HTTP/2 协议现在都支持将页面的多个数据(如图片、js 等)通过一个数据链接进行传输。该特性能够加快页面组件的传输速度,但是对于 TCP 协议来说,这会遇到前序包阻塞的问题。这是由于 TCP 协议在处理包时是有严格顺序的,当其中一个数据包遇到问题,TCP 连接需要等待这个包完成重传之后才能继续进行。因此,即使逻辑上一个 TCP 连接上并行的在进行多路数据传输,其他毫无关联的数据也会因此阻塞。
QUIC 协议直接通过底层使用 UDP 协议天然的避免了该问题。由于 UDP 协议没有严格的顺序,当一个数据包遇到问题需要重传时,只会影响该数据包对应的资源,其他独立的资源(如其他 css、js 文件)不会受到影响。
3.2 减少数据包
建立连接的通信次数少。
前文已经介绍过 QUIC 协议在创建连接握手时,只需要 1 到 2 个数据包即可。这对于拥有高速互联网连接的网络环境下可能没有太大的感觉,因为此时一个数据包的延时大概在 10~50ms 之间。
一般来说延迟在 50ms 之内不会有太大的感觉。但是对于无线网络来说,情况就不太一样了。且不说传统 2G/3G 网络,即使是 4G 网络,客户端和服务器之间的延时也通常在 100ms 以上。传统 TCP+TLS 协议的传输方式,在创建连接时的 4 个数据包和 QUIC 协议的 1 个数据包相比,连接创建上就会多耗时 300ms 以上。
3.3 向前纠错
丢包时,通过向前纠错来减少重试次数。缺点是会降低每个包最大的传入数据(因为要做冗余)。
QUIC 协议有一个非常独特的特性,称为向前纠错(Forward Error Correction),每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。
这类似网络层的 RAID 5!
目前默认的冗余量是 10%,既每发送 10 个数据包,其冗余数据就可以重新构建一个丢失的数据包。
向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传,因为数据重传将会消耗更多的时间(包括确认数据包丢失、请求重传、等待新数据包等步骤的时间消耗)。
3.4 会话重启和并行下载
TCP协议在网络状态发生改变时(如:Wifi->4G)要进行重连。而QUIC协议是根据UUID来实现连接的,当网络状态发生改变时,只要UUID未改变,就不需要重连。
底层协议切换到 UDP 协议之后的另一大好处是,连接不再依赖于来源 IP。
对于 TCP 协议来说,标识一个 TCP 连接需要 4 个参数,既来源 IP、来源端口、目的 IP 和目的端口。其中的任一参数改变,TCP 连接就需要重新创建。
这对于传统网络来说影响不大,因为来源和目的 IP 相对固定。但是在无线网络中,情况就大不相同了。设备在移动过程中,可能会因为网络切换(如从 WIFI 网络切换到 4G 网络环境),导致 TCP 连接需要重新创建。
QUIC 协议使用了 UDP 协议,不再需要这四元组参数。同时 QUIC 协议实现了自己的会话标记方式,称为连接 UUID。当设备网络环境切换时,连接 UUID 不会发生变化,因此无需重新进行握手。
该特性除了可以减少无谓的连接重连之外,还可以充分利用设备的不同网络接口,进行资源的并行下载。因为虽然这些网络接口有不同的 IP,但只要他们能够共享连接 UUID,就能够并行的从服务器下载数据。
四、总结
QUIC 协议使用了 UDP 协议作为底层传输协议,通过下面4种方式减少了网络延迟。
- 传输层: QUIC协议底层使用UDP,没有拥塞问题;而HTTP协议底层使用TCP,有拥塞问题。
- 建立连接: 建立连接时,QUIC协议发送的包少,而HTTP+TCP发送的包多。
- 向前纠错: 出现丢包问题时,QUIC协议通过包数据的冗余设计来避免包的重发;TCP协议会触发包的重发机制,时间开销更大。
- 会话重启: QUIC协议利用UUID来建立连接,当网络状态发生变化时,只要UUID不变,就不需要进行重连。而TCP协议是基于IP和端口号进行连接的,当有一个发生变化时,都需要进行重连。
五、参考
- Next generation multiplexed transport over UDP (PDF)
网络基础(四) — QUIC协议相关推荐
- 网络基础应用层--HTTP协议
网络基础应用层--HTTP协议 一.应用层协议 (一)应用层协议概念 (二)自定义协议概念 (三)数据格式如何定义最优 (四)结构体的二进制序列化 二.HTTP协议 (一)HTTP协议 1.请求-响应 ...
- 网络基础网络层--IP协议
网络基础网络层--IP协议 一.IP协议解析 (一)4位版本 (二)4位报头长度 (三)8位服务类型 (四)16位数据报长度 (五)16位分片标识 (六)3位分片标志 (七)13位分片偏移 (八)8位 ...
- 网络基础 之SSL协议
网络基础 之SSL协议 一.SSL 协议简介 SSL 的功能 SSL 的特性 SSL 在协议栈的位置 SSL 体系结构 二.SSL 协议工作原理 SSL协议可分为两层 SSL 的两个重要概念 SSL握 ...
- 网络基础 TCP/IP协议面试常问知识点
网络基础 TCP/IP协议面试常问知识点 ****************** 如有侵权请提示删除 ********************* 1.网络包的组成: 报头/起始帧分界符--MAC头部-- ...
- 网络基础之生成树协议(STP)基础理论及华为ENSP基础配置
网络基础之STP理论基础 一.STP的引入 拓扑冗余 在上面的拓扑图中,PC1的数据在经过接入层交换机,汇聚到汇聚交换机上后,到达核心交换机之后,最终,流量到达服务器.但是这样的网络是存在问题的.这个 ...
- 网络基础四 DNS DHCP 路由 FTP
第1章 网络基础 1.1 IP地址分类 IP地址的类别-按IP地址数值范围划分 IP地址的类别-按IP地址用途分类 IP地址的类别-按网络通信方式划分 1.2 局域网上网原理过程 DHCP原理过程详情 ...
- 网络基础(二)- TCP协议
TCP协议 TCP全称为 "传输控制协议(Transmission Control Protocol").它最重要的是解决在传输层通信的过程中,解决网络通信过程中可靠性的问题.当然 ...
- 网络基础一(协议的概念,网络应用程序设计模式)
协议的概念 什么是协议? 从应用的角度出发,协议可理解为"规则",是数据传输和数据的解释的规则. 假设,A.B双方欲传输文件.规定: 第一次,传输文件名,接收方接收到文件名,应答O ...
- 网络基础 -- 应用层HTTP协议
目录 应用层(TCP/IP协议中的应用层/HTTP协议) HTTP协议 URL -- 统一资源定位符 UrlEncode / UrlDecode HTTP协议格式 概述 HTTP 请求消息Reques ...
最新文章
- 解决idea中执行maven命令失败的问题
- 如何攻克目标检测?百度全球顶级会议双料冠军团队有话说!
- hexo修改默认端口
- 最全、最详细的配置jdk十步法!
- Nvidia Jetson TX2+Intel Realsense D435i跑ORB_SLAM3
- linux+手机+翻页,在Android手机上实现阅读器的翻页效果
- Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
- Vue底层判断标签的性能优化方法
- 【SICP练习】151 练习4.7
- JAVA编程中异常问题处理方式的区别和分析
- java网络编程 - TCP/IP四层模型
- WiFi之WL工具命令
- matlab定积分程序,[转载]Matlab数值积分程序集合【转载】
- 【流程发现算法概述】
- 手把手教你如何安装水晶易表——靠谱的安装教程
- CryENGINE 3 百度百科介绍
- DAOS 源码解析之 daos_pool
- java curator_关于Curator学习过程问题
- win10-gvim安装vim-airline后状态栏乱码,而且箭头显示不出来
- 在 Surface 或 Windows 10 中启用和禁用触摸屏
热门文章
- 【算法训练营学习笔记-Week01】数组和链表的比较以及LeetCode的做题反思
- Nvidia AGX Xavier GMSL 自动驾驶控制器设计方案
- LC Uniboot相比于常规的LC光纤连接器有什么特点?
- C语言 10_随机数
- STM32学习之:RAM的分配和占用
- uni-app卡片式轮播
- html 如何合并表格
- DXP_protel2004_原理图设计基础_新建和添加原理图库文件
- 0x80073712_win10系统更新提示错误代码“0x80073712”的解决方法
- 3GPP TS 23501-g51 中英文对照 | 4.4.7 MSISDN-less MO SMS Service