文章目录

  • 一、概述
  • 二、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种方式减少了网络延迟。

  1. 传输层: QUIC协议底层使用UDP,没有拥塞问题;而HTTP协议底层使用TCP,有拥塞问题。
  2. 建立连接: 建立连接时,QUIC协议发送的包少,而HTTP+TCP发送的包多。
  3. 向前纠错: 出现丢包问题时,QUIC协议通过包数据的冗余设计来避免包的重发;TCP协议会触发包的重发机制,时间开销更大。
  4. 会话重启: QUIC协议利用UUID来建立连接,当网络状态发生变化时,只要UUID不变,就不需要进行重连。而TCP协议是基于IP和端口号进行连接的,当有一个发生变化时,都需要进行重连。

五、参考

  • Next generation multiplexed transport over UDP (PDF)

网络基础(四) — QUIC协议相关推荐

  1. 网络基础应用层--HTTP协议

    网络基础应用层--HTTP协议 一.应用层协议 (一)应用层协议概念 (二)自定义协议概念 (三)数据格式如何定义最优 (四)结构体的二进制序列化 二.HTTP协议 (一)HTTP协议 1.请求-响应 ...

  2. 网络基础网络层--IP协议

    网络基础网络层--IP协议 一.IP协议解析 (一)4位版本 (二)4位报头长度 (三)8位服务类型 (四)16位数据报长度 (五)16位分片标识 (六)3位分片标志 (七)13位分片偏移 (八)8位 ...

  3. 网络基础 之SSL协议

    网络基础 之SSL协议 一.SSL 协议简介 SSL 的功能 SSL 的特性 SSL 在协议栈的位置 SSL 体系结构 二.SSL 协议工作原理 SSL协议可分为两层 SSL 的两个重要概念 SSL握 ...

  4. 网络基础 TCP/IP协议面试常问知识点

    网络基础 TCP/IP协议面试常问知识点 ****************** 如有侵权请提示删除 ********************* 1.网络包的组成: 报头/起始帧分界符--MAC头部-- ...

  5. 网络基础之生成树协议(STP)基础理论及华为ENSP基础配置

    网络基础之STP理论基础 一.STP的引入 拓扑冗余 在上面的拓扑图中,PC1的数据在经过接入层交换机,汇聚到汇聚交换机上后,到达核心交换机之后,最终,流量到达服务器.但是这样的网络是存在问题的.这个 ...

  6. 网络基础四 DNS DHCP 路由 FTP

    第1章 网络基础 1.1 IP地址分类 IP地址的类别-按IP地址数值范围划分 IP地址的类别-按IP地址用途分类 IP地址的类别-按网络通信方式划分 1.2 局域网上网原理过程 DHCP原理过程详情 ...

  7. 网络基础(二)- TCP协议

    TCP协议 TCP全称为 "传输控制协议(Transmission Control Protocol").它最重要的是解决在传输层通信的过程中,解决网络通信过程中可靠性的问题.当然 ...

  8. 网络基础一(协议的概念,网络应用程序设计模式)

    协议的概念 什么是协议? 从应用的角度出发,协议可理解为"规则",是数据传输和数据的解释的规则. 假设,A.B双方欲传输文件.规定: 第一次,传输文件名,接收方接收到文件名,应答O ...

  9. 网络基础 -- 应用层HTTP协议

    目录 应用层(TCP/IP协议中的应用层/HTTP协议) HTTP协议 URL -- 统一资源定位符 UrlEncode / UrlDecode HTTP协议格式 概述 HTTP 请求消息Reques ...

最新文章

  1. 解决idea中执行maven命令失败的问题
  2. 如何攻克目标检测?百度全球顶级会议双料冠军团队有话说!
  3. hexo修改默认端口
  4. 最全、最详细的配置jdk十步法!
  5. Nvidia Jetson TX2+Intel Realsense D435i跑ORB_SLAM3
  6. linux+手机+翻页,在Android手机上实现阅读器的翻页效果
  7. Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
  8. Vue底层判断标签的性能优化方法
  9. 【SICP练习】151 练习4.7
  10. JAVA编程中异常问题处理方式的区别和分析
  11. java网络编程 - TCP/IP四层模型
  12. WiFi之WL工具命令
  13. matlab定积分程序,[转载]Matlab数值积分程序集合【转载】
  14. 【流程发现算法概述】
  15. 手把手教你如何安装水晶易表——靠谱的安装教程
  16. CryENGINE 3 百度百科介绍
  17. DAOS 源码解析之 daos_pool
  18. java curator_关于Curator学习过程问题
  19. win10-gvim安装vim-airline后状态栏乱码,而且箭头显示不出来
  20. 在 Surface 或 Windows 10 中启用和禁用触摸屏

热门文章

  1. 【算法训练营学习笔记-Week01】数组和链表的比较以及LeetCode的做题反思
  2. Nvidia AGX Xavier GMSL 自动驾驶控制器设计方案
  3. LC Uniboot相比于常规的LC光纤连接器有什么特点?
  4. C语言 10_随机数
  5. STM32学习之:RAM的分配和占用
  6. uni-app卡片式轮播
  7. html 如何合并表格
  8. DXP_protel2004_原理图设计基础_新建和添加原理图库文件
  9. 0x80073712_win10系统更新提示错误代码“0x80073712”的解决方法
  10. 3GPP TS 23501-g51 中英文对照 | 4.4.7 MSISDN-less MO SMS Service