Quic ☀

here for website

  • Author: Google
  • udp, protocol


QUIC(Quick UDP Internet Connections)是一种新的互联网传输协议,由Google开发。 QUIC解决了现代Web应用程序遇到的许多传输层和应用层问题,同时几乎不需要应用程序编写者进行任何更改。

QUIC与TCP + TLS + HTTP2非常相似,但是在 UDP 之上实现。将QUIC作为一个独立的协议,可以实现现有协议无法实现的创新,因为现有协议受到传统客户端和中间盒的阻碍。

QUIC优于TCP + TLS + HTTP2的主要优势包括:

●连接建立延迟

●改善拥塞控制

●无需线头阻塞的多路复用

●前向纠错

●连接迁移

连接建立

简而言之,与用于TCP + TLS的1-3次往返相比,QUIC握手在发送有效载荷之前经常需要 zero roundtrip(不需要往返)

第一次QUIC client和一个server相连的时候,client必须实行1个roundtrip handshake 为了获得更多必须的信息来完成handshake.用户发送过来一个empty的(client hello)CHLO,而server端发送过来一个rejection(REJ)以及必要信息。下次再发送CHLO的时候,就会使用之前连接中的cached credentials来发送加密的请求。

拥塞控制

QUIC 使用的是可插播的拥塞控制,并且相比TCP提供丰富的信息。例如谷歌的QUIC实现使用的是reimplementation of TCP Cubic

richer 信息的一个例子是每个包裹,原创或者重传。都携带新的sequence号,这允许QUIC发送方来分辨ACK,而且可以精确计算rtt时间。

多路径问题

一个最大的问题HTTP2在TCP上的是head-of-lines阻塞问题。在TCP之上的HTTP2的一个更大问题是线头阻塞问题。应用程序将TCP连接视为字节流。当TCP数据包丢失时,该HTTP2连接上的任何流都不能前进,直到远端重新发送和接收数据包 - 即使具有这些数据流的数据包已经到达并且正在缓冲区中等待。

由于QUIC是从头开始设计用于多路复用操作的,因此丢失的携带单个流数据的数据包通常仅影响该特定流。可以在到达时立即将每个流帧分派到该流,因此可以继续重新组装没有丢失的流并在应用中前进。

前向纠错

为了从丢包中恢复,QUIC采用了FEC技术,更像RAID-4技术,会从FEC包裹中恢复,sender会决定是否发送FEC包裹来优化特殊的场景

连接整个

QUIC 的连接是64-bit connection ID, TCP 连接是4-tuple source address source port destination port 以及destination address. 这意味着如果改变了IP地址或者port,TCP连接会不再合理,而QUIC的client当它change IP address 的时候,他会使用旧的连接ID, 继续从新的IP地址,而不会有interrupt.

UDT协议

基于UDP的数据传输协议(英语:UDP-based Data Transfer Protocol,缩写:UDT)是一种互联网数据传输协议。UDT的主要目的是支持 高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差。

UDT由开源软件作者谷云洪在美国伊利诺伊大学芝加哥分校攻读博士期间开发,并由他在毕业后继续维护和升级。UDT的开源软件可以在SourceForge上获取。