TCP/IP协议栈是现代互联网通信的基石,但其默认配置往往不能充分发挥网络性能。通过深入理解TCP拥塞控制、流量控制和滑动窗口机制,我们可以针对性地优化网络传输性能。
# 启用TCP窗口缩放(支持大于64KB的窗口) sysctl -w net.ipv4.tcp_window_scaling=1 # 增加TCP接收缓冲区大小 sysctl -w net.core.rmem_max=16777216 sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" # 增加TCP发送缓冲区大小 sysctl -w net.core.wmem_max=16777216 sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216" # 启用TCP Fast Open(减少握手延迟) sysctl -w net.ipv4.tcp_fastopen=3 # 优化TIME_WAIT状态 sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_fin_timeout=30
编辑 /etc/sysctl.conf:
# 网络性能优化 net.core.netdev_max_backlog = 30000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_fastopen = 3 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216
应用配置:sysctl -p
# /etc/nginx/nginx.conf http { # 启用sendfile(零拷贝) sendfile on; tcp_nopush on; tcp_nodelay on; # Keepalive优化 keepalive_timeout 65; keepalive_requests 100; # 缓冲区优化 client_body_buffer_size 128k; client_max_body_size 10m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; # 启用gzip压缩 gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json; }
const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ data: 'Hello World' })); }); // 优化socket配置 server.on('connection', (socket) => { socket.setTimeout(30000); // 30秒超时 }); // 启用TCP_NODELAY(禁用Nagle算法) server.on('connection', (socket) => { socket.setNoDelay(true); }); server.listen(3000, () => { console.log('Server running on port 3000'); });
# 服务端 iperf3 -s # 客户端(测试TCP窗口大小影响) iperf3 -c server_ip -w 256K -l 128K -t 30
# 查看TCP连接状态 ss -tan | awk '{print $1}' | sort | uniq -c # 监控TCP重传 netstat -s | grep "segments retransmited" # 抓包分析 tcpdump -i eth0 -w capture.pcap port 80
# 增加本地端口范围 sysctl -w net.ipv4.ip_local_port_range="10000 65000" # 减少TIME_WAIT持续时间 sysctl -w net.ipv4.tcp_fin_timeout=15 # 启用TIME_WAIT重用 sysctl -w net.ipv4.tcp_tw_reuse=1 # 增加SYN队列长度 sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# 禁用TCP慢启动后的空闲重启 sysctl -w net.ipv4.tcp_slow_start_after_idle=0 # 启用TCP ACK快速重传 sysctl -w net.ipv4.tcp_early_retrans=3 # 减少TCP重传超时 sysctl -w net.ipv4.tcp_retries2=8
# 实时监控TCP连接 watch -n 1 'ss -s' # 查看TCP重传统计 cat /proc/net/snmp | grep Tcp:
tcp_syncookies和tcp_max_syn_backlogtcp_tw_reuse或使用连接池TCP/IP协议栈优化是一个系统工程,需要结合应用场景、网络环境和硬件条件综合考量。建议在测试环境中验证调整效果,逐步应用到生产环境。关键是要理解每个参数的作用机制,避免盲目调优导致的性能下降。