前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Quic 协议详解-开篇简介

Quic 协议详解-开篇简介

原创
作者头像
榴莲其实还可以
修改2019-01-21 19:28:46
7.1K0
修改2019-01-21 19:28:46
举报

前言

Quic如此牛逼,一篇肯定是不能做到详解的,所以后面将会写几篇来对quic进行一个阐述。这些文章都是自己对https://www.chromium.org/quic官网的翻译与理解。

1,什么是quic

quic(Quick UDP Internet Connection) 是基于udp 的 多路复用流传输协议,由谷歌开发。相比于传统TCP,它减少了传输延时。它是实现在udp 上的 TCP+TLS+HTTP/2。

2,quic相比于TCP+TLS+HTTP/2有哪些特性

a) 极大的减少了建连时间

b)改进的拥塞控制算法

c) 避免队头阻塞的多路复用

d)前馈错误纠正

e)连接迁移

3,连接建立

Quic 的握手差不多都是0 rtt 的,而 tcp + tls 需要 1~3个rtt。 对于client 与 server 的第一次建立连接,是需要1 rtt 去获取相关信息来完成握手的。 client 发送一个空的 hello 包(CHLO), server发送一个REJ包,在这个REJ包中,包含有client所需要的一些信息。包括token 和 server 的证书。下次client再发送 CHLO包的时候,可以使用缓存的token与证书发送加密的请求给server

4,拥塞控制

Quic使用可插拔的拥塞控制,相较于TCP,它能提供更丰富的拥塞控制信息。比如对于每一个包,不管是原始包还是重传包,都带有一个新的序列号(seq),这使得Quic能够区分ACK是重传包还是原始包,从而避免了TCP重传模糊的问题。Quic同时还带有收到数据包与发出ACK之间的时延信息。这些信息能够帮助更精确的计算rtt。此外,Quic的ACK Frame 支持256个NACK 区间,相比于TCP的SACK 更弹性化,更丰富的信息会让client和server 哪些包已经被对方收到。

5,多路复用

基于TCP的HTTP2最大的一个问题就是对头阻塞。应用程序视TCP连接为一个字节流,当一个TCP包丢失的时候,HTTP2上的任意一条字节流都不能被后续处理,除非收到重传包。由于Quic 被设计用于多路复用,所以某条流上丢失一个包,只会影响这一条流,其它未丢失数据的流可以继续进行后续的处理。

5,前馈错误纠正(FEC)

为了恢复丢失的包,而不需要等待重传。Quic会给一组包补充一个FEC包,该FEC包 包含了 这一组包的奇偶性信息,如果这一组包中的某个包丢失了,该包的内容可以通过FEC包和其它的包进行恢复。发送发(sender)可以决定是否发送FEC包来进行一些特殊场景的优化。

6, 连接迁移

Quic 的连接标识是一个 64bit 的 connection ID, 由client 随机产生。而TCP连接由四元组标识(源ip,源port, 目的ip, 目的port),这意味着,如果client 的ip(比如wifi断了) 或者 port 变化了,任何活跃的TCP连接都不在有效。而当一个Quic client 的ip 变化的时候,它可以继续使用原来的connection ID 而不会中断连接。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1,什么是quic
  • 2,quic相比于TCP+TLS+HTTP/2有哪些特性
  • 3,连接建立
  • 4,拥塞控制
  • 5,前馈错误纠正(FEC)
  • 6, 连接迁移
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com