QUIC 协议简介

Wesley13
• 阅读 356

QUIC的全称是 Quick UDP Internet Connections protocol,由 Google 设计提出,目前由 IETF 工作组推动进展,其设计的目标是替代 TCP 成为 HTTP/3 的数据传输层协议。熹乐科技在物联网(IoT)和边缘计算(Edge Computing)场景也一直在打造底层基于 QUIC 通讯协议的边缘计算微服务框架YoMo,长时间关注 QUIC 协议的发展,本文章简单介绍了 QUIC 协议的特点和术语。

在线社区:discord/quic

维护者:YoMo

QUIC 协议简介

QUIC 是一种多路复用和安全的通用传输协议,它提供:

  • 流(stream)多路复用
  • 流(stream)和连接(connection)级别的流量控制
  • 建立低延迟连接(1-RTT 或者 0-RTT)
  • 连接迁移(Connection migration)和弹性 NAT 重绑定
  • 经过身份验证和加密的头部(header) 和有效载荷(payload)

QUIC 建立了客户端(client)和服务端(server)之间有状态的交互连接。连接的主要目的是通过应用协议支持结构化的数据交换。

应用协议通过 QUIC 连接的流(streams)交换信息,流(stream)是有序序列的字节(bytes)。可以创建两种类型的流:双向流(bidirectional streams),允许客户端和服务端互相发送数据。单向流(unidirectional streams),允许单个端点(endpoint)发送数据。一个基于信用的方案(credit-based scheme)用于限制流的创建并限制可发送的数据量。

QUIC 连接中的流(streams)是互相独立的,如果某个流(stream)出现丢包,不会影响连接中的其他正常传输的流。这样可以避免 TCP 协议中的队头阻塞(Head-of-Line blocking)。

QUIC 协议简介

QUIC 握手(handshake)合并了加密和传输参数的协商,只需要 1-RTT 即可可以完成握手,提升了建立连接到交换应用程序数据的速度。第二次连接时,可以通过第一次连接时获取到的预共享密钥(pre-shared secret)立即发送数据(0-RTT)。

QUIC 协议简介

QUIC 连接并不是严格地绑定到一个单一的网络路径(IP:Port)。连接迁移(Connection migration)使用连接 ID 来允许连接转移到新的网络路径。比如手机网络从蜂窝网络(cellular)切换到 WIFI 时,IP地址改变了,QUIC 可以通过连接迁移(connection migration)来避免连接中断。

QUIC 使用帧(frames)进行端到端的通信。一个或多个帧(frame)被组装成一个 QUIC 包(packet)。QUIC对所有数据包进行身份验证,并尽可能加密,增加了端到端传输的安全性。QUIC 数据包用 UDP 数据报(datagrams)进行传输,而不是创建一个全新的传输层协议,这是因为现有的网络设备和系统支持 TCP 和 UDP 协议,其中 TCP 有队头阻塞等缺点,所以 UDP 成为 QUIC 协议的选择,这可以更快的在现有系统和网络中部署。QUIC 是在用户空间(user space)中,相比 TCP(kernel space,操作系统内核)可以更快的迭代更新。

QUIC 协议简介

连接建立之后,可以通过多个选项关闭连接:应用程序可以管理正常(graceful)关闭、端点(endpoints)可以协商超时时间、错误可以导致立即断开连接、无状态(stateless机制提供了在一个端点失去状态后终止连接的功能。

QUIC 协议常见的术语:

数据包(Packet):QUIC 协议中一个完整可处理的单元,可以封装在 UDP 数据报(datagram)中。多个 QUIC 数据包(packets)可以封装在一个 UDP 数据报(datagram)中。

帧(Frame):QUIC 数据包(packet)的有效载荷(payload)。

端点(Endpoint):在 QUIC 连接中生成、接收和处理 QUIC 数据包(packets)。QUIC 中只有两种端点(endpoints):客户端(client)和服务端(server)。

客户端(Client): 创建 QUIC 连接的端点。

服务端(Server): 接收 QUIC 连接的端点。

地址(Address):未经限定使用时,表示网络路径一端的 IP 版本、IP 地址和 UDP 端口号的元组。

连接 ID(Connection ID): 用于标识端点 QUIC 连接的一种标识符。每个端点(endpoint)为其对端(peer)选择一个或多个连接 ID,将其包含在发送到该端点的数据包(packets)中。这个值对 peer 不透明。

流(Stream):QUIC 连接中有序字节的单向(unidirectional)或双向(bidirectional)通道。一个 QUIC 连接可以同时携带多个流。

应用程序(Application):使用 QUIC 发送或者接收数据的实体。

参考资料

  1. https://link.zhihu.com/?target=https%3A//quicwg.org/base-drafts/draft-ietf-quic-transport.htmlic-transport.html
  2. HTTP/3 Deep Dive | Ably Realtime

YoMo 是一套开源的实时边缘计算网关、开发框架和微服务平台,通讯层基于 QUIC 协议,更好的释放了 5G 等下一代低时延网络的价值。为流式处理(Streaming Computing)设计的编解码器 Y3 能大幅提升计算服务的吞吐量;基于插件的开发模式,5分钟即可上线您的物联网实时边缘计算处理系统。YoMo 目前已在工业互联网领域被部署应用。

官网: https://yomo.run

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
2个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
2个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
2个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
2个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
Wesley13 Wesley13
1年前
QUIC 开源实现列表(持续更新)
QUIC的全称是QuickUDPInternetConnectionsprotocol,由Google设计提出,目前由IETF工作组推动进展,其设计的目标是替代TCP成为HTTP/3的数据传输层协议。熹乐科技在物联网(IoT)和边缘计算(EdgeComputing)场景也一直在打造底层基于QUIC通讯协议的边缘计算微服
Wesley13 Wesley13
1年前
QUIC协议初探
1、QUIC介绍(1)QUIC(QuickUDPInternetConnections)协议是一种全新的基于UDP的web开发协议。可以用一个公式大致概括:TCPTLSHTTP2UDPQUICHTTP2’sAPI从公式可看出:QUIC协议虽然是基于UDP,但它不但具有TCP的可靠
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
5个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为