QUIC 观测入门:为什么 UDP/443 让网络测量更复杂
从 QUIC、HTTP/3、UDP/443 和被动观测出发,解释现代应用链路为什么不能只靠传统 TCP 测试。
QUIC 改变了测量方式
过去分析网站链路,TCP 握手、TLS 握手、SNI、连接复用都比较容易分层观察。QUIC 把传输和加密更紧密地结合在 UDP/443 上,HTTP/3 又进一步改变了浏览器和 CDN 的行为。
结果是:传统 TCP ping、三次握手耗时和 TLS 指标,不能完整代表用户体验。
国外研究为什么关注 QUIC backscatter
APNIC 关于 QUIC backscatter 的文章展示了一个有意思的方向:即使不主动探测目标,仅观察无意到达的 QUIC 流量,也能推断大型平台的部署方式。这说明 QUIC 已经足够普及,也说明传统“只看 TCP”的观测方式会漏掉越来越多信息。
对 VPS 和网站运营者来说,QUIC 的问题更直接:很多 CDN 默认支持 HTTP/3,浏览器也会自动尝试。你以为用户在走 TCP/443,实际可能已经走 UDP/443。如果机房或防火墙对 UDP 策略很差,网站体验会出现难以解释的波动。
国外运维讨论里常见的建议是:HTTP/3 应该被单独监控。不要把 HTTPS 可用性等同于 HTTP/3 可用性。
防火墙和安全组检查
开启 HTTP/3 前,检查:
- 云安全组是否允许 UDP/443。
- 主机防火墙是否允许 UDP/443。
- 反向代理是否支持 HTTP/3。
- CDN 是否已经向客户端发布 Alt-Svc。
- 监控是否能区分 HTTP/2 和 HTTP/3。
Nginx、Caddy、Cloudflare、Fastly 等方案的默认行为不完全一致。尤其是通过 CDN 开启 HTTP/3 时,源站可能仍是 HTTP/2 回源,这会让排障路径变复杂。
用户侧问题怎么判断
如果用户反馈“网页偶尔打不开”,可以让他分别测试:
curl --http2 -I https://example.com/
curl --http3 -I https://example.com/
如果 HTTP/2 正常、HTTP/3 失败,优先怀疑 UDP/443、CDN 边缘、运营商 UDP 策略或客户端 QUIC 实现。
如果两者都慢,再回到普通 TCP、DNS、TLS 和服务端性能排查。
VPS 测试里的误判
常见误判包括:
- TCP 443 很稳,就认为 HTTP/3 一定稳。
- ICMP 丢包高,就认为 QUIC 一定差。
- UDP 被限速,却只做 TCP speedtest。
- 防火墙允许 443/TCP,但忘了 443/UDP。
QUIC 对丢包和路径变化有自己的恢复机制,但如果 UDP 被运营商、机房或防火墙策略限制,体验会明显下降。
应该怎么测
最简单的方式是同时测 TCP 与 HTTP/3:
curl --http1.1 -w "%{time_connect} %{time_starttransfer}\n" -o NUL -s https://example.com/
curl --http2 -w "%{time_connect} %{time_starttransfer}\n" -o NUL -s https://example.com/
curl --http3 -w "%{time_connect} %{time_starttransfer}\n" -o NUL -s https://example.com/
如果本地 curl 没有 HTTP/3 支持,可以用浏览器开发者工具、qlog、quiche、ngtcp2 或在线测试服务辅助。
对建站和 CDN 的影响
开启 HTTP/3 前,建议确认:
- 源站或 CDN 是否真的支持 QUIC。
- UDP/443 是否被安全组放行。
- Anycast CDN 在目标地区的 UDP 质量。
- 回源是否仍走 TCP,是否会成为瓶颈。
- 监控系统是否能区分 TCP 与 QUIC 错误。
如果你的用户主要来自网络环境复杂的地区,HTTP/3 应该灰度开启,并保留 HTTP/2 回退。
结论
QUIC 让应用层更快,也让网络测量更难。未来 VPS 和线路测评不能只给 TCP speedtest,需要把 UDP/443、HTTP/3、丢包恢复和 CDN 边缘调度一起纳入观察。
参考来源
- APNIC Blog: Using QUIC backscatter to infer hypergiant deployment configurations
- IETF QUIC Working Group: QUIC specifications
- qlog: QUIC and HTTP/3 logging format