QUIC协议科普
本文介绍了QUIC协议的基本概念及其发展背景,并详细讲解了如何测试和验证QUIC协议的支持情况。此外,还探讨了不同浏览器对QUIC的支持状态以及沿线设备对QUIC流量的处理方式。 2025-8-11 10:44:21 Author: blog.nsfocus.net(查看原文) 阅读量:11 收藏

阅读: 7

标题: QUIC协议科普

创建: 2025-08-01 13:16

————————————————————————–

目录:

☆ QUIC协议基本概念
☆ 测试QUIC协议
1) quic.nginx.org
2) Chrome使用QUIC的大致流程
3) 若干支持QUIC的测试站点
☆ 检查DNS HTTPS RR
1) dig
2) nslookup
3) dns.google
☆ 检查目标服务器是否支持QUIC
1) http3check.net
2) domsignal.com
☆ 浏览器对QUIC的支持
1) Firefox
2) Chrome
2.1) Chrome的ZeroOmega扩展不能代理QUIC流量
3) Edge
☆ 从沿线设备看QUIC

————————————————————————–

☆ QUIC协议基本概念

QUIC是”Quick UDP Internet Connections”的缩写。QUIC协议最初由Google开发,后
由IETF于2021年5月标准化为RFC 9000。参看:

————————————————————————–
QUIC A UDP-Based Multiplexed and Secure Transport
https://www.rfc-editor.org/rfc/rfc9000
https://datatracker.ietf.org/doc/html/rfc9000

Using TLS to Secure QUIC
https://www.rfc-editor.org/rfc/rfc9001
————————————————————————–

QUIC地位类似于TLS,但QUIC的下层协议是UDP,相比之下TLS的下层协议是TCP。QUIC
主要用于支持HTTP/3。

QUIC在高延迟或丢包的网络中表现更好,但某些网络设备会阻止UDP流量,导致QUIC
不可用。若使用代理,因大多数代理不支持UDP,QUIC将不可用。

☆ 测试QUIC协议

1) quic.nginx.org

用浏览器访问如下URL,并点击Run

https://quic.nginx.org/quic.html

会图形化显示测试结果。缺省同时测试HTTP、QUIC,可以只测QUIC。

用浏览器以无痕模式访问如下URL

https://quic.nginx.org/

提前打开F12 Network面板,启用Protocol列,该列默认未启用。可同步Wireshark抓
包,过滤规则”udp port 443″。

在F12 Network中看到,浏览器先用HTTP/2发起请求,响应报文中有

alt-svc: h3=”:443″; ma=86400

h3表示HTTP/3,443是QUIC服务运行的端口,ma=86400表示该声明的有效期为86400秒
(1天)。浏览器收到此头部后,会尝试使用QUIC连接指定端口。

在Network中看到,前面几个请求Protocol列都是h2,后面开始出现h3。Wireshark中
已抓到443/UDP报文。

2) Chrome使用QUIC的大致流程

现在Chrome支持并默认启用QUIC。

当Chrome访问目标网站时,检查DNS HTTPS RR或响应报文Alt-Svc头部判断服务器是
否支持QUIC。若服务器未明确声明支持QUIC,Chrome将使用TLS。若服务器声明支持
QUIC,Chrome后续会尝试QUIC,同时尝试TLS。若QUIC连接更快且稳定,Chrome优先
使用QUIC(HTTP/3)。若TLS连接更快或QUIC连接失败,Chrome回退到HTTP/2或1.1。

Chrome会基于Alt-Svc头部的有效期缓存服务器的QUIC支持信息。若之前成功使用
QUIC连接到目标服务器,Chrome在后续请求中优先尝试QUIC。若QUIC连接多次失败,
Chrome暂时判定目标服务器不支持QUIC。

3) 若干支持QUIC的测试站点

www.google.com
quic.nginx.org
cloudflare-quic.com
http3.is

☆ 检查DNS HTTPS RR

以www.google.com为目标FQDN

1) dig

$ dig @8.8.8.8 www.google.com HTTPS +short
1 . alpn=”h2,h3″

$ dig @1.1.1.1 www.google.com HTTPS +noall +answer
www.google.com. 9240 IN HTTPS 1 . alpn=”h2,h3″

alpn=”h2,h3″表示服务器支持TLS(HTTP/2)和QUIC(HTTP/3)。若后面有”port=443″,
表示TLS在443/TCP、QUIC在443/UDP,这是默认值。

2) nslookup

$ nslookup -type=HTTPS www.google.com 8.8.8.8 | grep alpn
www.google.com rdata_65 = 1 . alpn=”h2,h3″

rdata_65表示DNS HTTPS RR,其DNS RR Type是65。

3) dns.google

https://dns.google/
https://dns.google/query?name=www.google.com&rr_type=HTTPS
https://dns.google/resolve?name=www.google.com&type=HTTPS

能看到”alpn=h2,h3″

☆ 检查目标服务器是否支持QUIC

可在F12 Network中查看Protocol列,可查询DNS HTTPS RR,可用Wireshark抓443/
UDP的包,还可用一些在线网站检查目标服务器是否支持QUIC。

1) http3check.net

https://http3check.net/
https://http3check.net/?host=www.google.com

若目标服务器支持QUIC,会看到绿色字体显示:

QUIC is supported
HTTP/3 is supported

HTTP Header中有:

alt-svc: h3=”:443″; ma=2592000,h3-29=”:443″; ma=2592000

2) domsignal.com

https://domsignal.com/http3-test

输入目标FQDN,点击”Check HTTP/3″。若目标服务器支持QUIC,会看到

HTTP/3 is enabled. It supports the following protocol version.

domsignal.com判定quic.nginx.org不支持QUIC,而http3check.net能正确判定
quic.nginx.org。鉴于此,应优先使用http3check.net。

☆ 浏览器对QUIC的支持

1) Firefox

about:config
network.http.http3.enabled

2) Chrome

————————————————————————–
chrome://flags/
Experimental QUIC protocol
Default
Enabled
Disabled

chrome://flags/#enable-quic
————————————————————————–

此处说明如下

Enable experimental QUIC protocol support. – Mac, Windows, Linux, ChromeOS, Android

默认相当于启用状态

2.1) Chrome的ZeroOmega扩展不能代理QUIC流量

Chrome的ZeroOmega扩展不能代理QUIC流量,它不支持UDP,只支持TCP,只支持HTTP、
SOCKS。

启用ZeroOmega扩展,访问quic.nginx.org,F12 Network Protocol只看到h2,再无
h3;尽管第一个响应报文中有Alt-Svc头部,Chrome后续并未尝试h3。Wireshark同步
抓取443/UDP,无QUIC通信发生。初步判断,启用ZeroOmega扩展后,Chrome不存在
QUIC流量泄露,相当于强制TLS。

3) Edge

————————————————————————–
edge://flags/
Experimental QUIC protocol
Default
Enabled
Disabled

edge://flags/#enable-quic
————————————————————————–

此处说明如下

Enable experimental QUIC protocol support. – Mac, Windows, Linux, Android

默认相当于启用状态

☆ 从沿线设备看QUIC

发往443/UDP的QUIC Client Initial包,大致包裹结构如下

IP
UDP
QUIC
TLS Client Hello
明文SNI (比如google.com)

沿线设备可通过解密看到明文SNI。


文章来源: https://blog.nsfocus.net/quic%e5%8d%8f%e8%ae%ae%e7%a7%91%e6%99%ae/
如有侵权请联系:admin#unsafe.sh