网络协议性能调优手册

从性能视角综合各协议的调优参数与方法,按场景分类。 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 高 → 检查证书/套件。

相关推荐
Zelman1 小时前
TCP-IP 协议栈设计哲学
网络协议
阿钱真强道1 小时前
28 嵌入式操作系统 | 网关加 TCP 命令通道:粘包/半包怎么切
网络·网络协议·tcp/ip·粘包
hasty2 小时前
一次 WebSocket 握手为何能终止进程?Undici CVE-2026-19534 的异常边界
网络·websocket·网络协议
hasty4 小时前
前缀相同不代表同一网络:ip-address 跨地址族比较缺陷
网络·网络协议·tcp/ip
喜欢的名字被抢了6 小时前
08-Redis 性能优化篇:快在哪、BigKey、HotKey、慢查询与内存
数据库·redis·性能优化
傲世仙尊6 小时前
HTTP请求与应答-URL全网唯一文件路径报文结构与短连接
网络·网络协议·http
lusklusklusk6 小时前
Oracle数据库基础之10_性能优化
数据库·oracle·性能优化
杨福宇17 小时前
100BASE T1以太网实时控制的危机V3.21 ——辅助自动驾驶难达标
网络·网络协议·安全·自动驾驶·汽车
余槐i20 小时前
EXPLAIN 显示走了索引查询仍慢:回表与选择性在 500 万行表上拉开 10 倍耗时
数据库·postgresql·性能优化·vacuum·explain