quic协议go语言 quit协议( 五 )


这里列出几个主要的矛盾 。
1、协议历史悠久导致中间设备僵化 。
2、依赖于操作系统的实现导致协议本身僵化 。
3、建立连接的握手延迟大 。
4、队头阻塞 。
QUIC孕育而生,其抛开了TCP直接采用UDP,如一些拥塞算法,可靠性保证机制,不再依赖操作系统内核,而是可以自定义 。
Quic 相比现在广泛应用的 http2+tcp+tls 协议有如下优势:
1、减少了 TCP 三次握手及 TLS 握手时间 。
2、改进的拥塞控制 。
3、避免队头阻塞的多路复用 。
4、连接迁移 。
5、前向冗余纠错 。
有些防火墙只允许通过 80 和 443,不放通其他端口 。NAT 网关在转换网络地址时重写传输层的头部,有可能导致双方无法使用新的传输格式 。因为通信协议栈都是固化到操作系统中的,只能通过内核参数进行调整,但是这样的调整极其有限 , 如果想要新加协议,只能重新编译内核 。而现实是 , 可能还有一些Centos5 还作为某些古董公司的线上服务器 。另外,windows xp 可能还是某些事业单位的办公电脑上装的操作系统,尽管xp的时代已经过去20年了 。另外TCP Fast Open 也在2013年就提出了,但是windows操作系统也有些不支持 。
知道一个首次https网站的访问都要有哪些步骤吗?dns解析需要1个RTT,TCP三次握手,HTTP 302 跳转 HTTPS又需要RTT,TCP重新握手 。TLS握手再消耗2个 。解析CA的DNS(因为浏览器获取到证书后,有可能需要发起 OCSP 或者 CRL 请求,查询证书状态)再对CA进行TCP握手,OCSP响应 。密钥协商又是RTT 。当然这种情况是最极端的,大部分情况下不是所有流程都需要走一遍的 。(参考大型网站的 HTTPS 实践(二)-- HTTPS 对性能的影响 )
基于以上的原因,QUIC选择了UDP 。没有了三次握手 , 在应用层面完成了传输的可靠性,拥塞控制还有TLS的安全性 。只要应用软件的客户端和服务端支持就行,绕开了操作系统内核版本这个硬骨头 。
在HTTPS over TCP+TLS的时代 。HTTPS需要3个RTT , 在session 复用的情况下是2个RTT 。而QUIC做到了1RTT和会话复用的0RTT 。
QUIC的TLS只能使用TLS1.3 , 这就可以做到PSK的0RTT 。
TCP 的拥塞控制实际上包含了四个算法:慢启动,拥塞避免 , 快速重传,快速恢复 。其中TCP中拥塞控制是被编译进内核中的,如果想要更改就需要改变内核参数,但是想要对已有的拥塞控制算法进行更改就需要重新编译内核,Linux 4.9 中引入了基于时延的拥塞控制算法 BBR,这打破了以往是靠丢包驱动的拥塞控制算法 , 但是想要在TCP中使用,就必须升级内核至4.9以上 。
QUIC 协议当前默认使用了 TCP 协议的 Cubic 拥塞控制算法 [6],同时也支持 CubicBytes, Reno, RenoBytes, BBR, PCC 等拥塞控制算法 。
QUIC和TCP的对比
其中α 从 0到 1(RFC 推荐 0.9),越大越平滑
如 UBOUND为1分钟,LBOUND为 1 秒钟,β从 1.3 到 2 之间
对于QUIC
参考: 科普:QUIC协议原理分析 罗成
Google翻译能用吗QUIC是什么?在Google新版的Chrome浏览器中,支持QUIC协议,在 Chrome 浏览器中打开“实验性功能”页面(chrome://flags/),启用“实验性 QUIC 协议”和“经由实验性 QUIC 协议发出的 HTTPS 请求”,重启浏览器后可以正常登陆 Google 相关服务(被DNS污染的除外) 。对于被DNS污染的Google服务,还需要设置Hosts的IP,然后通过HTTPS才能访问 。
QUIC的主要特点包括,具有SPDY(SPDY是谷歌研制的提升HTTP速度的协议,是HTTP/2.0的基?。┧械挠诺悖?-RTT连接;减少丢包;前向纠错,减少重传时延;自适应拥塞控制,减少重新连接;相当于TLS加密 。

推荐阅读