长春建网站公司,百度网站打不开,用.net做网站好 还是用php,物流网站建设的小结在前面的两篇文字里我们简单介绍了QUIC的发展历史#xff0c;优点以及QUIC协议的连接原理。本篇文章将会以具体的QUIC报文为例#xff0c;详细介绍QUIC报文的结构以及各个字段的含义。 早期QUIC版本众多#xff0c;主要有谷歌家的gQUIC#xff0c;以及IETF致力于将QUIC标准… 在前面的两篇文字里我们简单介绍了QUIC的发展历史优点以及QUIC协议的连接原理。本篇文章将会以具体的QUIC报文为例详细介绍QUIC报文的结构以及各个字段的含义。 早期QUIC版本众多主要有谷歌家的gQUIC以及IETF致力于将QUIC标准化即IETF QUICiQUIC还有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元组可以标识连接时该字段可省略。 Version32位的版本号。当客户端提议的版本不支持时服务器端可以设置版本标记并提供一个可接受版本列表。 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 的长度没有编码在具有短包头的数据包中并且不受本规范的限制。
数据包的其余部分具有特定于版本的语义