QUIC协议报文解析(三)

news2024/11/25 4:01:16

        在前面的两篇文字里我们简单介绍了QUIC的发展历史,优点以及QUIC协议的连接原理。本篇文章将会以具体的QUIC报文为例,详细介绍QUIC报文的结构以及各个字段的含义。

        早期QUIC版本众多,主要有谷歌家的gQUIC,以及IETF致力于将QUIC标准化,即IETF QUIC(iQUIC),还有Facebook家的mvfst。早期各家的QUIC都有自己定制的字段,但总体是大同小异。

        与包头格式固定的 TCP 不同,QUIC 有两种类型的包头。 建立连接的QUIC数据包需要包含的信息多,它使用长头格式。 一旦建立连接,只需要某些报头字段,后续数据包使用短报头格式以提高效率。

一:gQUIC早期Q043以及以下版本包头

gQUIC的Q043及以下的版本与Q044版本之后的公共包头是不同的与现在最新的公共包头是不同的

前8位是公共标志位,其中部分意义如下:

0x01

Packet是否包含QUIC Version

0x02

Packet是否是Public Reset Packets

0x0C的两比特

Connection ID的长度(0/8/32/64位)

0x30的两比特

Packet number的长度(8/16/32/48位)

        Connection ID:客户端产生的一个64位无符号整型,标识唯一的连接,可以与服务端协商Connection ID的长度。当客户端漫游,IP 4元组无法标识一个连接时,可使用Connection ID标识一个连接。当IP 4元组可以标识连接时,该字段可省略。

        Version:32位的版本号。当客户端提议的版本不支持时,服务器端可以设置版本标记,并提供一个可接受版本列表。

        Packet Number:包号。每个普通包(与特别的公共复位和版本协商包相反)由发送者分配包号。由某一端发送的首包包号应该为1,后续每个包的包号应比前一个大1。

        gQUIC的Q043及以下的版本没有后来的长包头短包头的说法,其包头的格式是统一的。只是后面为了兼容主流QUIC在Q044版本之后公共包头采用了长包头和短包头的形式。

二:QUIC长包头

        随着2021年5月 QUIC RFC 9000发布,并由RFC 9001、RFC 9002和RFC 8999支持(其中,RFC8999定义了QUIC协议版本无关的规范,RFC9001定义了QUIC与TLS的协议映射、RFC9002定义了QUIC协议的丢失恢复与拥塞控制)。这意味着QUIC Version 1已经正式标准化,并且QUIC部署将从使用临时草案版本转向新创建的Version 1。与此同时,有最新消息指出QUIC Version 1以一种新的互联网传输技术作为标准发布,可提高Web应用程序的性能、安全性和隐私性。

        随着QUIC标准化版本的宣布,目前Facebook、Akamai、Microsoft、Cloudflare、Ericsson、F5、Fastly和Google都已部署了QUIC和HTTP/3。至此QUIC进入到统一的时代。

        为什么要介绍上面的背景,因为在RFC9000出来之前QUIC的长包头和短包头不说在各个大厂之间,即使是同一个厂家比如Google,不同版本的QUIC包头的格式也是有差别的。这就没发展开了,下面我们看一下RFC9000的长包头。

 最明显的标志就是第一个字节的高位设置为 1。该字节中的所有其他位都是特定于版本的。另外对于Packet Type占两位,其取值如下:

Version:四个字节,包括一个 32 位版本字段。 RFC9000的Version是1,其实也可以理解这是QUIC标准化后的第一个版本

Destination Connection ID Length:目标连接 ID 字段的字节长度。 此长度编码为 8 位无符号整数。

Destination Connection ID:目标连接 ID 字段,长度在 0 到 160个字节之间。

Source Connection ID Length:源连接 ID 字段的字节长度。 此长度编码为 8 位无符号整数。

Source Connection ID:源连接 ID 字段,长度在 0 到 160个字节之间。

数据包的其余部分包含特定于版本的内容。

三:QUIC短包头

短包头的格式如下:

带有短包头的 QUIC 数据包的第一个字节的高位设置为 0。

带有短包头的 QUIC 数据包包括紧跟在第一个字节之后的目标连接 ID。 短包头不包括目标连接 ID 长度、源连接 ID 长度、源连接 ID 或版本字段。 目标连接 ID 的长度没有编码在具有短包头的数据包中,并且不受本规范的限制。

数据包的其余部分具有特定于版本的语义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1020542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之堆的结构与实现

目录 一、堆的概念及结构 1.1堆的概念 1.2堆的性质 1.3堆的结构 二、堆的实现 2.1堆向下调整算法(父亲与孩子做比较) 2.2堆的向上调整算法(孩子与父亲做比较) 2.3堆的创建(向下建堆) 2.4向下建堆的时…

26 WEB漏洞-XSS跨站之订单及Shell箱子反杀记

目录 xss平台及工具使用session与Cookie获取问题演示案例某营销订单系统XSS盲打_平台某Shell箱子系统XSS盲打_工具其他参考应用案例-后台权限维持工具Http/s数据包提交Postman使用 xss平台及工具使用 凡是有数据交互的地方,前端是接收数据的,后端是要把…

Android Kotlin 高阶详解

前言 本文主要讲述kotlin高阶相关的内容,如果对kotlin基础还不了解的, 可以参考文章Android Kotlin 基础详解_袁震的博客-CSDN博客 1,与Java的相互调用 1.1在kotlin中调用java代码 大多数的java代码都可以直接在kotlin中调用&#xff0c…

Spring Cloud Alibaba Nacos注册中心(单机)

文章目录 Spring Cloud Alibaba Nacos注册中心(单机)1. docker 安装 nacos(先别着急)2. 配置nacos持久化到mysql、2.1 properties 文件 3. java注册3.1 POM文件3.2 properties文件3.3 测试配置中心 4.注册中心4.1 配置文件4.2测试…

【八大经典排序算法】选择排序

【八大经典排序算法】选择排序 一、概述二、思路解读三、代码实现(升序)四、优化(升序) 一、概述 选择排序作为一种简单直观的排序算法,最早由美国计算机科学家 Donald Knuth 在1968年提出。 选择排序的思想是将数组…

小程序从无到有教学教程-- 01.重置华为云服务器Huawei Cloud EulerOS 2.0版本并且设置安全组

概述 专门拿了专栏来讲解,所以目录结构就比较简单了 文章目录 概述修改华为云操作系统选择Huawei Cloud EulerOS 2.0 镜像顺便配置华为安全组 修改华为云操作系统 这里选择华为最新的系统,不过也就2.0~ 选择Huawei Cloud EulerOS 2.0 镜像 这里记住密…

企业架构LNMP学习笔记61

Nginx作为tomcat的前段反向代理: 在实际业务环境中,用户是直接通过域名访问,基于协议一般是http、https等。默认tomcat运行在8080端口。一般会通过前端服务器反向代理到后端的tomcat的方式,来实现用户可以通过域名访问tomcat的we…

bat写的git命令大全(适合初学者)掌握命令行下的Git操作!

欢迎来到Git!无论你是一位Git初学者,这个在命令大全将帮助你在命令行下熟练运用Git,提高版本控制和团队协作的效率。从基本的仓库管理到分支操作,从提交修改到远程仓库同步,这个命令大全涵盖了Git的各种常用功能和技巧…

LeetCode-热题100-笔记-day31

105. 从前序与中序遍历序列构造二叉树https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历&#xff0c…

QT-day2

完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮…

【QT】day2

1.完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按…

孙哥Spring源码第23集

第23集 finishBeanFactoryInitialization处理过程 1、处理国际化,事件操作,onRresh()的操作,注册监听器。 2、finishBeanFactoryInitialization(beanFactory)核心目的 通过Spring的BeanFactory创建单例(非延迟)这些对…

mongodb 无法远程连接

在本机可以通过 mongo 命令进行连接,但是外部无法连接,排查以下两个方面: 一,检查防火墙是否未开放端口 如果不确定,可以先关闭防火墙再试 二,查看mongodb启动时绑定的ip 执行如下命令: nets…

织梦CMS_V5.7任意用户密码重置漏洞复现

一、漏洞说明 织梦内容管理系统(DeDeCMS)以其简单、实用、开源的特点而著名。作为国内最知名的PHP开源网站管理系统,它在多年的发展中取得了显著进步,无论在功能还是易用性方面都有长足的发展。该系统广泛应用于中小型企业门户网站…

Linux集群时间同步方法

参考:https://www.cnblogs.com/felixzh/p/10638399.html

Foxmail 备份旧数据导入新电脑

文章目录 前言方法参考 前言 如何转移Foxmail 邮箱中的邮件,以便转移电脑后也同样可以使用呢? 方法 找到Foxmail 安装目录找到存放账号的文件夹【Storage】 该文件夹下存放了邮箱账户的所有相关信息(账户配置,收件箱&#xff0…

[TI] [Textual Inversion] An image is worth an word

自己的理解: 根据几个图像,找出来一个关键字可以代表它们,然后我们可以再用这个关键字去生成新的东西。 提出关键字 1 Introduction word->token->embedding Textual Inversion过程 需要: ① a fixed, pre-trained text…

C语言的文件操作(炒详解)

⭐回顾回顾文件操作的相关细节⭐ 欢迎大家指正错误 📝在之前的学习中,不管增加数据,减少数据,当程序退出时,所有的数据都会销毁,等下次运行程序时,又要重新输入相关数据,如果一直像这…

升级OpenSSL并进行编译安装

Packaging (OpenSSL)组件存在安全漏洞的原因是由于当前爆出的Openssl漏洞。 这个漏洞可能会导致泄露隐私信息,并且涉及的机器和环境也有所不同,因此修复方案也会有所不同。 目前,一些服务器使用的Nginx是静态编译OpenSSL,直接将Op…