QUIC协议文档翻译——什么是QUIC
原文地址https://docs.google.com/document/d/1gY9-YNDNAB1eip-RTPbqphgySwSNSDHLq9D5Bty4FSU/edit
QUIC是一个谷歌提出的新的互联网协议。
QUIC解决出现在现在网络协议的一些传输层和应用层的问题,而且几乎不需要应用更改。QUIC和TCP+TLS+HTTP2十分相似,但是基于UDP实现。使用QUIC作为一个独立的协议可以做到一些别的协议做不到的创新,因为它们受到传统客户端和中间件的阻碍。
和TCP+TLS+HTTP2相比,QUIC的核心优势有以下几点:
- 连接建立延迟
- 提升拥塞控制
- 无需排头阻塞的多路复用
- 向前纠错
- 连接迁移
连接建立
简单来说,在发送有效负载前,和TCP+TLS的1~3rt相比,QUIC通常需要0rt。
当QUIC客户端第一次链接到服务端时,客户端必须执行1rt的握手来获取完成握手的所有必要信息。客户端发送一个CHLO,服务端返回一个带有客户端用来继续执行的拒信,包括源地址令牌和服务器证书。下次客户端发送CHLO时,可以使用上次连接缓存的证书来立刻返回一个加密的消息。
拥塞控制
QUIC有可插拔的拥塞控制,而且比TCP给拥塞控制提供更丰富的信息。这允许一个QUIC发送者识别重发的ACK和原始的ACK避免TCP的重发歧义问题。QUIC ACK还明确传输数据包发送和接收的延时,以及单调增加的序列号。这允许准确的rt计算。
最后,QUIC的ACK帧支持多达256NACK范围,因此QUIC比TCP(带SACK)在重新排序上更有弹性,而且能够在重新排序和丢失时在线路上保存更多字节。客户端和服务端都可以准确地知道对方哪个包收到了。
多路复用
基于TCP的HTTP2更大的一个问题是排头阻塞。应用视TCP连接为一个字节流。当一个TCP包丢失,HTTP2连接上没有数据流向前推进,直到包被重传而且被远端接受——甚至当这些数据流已经到达而且在缓存等待。
由于QUIC一开始就是为多路复用操作设计的,因此传输单个流数据丢失的数据报通常只影响该特定的流。每个流的帧可以立即被分发并且在应用推进。
向前纠错
为了在不等待重传情况下从丢包中恢复,QUIC可以用FEC包补充一组包。很像RAID-4,在FEC组里包含部分FEC包。如果组中的一个包丢失,则可以从FEC包和组中剩余的包恢复这个包。发送者可以决定是否发送FEC包来优化特殊的场景(例如,一个请求的开始和结束)。
连接迁移
QUIC连接被一个64位的连接ID识别,被客户端随机生成。相比之下,TCP连接被一个由源地址,源端口,目标地址,目标端口的4元组识别。这意味着如果一个客户端改变地址(例如,从WI-FI切到移动网络)或者端口(如果一个NAT丢失并且这个端口连接重新绑定),任何可用的TPC连接不再有效。当一个QUIC客户端改变IP地址,它可以在不打断执行中的请求的情况下从这个新的IP地址使用这个老的连接ID。
QUIC协议文档翻译——什么是QUIC的更多相关文章
- Google将向IETF标准提交QUIC协议提案
Google近期宣布,他们将向IETF提交实验性传输层网络协议QUIC的提案.此外,Google已经给出了QUIC协议优化页面加载时间的第一手数据. 自从2013年引入QUIC以来,Google一直在 ...
- 让互联网更快:新一代QUIC协议在腾讯的技术实践分享
本文来自腾讯资深研发工程师罗成在InfoQ的技术分享. 1.前言 如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度. 如 ...
- QUIC协议的分析,性能测试以及在QQ会员实践
WeTest 导读 你听过HTTPS.HTTP2.0.SPDY,但是这些应用层协议都是基于可靠的传输层协议TCP来实现的.那么,基于高效的UDP协议有没有一种相对可靠的应用层协议呢? Why QUIC ...
- QUIC协议原理分析(转)
之前深入了解了一下HTTP1.1.2.0.SPDY等协议,发现HTTP层怎么优化,始终要面对TCP本身的问题.于是了解到了QUIC,这里分享一篇之前找到的有意义的文章. 原创地址:https://mp ...
- Google Quic协议
0x01 Quic QUIC协议于2012年实现,2015年提交RFC草案,它是Goolge为了解决当今WEB应用常见的传输层和应用层问题而提出的,从分层结构上可以看做是TCP+TLS+HTTP2的集 ...
- QUIC协议
QUIC协议 QUIC协议参考网址 https://www.chromium.org/quic 既生瑜,何生亮? QUIC的特性 提供可靠传输 减少连接建立的时间 改善拥塞控制 多路复用 转发错误连接 ...
- caddy quic 协议试用&& 几个问题
备注: caddy 具体的安装就不介绍,quic 协议也不介绍了 1. 启用协议,比较简单 /usr/local/bin/caddy -log stdout -quic -conf=/et ...
- 一泡尿的时间,快速读懂QUIC协议
1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...
- 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议
1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...
随机推荐
- web项目启动链接mysql巨慢
说明:项目部署到测试服务器上,mysql部署在另一台服务器上,项目第一次启动之后登陆后台很慢,大概30s左右,经查发现第一次访问数据库的时候会通过DNS解析客户端机器域名,mysql还有DNS反向解析 ...
- Monkey patching
"A monkey patch is a way to extend or modify the run-time code of dynamic languages without alt ...
- :setting:`task_soft_time_limit` celery 异步任务 执行时间限制 内存限制
https://docs.celeryproject.org/en/stable/userguide/configuration.html?highlight=control_exchange#new ...
- 为了更好的多线程性能,在对象创建或者更新时,若数据大于2047字节则 Python 的 GIL 会被释放。 执行计算密集型任务如压缩或哈希时释放 GIL
hashlib - Secure hashes and message digests - Python 3.8.3 documentation https://docs.python.org/3.8 ...
- ETL优化(转载)
1.引言 数据仓库建设中的ETL(Extract, Transform, Load)是数据抽取.转换和装载到模型的过程,整个过程基本是通过控制用SQL语句编写的存储过程和函数的方式来实现对数据的直接操 ...
- spring boot 启动 开启注解 加载 bean
业务描述:创建一个cache类然后交给spring 管理. @Component @Scope("singleton") public class Cache { public C ...
- Python学习【第6篇】:集合的定义和基本方法
1.概念 (1)不同元素组成 例: s = {1,2,3,4,4,4,4,4,4}print(s)运行结果:{1, 2, 3, 4}因为是不同元素组成,因此去重了 (2)无序 例: s = {&quo ...
- Tomcat 核心组件 Connector
Connector是Tomcat的连接器,其主要任务是负责处理浏览器发送过来的请求,并创建一个Request和Response的对象用于和浏览器交换数据,然后产生一个线程用于处理请求,Connecto ...
- 1. Centos 7重置root密码
1.开机启动系统,不断按"↑"和"↓",在如下引导界面按"e",编辑引导项 2.按"↓"找到下图显示的代码 删除代码最后 ...
- UML——宏观总结
今天果断开始UML的学习,要不就要被12期赶超了.努力学习的效率 一.宏观导图把控 导图概要说明:RUP这块儿的内容相当于软件工程已经学过了,只不过这里换了个名词而已.面向对象,已经不再陌生,vb中早 ...