searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

QUIC协议0RTT原理介绍

2023-09-25 07:32:55
67
0

quic原理

1、quic优点

1)建联延迟低,基于UDP协议,低延迟建联1RTT(首次)或者0RTT,对比于HTTPS需要3RTT(TCP握手1.5RTT+TLS握手1.5RTT),在首包指标方面优势非常大

2)多路复用,类似于HTTP2的多路复用,但因为基于UDP协议,不存在队头阻塞问题,会比HTTP2效果更好

2、quic建联原理(怎么实现1RTT和0RTT)

所用算法:DH 算法,大概意思是,通讯双方可以用自己的私钥和对方的公钥算出密钥K,且是一样的,所以只要知道对方的公钥就能完成加密建联

建联过程:

0. server 生成一个质数 p和一个整数 g,其中 g是 p 的一个生成元,同时随机生成一个数Ks_pri 作为私钥,并通过g、p、Ks_pri计算出公钥Ks_pub,将 {g、p、Ks_pub} 三元组打包成 config,等待 client 连接

1. client 首次发起连接,简单发送 client hello给 server

2. server 将已经生成好的config 返回给 client

3. client 随机生成一个数 Kc_pri作为自己的私钥,并根据config中的 p 和 g计算出公钥得出Kc_pub

4. client 计算通信使用的密钥 K=算法(Kc_pri,Ks_pub})

5. client 用 K加密需要发送的业务数据,并带上自己的公钥Kc_pub 一起发送给 server

6. server 计算 K=算法(Ks_pri ,Kc_pub),根据笛福赫尔曼密钥交换的原理可以证明两端计算的 K是一样的

首次建联是1、2、3步(从第4步开始,客户端已经使用密钥加密传数据了),所以只花费1个RTT

第2次建联,因为client端已经保存了config配置,所以可以直接从第3步开始,所以建联花费0RTT(就是不需要建联了)

quic测试

1、测试工具

quic_client 是google的quiche库中的测试工具

常用选项介绍

--disable_port_changes : 禁止切换端口,可以用于测试链接迁移

--drop_response_body : 丢弃响应体

--host : 指定要连接的IP或者主机名

--num_requests : 发送的请求数量

--one_connection_per_request : 每个请求完成后关闭连接,可以用来测试 0-RTT

--port : 指定连接的目的端口

--quic_version : 指定quic版本 (Q043、Q046、Q050、H3-29、H3),一般alt-svc响应头会带服务端支持的quic版本

 

2、常用测试方法

1)quic版本支持测试

通过--quic_version参数,测试quic版本,gquic版本有:Q043、Q046、Q050,iquic版本有h3、h3-29,,一般alt-svc响应头会带服务端支持的quic版本

quic_client --drop_response_body  --host=125.64.6.52  --port=443 --num_requests=1 --quic_version=h3  "url"

2)0RTT测试

添加 --one_connection_per_request 参数,发送两个请求(--num_requests=2),两个请求都成功,则测试成功。

quic_client --drop_response_body  --host=125.64.6.52  --port=443 --num_requests=2 --quic_version=h3  --one_connection_per_request "url"

3)连接迁移功能

修改请求数量 --num_requests=2 , 两个请求都成功,则支持连接迁移。

quic_client --drop_response_body --host=125.64.6.52 --port=443 --num_requests=2 --quic_version=h3  "url"

0条评论
0 / 1000
Will
4文章数
2粉丝数
Will
4 文章 | 2 粉丝
Will
4文章数
2粉丝数
Will
4 文章 | 2 粉丝
原创

QUIC协议0RTT原理介绍

2023-09-25 07:32:55
67
0

quic原理

1、quic优点

1)建联延迟低,基于UDP协议,低延迟建联1RTT(首次)或者0RTT,对比于HTTPS需要3RTT(TCP握手1.5RTT+TLS握手1.5RTT),在首包指标方面优势非常大

2)多路复用,类似于HTTP2的多路复用,但因为基于UDP协议,不存在队头阻塞问题,会比HTTP2效果更好

2、quic建联原理(怎么实现1RTT和0RTT)

所用算法:DH 算法,大概意思是,通讯双方可以用自己的私钥和对方的公钥算出密钥K,且是一样的,所以只要知道对方的公钥就能完成加密建联

建联过程:

0. server 生成一个质数 p和一个整数 g,其中 g是 p 的一个生成元,同时随机生成一个数Ks_pri 作为私钥,并通过g、p、Ks_pri计算出公钥Ks_pub,将 {g、p、Ks_pub} 三元组打包成 config,等待 client 连接

1. client 首次发起连接,简单发送 client hello给 server

2. server 将已经生成好的config 返回给 client

3. client 随机生成一个数 Kc_pri作为自己的私钥,并根据config中的 p 和 g计算出公钥得出Kc_pub

4. client 计算通信使用的密钥 K=算法(Kc_pri,Ks_pub})

5. client 用 K加密需要发送的业务数据,并带上自己的公钥Kc_pub 一起发送给 server

6. server 计算 K=算法(Ks_pri ,Kc_pub),根据笛福赫尔曼密钥交换的原理可以证明两端计算的 K是一样的

首次建联是1、2、3步(从第4步开始,客户端已经使用密钥加密传数据了),所以只花费1个RTT

第2次建联,因为client端已经保存了config配置,所以可以直接从第3步开始,所以建联花费0RTT(就是不需要建联了)

quic测试

1、测试工具

quic_client 是google的quiche库中的测试工具

常用选项介绍

--disable_port_changes : 禁止切换端口,可以用于测试链接迁移

--drop_response_body : 丢弃响应体

--host : 指定要连接的IP或者主机名

--num_requests : 发送的请求数量

--one_connection_per_request : 每个请求完成后关闭连接,可以用来测试 0-RTT

--port : 指定连接的目的端口

--quic_version : 指定quic版本 (Q043、Q046、Q050、H3-29、H3),一般alt-svc响应头会带服务端支持的quic版本

 

2、常用测试方法

1)quic版本支持测试

通过--quic_version参数,测试quic版本,gquic版本有:Q043、Q046、Q050,iquic版本有h3、h3-29,,一般alt-svc响应头会带服务端支持的quic版本

quic_client --drop_response_body  --host=125.64.6.52  --port=443 --num_requests=1 --quic_version=h3  "url"

2)0RTT测试

添加 --one_connection_per_request 参数,发送两个请求(--num_requests=2),两个请求都成功,则测试成功。

quic_client --drop_response_body  --host=125.64.6.52  --port=443 --num_requests=2 --quic_version=h3  --one_connection_per_request "url"

3)连接迁移功能

修改请求数量 --num_requests=2 , 两个请求都成功,则支持连接迁移。

quic_client --drop_response_body --host=125.64.6.52 --port=443 --num_requests=2 --quic_version=h3  "url"

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0