测量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。