从性能视角综合各协议的调优参数与方法,按场景分类。 synthesis 页:跨所有协议页综合分析。
1. 网络拓扑
bash
┌─────────────────────────────────────────────────────────────────┐
│ 网络协议性能调优全景 │
│ │
│ 调优核心权衡: 吞吐量 ←→ 延迟 ←→ 资源(CPU/内存/连接数) │
│ │
│ 各层调优要点: │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 应用层: HTTP/2多路复用 | Brotli压缩 | CDN缓存 │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ 安全层: TLS 1.3 1-RTT | Session Resumption | ECC │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ 传输层: BBR拥塞控制 | 缓冲区调优 | TFO | NODELAY │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ 网络层: PMTUD探测 | 连接数(SYN backlog/somaxconn)│ │
│ ├──────────────────────────────────────────────────┤ │
│ │ DNS层: 本地缓存 | 预解析 | TTL策略 | DoH/DoT │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ 诊断工具链: │
│ ss -s (连接统计) → tcpdump (抓包) → iperf3 (带宽) │
│ mtr (路径延迟) → curl -w (各阶段耗时) → Wireshark (深度分析) │
│ │
│ curl -w 各阶段: DNS → TCP → TLS → TTFB → Total │
│ 快速定位: DNS高→换DNS | TCP高→网络远 | TLS高→证书/套件 │
│ TTFB高但TCP/TLS快→服务器处理慢 │
└─────────────────────────────────────────────────────────────────┘
2. 调优维度
吞吐量 ←→ 延迟 ←→ 资源(CPU/内存/连接数)
专家视角 :性能调优是权衡艺术------提升吞吐量通常增加延迟(批量发送),降低延迟通常牺牲吞吐量(小包优先)。明确优化目标是第一步。
3. TCP 调优
3.1. 高并发服务器
| 参数 | 推荐值 | 说明 |
|---|---|---|
net.ipv4.tcp_tw_reuse |
1 | 复用 TIME_WAIT 端口 |
net.ipv4.tcp_max_tw_buckets |
1048576 | TIME_WAIT 上限 |
net.ipv4.tcp_max_syn_backlog |
8192 | SYN 队列 |
net.core.somaxconn |
8192 | accept 队列 |
net.ipv4.tcp_fin_timeout |
30 | FIN-WAIT-2 超时 |
net.ipv4.ip_local_port_range |
1024 65535 | 可用端口范围 |
3.2. 高吞吐量
| 参数 | 推荐值 | 说明 |
|---|---|---|
net.core.rmem_max |
16777216 | 最大接收缓冲 |
net.core.wmem_max |
16777216 | 最大发送缓冲 |
net.ipv4.tcp_rmem |
4096 87380 16777216 | 接收缓冲自动调优 |
net.ipv4.tcp_wmem |
4096 65536 16777216 | 发送缓冲自动调优 |
net.ipv4.tcp_congestion_control |
bbr | 拥塞控制算法 |
net.ipv4.tcp_mtu_probing |
1 | PMTUD 探测 |
3.3. 低延迟
| 参数 | 推荐值 | 说明 |
|---|---|---|
TCP_NODELAY(socket 选项) |
应用层设置 | 禁 Nagle 算法,小包立即发送 |
TCP_QUICKACK(socket 选项) |
应用层按需开关 | 立即回 ACK、临时撤销延迟 ACK(非持久,每次 recv 后需重设) |
net.ipv4.tcp_delack_seg |
2(Linux 5.18+) | 累计收满 N 个全尺寸段才发延迟 ACK;调为 1 可降低延迟 |
专家视角 :BBR 拥塞控制是高 BDP 链路(跨洋/CDN)的杀手锏------不靠丢包判断拥塞,而靠带宽探测。Google 全量 BBR 后跨洋吞吐量提升 10x+。但与 CUBIC 流混用时公平性差,公网需谨慎。
4. HTTP 调优
4.1. 连接优化
| 优化 | 说明 | 效果 |
|---|---|---|
| HTTP/2 | 多路复用 | 减少连接数,省握手 |
| HTTP/3 | QUIC 0-RTT | 恢复连接近零延迟 |
| 连接池 | 复用 TCP 连接 | 省重复握手 |
| Keep-Alive | HTTP/1.1 持久连接 | 省每请求新连接 |
4.2. 压缩优化
| 编码 | 压缩率 | CPU 开销 | 推荐 |
|---|---|---|---|
| gzip | 基准 | 低 | 兼容性好 |
| br (Brotli) | +15~25% | 中 | 推荐(HTTPS 下) |
| zstd | 同级别下比 gzip 高约 20~30% | 低 | 大体积响应(Chrome 123+ 支持) |
| 不压缩 | --- | --- | 已压缩格式(jpg/png/mp4) |
专家视角 :Brotli 只在 HTTPS 下可用 (浏览器不在 HTTP 下启用 br,防中间人篡改)。zstd 是 Facebook(Meta)开源的新一代压缩,压缩率接近 Brotli 而压缩/解压速度更快,适合大 API 响应;浏览器侧 2024 年起才陆续支持,启用前需核对兼容性。
4.3. 缓存优化
| 策略 | 说明 |
|---|---|
| 强缓存 | Cache-Control: max-age=31536000, immutable |
| 协商缓存 | ETag + If-None-Match → 304 |
| CDN 缓存 | 静态资源 CDN + 边缘缓存 |
| Service Worker | 浏览器内可编程缓存 |
专家视角 :
immutable是 Cache-Control 的隐藏杀手锏 ------告诉浏览器资源指纹不变,连 304 验证请求都不发。配合 hash 文件名实现零请求缓存。
5. TLS 调优
| 优化 | 说明 | 效果 |
|---|---|---|
| TLS 1.3 | 1-RTT 握手 | 减少 50% 握手延迟 |
| Session Resumption | 0-RTT 恢复 | 恢复连接近零延迟 |
| OCSP Stapling | 服务器附带吊销 | 省客户端查吊销 |
| ECC 证书 | ECDSA 替代 RSA | 证书更小,握手更快 |
| False Start | 握手未完即发数据 | 省 1-RTT(TLS 1.2) |
| HTTP/2 | 多路复用 | 省多次 TLS 握手 |
专家视角 :TLS 握手开销主要在非对称加密(ECDHE + 证书签名验证)。ECC 证书比 RSA 证书快 2~5x。Session Resumption 复用会话密钥跳过完整握手,是高频连接的关键优化。
6. DNS 调优
| 优化 | 说明 |
|---|---|
| 本地 DNS 缓存 | systemd-resolved / dnsmasq |
| 预解析 | <link rel="dns-prefetch" href="//cdn.example.com"> |
| TTL 策略 | 稳定记录长 TTL,动态短 TTL |
| DoH/DoT | 加密 DNS(延迟可能略增) |
7. 内核网络栈全量调优
bash
# /etc/sysctl.d/99-network-tuning.conf
# TCP 缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 连接数
net.core.somaxconn = 8192
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 16384
# TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 1048576
net.ipv4.tcp_fin_timeout = 30
# 拥塞控制
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
# Keep-Alive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
# SYN Cookie
net.ipv4.tcp_syncookies = 1
# MTU 探测
net.ipv4.tcp_mtu_probing = 1
# 端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 快速回收
net.ipv4.tcp_fastopen = 3
专家视角 :
tcp_fastopen = 3启用 TCP Fast Open(TFO)------首个 SYN 携带数据,省 1-RTT。但需客户端+服务器同时支持,且中间设备可能丢弃带数据的 SYN。Google/CDN 大规模使用,普通 Web 服务需测试兼容性。
8. 性能诊断工具
| 工具 | 用途 |
|---|---|
ss -s |
连接数统计 |
ss -tnp |
TCP 连接详情 |
netstat -s |
协议栈统计 |
tcpdump |
抓包 |
iperf3 |
带宽测试 |
mtr |
路径+延迟+丢包 |
curl -w |
请求各阶段耗时 |
8.1. curl 各阶段耗时
bash
curl -w "DNS: %{time_namelookup}s\nTCP: %{time_connect}s\nTLS: %{time_appconnect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" -o /dev/null -s https://www.example.com
专家视角 :curl
-w是快速定位延迟瓶颈的利器------DNS/TCP/TLS/TTFB 各阶段耗时一目了然。TTFB(Time To First Byte)高但 TCP/TLS 快 → 服务器处理慢;DNS 高 → 换 DNS 服务器;TLS 高 → 检查证书/套件。