主题
⚡ UDP 与 QUIC/HTTP3
TCP 可靠但慢,UDP 快但不可靠——QUIC 用 UDP 做出了既快又可靠的新型传输
UDP 是什么
User Datagram Protocol,用户数据报协议。
| 对比 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接(直接发) |
| 可靠性 | 确认+重传,保证不丢 | 不保证(发出去不管) |
| 顺序 | 严格保序 | 不保序 |
| 头部 | 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/3QUIC 的核心优势
| 特性 | TCP + TLS | QUIC |
|---|---|---|
| 握手次数 | TCP 1.5RTT + TLS 1RTT = 2-3RTT | QUIC 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 就用
加载练习题中...