Skip to content

⚡ UDP 与 QUIC/HTTP3

TCP 可靠但慢,UDP 快但不可靠——QUIC 用 UDP 做出了既快又可靠的新型传输

UDP 是什么

User Datagram Protocol,用户数据报协议。

对比TCPUDP
连接面向连接(三次握手)无连接(直接发)
可靠性确认+重传,保证不丢不保证(发出去不管)
顺序严格保序不保序
头部20 字节8 字节
速度慢(握手+流控)
场景HTTP、SSH、文件传输DNS、视频、游戏、VoIP

UDP 为什么快

TCP 发送前:三次握手 → 慢启动 → 确认 → 重传 → 拥塞控制
UDP 发送前:直接发

UDP 就是邮局平信——寄出去不管。TCP 是顺丰——每个环节都确认。


UDP 适用场景

场景为什么 UDP
DNS 查询64 字节,丢了重新问就行
视频直播丢几帧不影响,卡一下比重传快
在线游戏延迟敏感,丢一个位置包不如等下一个
VoIP 语音听得清就行,卡 0.5 秒比重传这句好
NTP 时间同步小包,快速
DHCP 获取 IP广播没法用 TCP
QUIC/HTTP3用 UDP 实现 TCP 的可靠性

QUIC = TCP on UDP(简化理解)

QUIC 是 Google 开发的协议,HTTP/3 基于 QUIC。本质是用 UDP 实现类似 TCP 的可靠传输,但更快

普通 HTTPS:TCP + TLS + HTTP/2
QUIC/HTTP3:UDP + QUIC(自带加密) + HTTP/3

QUIC 的核心优势

特性TCP + TLSQUIC
握手次数TCP 1.5RTT + TLS 1RTT = 2-3RTTQUIC 0-1RTT
队头阻塞TCP 丢一个包,后面全等QUIC 多条流独立,丢只影响那条
网络切换TCP 基于 IP+端口,换网络必断QUIC 基于连接 ID,WiFi→4G 不断
加密TLS 单独握手加密内置(跟 QUIC 一体)

队头阻塞对比

TCP:发送 [包1] [包2] [包3]
     包1 丢了 → 包2 包3 全等着→ 页面卡住

QUIC:流1 [包A 包B]  流2 [包X 包Y]
      流1 的包B 丢了 → 只流1 等 → 流2 照样走

HTTP/3 怎么看

bash
# curl 支持 HTTP/3(需编译时开启)
curl --http3 https://www.google.com -I

# chrome://net-internals/#http3
# 浏览器地址栏输入这个,看 QUIC 连接状态

# nginx 开启 HTTP/3(需 nginx 1.25+,编译加 --with-http_v3_module)
server {
    listen 443 quic reuseport;
    listen 443 ssl;

    # 告诉浏览器支持 HTTP/3
    add_header Alt-Svc 'h3=":443"; ma=86400';

    ssl_protocols TLSv1.3;
    # ...
}

DNS over QUIC

传统 DNS 是 UDP 明文,运营商可以看到你访问的所有域名。DoQ(DNS over QUIC)加密 DNS 查询:

bash
# systemd-resolved 启用 DoQ
# /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1
DNSOverTLS=no
DNSOverQUIC=yes

# AdGuard Home 也支持 DoQ
# 配置 → DNS设置 → 加密 → 启用 QUIC

什么时候用 UDP?

要不要可靠传输?
├── 是 → TCP
│   └── 但对速度要求极高?
│       └── QUIC(用 UDP 实现可靠传输)

└── 不是很重要 → UDP
    ├── 小包查询(DNS/NTP) → UDP
    ├── 实时流(视频/游戏/语音) → UDP
    └── 广播/组播 → UDP

简单原则:在乎丢不丢 → TCP;在乎快不快 → UDP/QUIC。


🎯 本章要点

  • UDP 无连接、不保证可靠、不保序——但快
  • UDP 适用:DNS、直播、游戏、VoIP——丢几帧比卡顿强
  • QUIC = 用 UDP 做了 TCP 的可靠性 + TLS 加密,握手 0-1RTT
  • HTTP/3 基于 QUIC,解决 TCP 队头阻塞 + 网络切换不断连
  • 有 QUIC 的前提下,能用 HTTP/3 就用
加载练习题中...

有问题或补充?欢迎留言