秋来冬风的博客

测量http2和http3的速度差异

目录

背景

http3是http协议的最新版本,进行了一项重大改进,传输层改用QUIC(快速UDP网络连接)协议,以提高性能,特别是在高丢包网络的性能。

http3在2022年正式标准化,目前主流编程语言标准库尚未支持http3。

由于Go语言有开源库github.com/quic-go/quic-go/http3,可以方便的搭建http3客户端和服务端,便于测量http2和http3的速度差异。

测量方法

先以每秒不超过10次的速度,发送200个http2请求,然后以每秒不超过10次的速度,发送200个http3请求,测量请求发送到响应读取完毕的平均用时。

因为TLS1.3有0-RTT重连机制,且QUIC强制使用TLS1.3,所以虽然http2允许非加密传输,但只测量经过TLS1.3加密的http2。

同时因此有首次连接和重新连接理论上差了1个RTT的区别。

RTT是往返时间,表示数据从数据在客户端和服务端来一次去一次的用时,它的用时关乎网页加载速度快慢。

为了尽可能展现出http2和http3本身的差异,所以采用上述测量方法,主要测量重新连接的速度。

测量的工具源代码在 benchhttp2and3

测量准备

测量使用的服务器硬件位于美国,距离大约12000公里,按小时计费,1小时四舍五入约3分钱人民币,使用ipv6,夜间从中国访问RTT大约在240-260ms。

同时在本机部署一样的服务器软件。

使用AdGuardHome来修改dns记录,从而修改访问vps还是本机。

测量结果

在本机网络上,http2用时3ms多,http3用时1ms多,重新连接情况,大约减少了50%的用时。

当按真实情况,访问在远处服务器的网站时,晚上http2用时约300ms多一点,http3用时约270ms多一点,白天http2用时330ms多一点,http3用时300ms多一点。

测试结果看,http3比http2在真实访问网站的情况减少了约10%的用时。

后续

可以修改测量方法,测量首次连接http2和http3的速度是否真的差了有1RTT。

Tags: