QUIC协议

QUIC协议参考网址 https://www.chromium.org/quic

既生瑜,何生亮?

QUIC的特性

  • 提供可靠传输
  • 减少连接建立的时间
  • 改善拥塞控制
  • 多路复用
  • 转发错误连接
  • 连接移植

TCP的特性

TCP的主要特性是提供面向连接的服务,数据传输前需要进行三次握手,利用重传与确认机制来保证数据的正确到达对端

UDP的特性

UDP的主要特性是面向无连接的服务,不需要确认对端是否存活,直接进行数据的发送,不能保证数据正确到达,因为不需要进行握手和确认,传输速度特别快

HTTP2的特性

  • HTTP2采用二进制格式传输数据,而HTTP1使用文本格式
  • HTTP2对头部采用HPACK进行数据压缩
  • Server Push:服务器主动把css和js推送给客户端
  • 多路复用:HTTP1.1里面也采用了连接复用,但是一个链路在一段时间内只能被一个请求占用(下一个请求要使用该链路必须等到上一个应答到来),但是HTTP2中解决了这个问题,可以使用多个请求同时使用该连接(一个请求发出后下一个请求可以接着发)
    支持优先级传输

QUIC的架构


我们可以看到QUIC是集大成者,它底层使用了UDP协议提高了数据传输的速度,同时它吸收了TCP的特性来提供可靠传输,容纳了HTTP2的一些特性

QUIC中的握手

QUIC既然要提供可靠服务,则需要向TCP协议一样进行握手来验证对端的存在性。下面是client与server握手的过程(从Client角度来看整个握手过程)

如果client没有访问过server则会发送CHLO[client hello]给server,此后进行一些安全方面的操作,然后重新访问server;如果client以前访问过server,则server会发送SHLO给client,则表示握手成功
握手过程的详细说明 https://docs.google.com/document/d/1g5nIXAIkN_Y-7XJW5K45IblHd_L2f5LTaDUDwvZ5L6g/edit#

QUIC中的拥塞控制

QUIC中的拥塞控制采用TCP Cubic拥塞控制算法

多路复用问题

在HTTP2中多个请求可以使用同一条TCP连接,但是会出现前向包拥塞问题,即第一请求在被发送的过程中出了包丢失,后续的HTTP请求将会被阻塞,直到包丢失问题被解决后(第一个HTTP请求被发送完毕),后续的HTTP请求才能被写到TCP流中。QUIC底层使用UDP协议天然的解决了这个问题,因为UDP协议不会拥塞。即假如第一HTTP请求中发生了包丢失,QUIC还是会继续发送后面的HTTP请求,直到某一时刻发现第一个HTTP请求中出现了包丢失问题,这时回头解决包丢失问题

连接移植

在TCP连接中,一个链接是由源IP+源端口+目的IP+目的端口来标识的,当其中的一个发生变化,则意味着是一条新的连接,这时需要进行三次握手重新建立连接
但是在QUIC中一个连接的由64bit标识码来标识的,这个标识码是由客户端随机产生。这就意味着你在上网时可以在wifi和4G中无缝切换,而不用重新去建立连接

参考博客

http://www.cnblogs.com/awiki/articles/5174306.html
http://www.oschina.net/news/77135/quic-google-protocol-web-platform-from-tcp-to-udp
https://github.com/devsisters/libquic

QUIC协议的更多相关文章

  1. Google将向IETF标准提交QUIC协议提案

    Google近期宣布,他们将向IETF提交实验性传输层网络协议QUIC的提案.此外,Google已经给出了QUIC协议优化页面加载时间的第一手数据. 自从2013年引入QUIC以来,Google一直在 ...

  2. 让互联网更快:新一代QUIC协议在腾讯的技术实践分享

    本文来自腾讯资深研发工程师罗成在InfoQ的技术分享. 1.前言 如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度. 如 ...

  3. QUIC协议的分析,性能测试以及在QQ会员实践

    WeTest 导读 你听过HTTPS.HTTP2.0.SPDY,但是这些应用层协议都是基于可靠的传输层协议TCP来实现的.那么,基于高效的UDP协议有没有一种相对可靠的应用层协议呢? Why QUIC ...

  4. QUIC协议原理分析(转)

    之前深入了解了一下HTTP1.1.2.0.SPDY等协议,发现HTTP层怎么优化,始终要面对TCP本身的问题.于是了解到了QUIC,这里分享一篇之前找到的有意义的文章. 原创地址:https://mp ...

  5. Google Quic协议

    0x01 Quic QUIC协议于2012年实现,2015年提交RFC草案,它是Goolge为了解决当今WEB应用常见的传输层和应用层问题而提出的,从分层结构上可以看做是TCP+TLS+HTTP2的集 ...

  6. caddy quic 协议试用&& 几个问题

    备注:    caddy  具体的安装就不介绍,quic 协议也不介绍了   1. 启用协议,比较简单 /usr/local/bin/caddy -log stdout -quic -conf=/et ...

  7. 一泡尿的时间,快速读懂QUIC协议

    1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...

  8. 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议

    1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...

  9. [译] QUIC Wire Layout Specification - Frame Types and Formats | QUIC协议标准中文翻译(4) 帧类型和格式

    欢迎访问我的个人网站获取更好的阅读排版体验: [译] QUIC Wire Layout Specification - Frame Types and Formats | QUIC协议标准中文翻译(4 ...

随机推荐

  1. WPF进阶之接口(1):IValueConverter,IMultiValueConverter

    看一个例子,FontFamily="Trebuchet MS, GlobalSansSerif.CompositeFont" .这样一条简单的语句,熟悉WPF的人在xaml中可能经 ...

  2. Android 网卡修改

    无线网卡配置可能的存储位置 1./data/nvram/APCFG/APRDEB/,配置文件是WIFI,需要使用HexEditor工具修改 2.etc/fireware/,文件名是nvram.txt( ...

  3. Http协议原理解析第一篇

    一:http的由来: OSI模型把网络通信分成七层:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,对于开发网络应用人员来说,一般把网络分成五层,这样比较容易理解.这五层为:物理层.数据链 ...

  4. pure

    Pure也是一款很出色的CSS框架,之前分享的Bootstrap是由Twitter出品的,而Pure是来自雅虎的.尽管从UI界面效果上来说,Pure没有Bootstrap那样精美,但Pure是纯CSS ...

  5. Jenkins publish over ssh 上传 文件夹 配置方式

    需要把编译后 目录下的 lib文件夹下的jar包都上传到服务器上 1.配置 2.完成截图 3.服务器截图 注意:  真实脚本 建议写 全路径 注意:多条命令时  添加 英文分号

  6. 电力项目七--js控制文字内容过长的显示和文本字数的显示

    当文本框中文字内容过长时,需要调整显示的样式 如上图所示的样式 对应的代码为: <div id="showInfomation" style="visibility ...

  7. typecho与wordpress

    相信玩博客的人对这两个程序会相当熟悉把. 有些人玩了很久WP之后又转向了typecho 之后又回到wp.举个例子typecho犹如一个美丽的裸体女人.wp就是一个穿着绫罗绸缎的女人. 当你看着裸体一天 ...

  8. 一百本英文原著之旅 ( 15 finished )

    记得去年毕业的时候,突然想看英文原著(小说.文学.技术 etc.)来提高自己的英文水平.并且那时候愣愣的有了个宏伟的目标 --> 一百本.  不过也就去年下半年断断续续的看了些页数在200左右的 ...

  9. 2017 Multi-University Training Contest - Team 1—HDU6035

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:一棵树有n个点,每个点有自己的颜色,任意两个不同的点可以组成一条路径.也就是说一共有n(n ...

  10. 【Python算法】归纳、递归、归简

    归简法(reduction) 指的是将某一问题转化成另一个问题,将一个未知问题归简成一个已解决的问题. 归纳法(induction) 首先要证明语句在某一基本情况下是成立的,然后证明他可以由一个对象推 ...