QUIC 协议简介

Wesley13
• 阅读 550

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
QUIC 开源实现列表(持续更新)
QUIC的全称是QuickUDPInternetConnectionsprotocol,由Google设计提出,目前由IETF工作组推动进展,其设计的目标是替代TCP成为HTTP/3的数据传输层协议。熹乐科技在物联网(IoT)和边缘计算(EdgeComputing)场景也一直在打造底层基于QUIC通讯协议的边缘计算微服
Stella981 Stella981
2年前
QUIC Weekly 每周一草(20201125期)
关于QUIC协议的论文、IETF进展、博客、视频等等QUIC的全称是QuickUDPInternetConnectionsprotocol,由Google设计提出,目前由IETF工作组推动进展。其设计的目标是替代TCP成为HTTP/3的数据传输层协议。熹乐科技在物联网(IoT)和边缘计算(EdgeComputing)场
Stella981 Stella981
2年前
QUIC Weekly 每周一草(20201111期)
关于QUIC协议的论文、IETF进展、博客、视频等等QUIC的全称是QuickUDPInternetConnectionsprotocol,由Google设计提出,目前由IETF工作组推动进展。其设计的目标是替代TCP成为HTTP/3的数据传输层协议。熹乐科技在物联网(IoT)和边缘计算(EdgeComputing)场
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
QUIC Weekly 每周一草(20201104期)
关于QUIC协议的论文、IETF进展、博客、视频等等QUIC 的全称是QuickUDPInternetConnectionsprotocol,由Google设计提出,目前由IETF工作组推动进展。其设计的目标是替代TCP成为HTTP/3的数据传输层协议。熹乐科技在物联网(IoT)和边缘计算(EdgeComputing
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这