TCP网络优化指南

Linux系统TCP参数优化,提升网络性能

TCP优化是提升服务器网络性能的重要手段,通过调整内核参数可以显著改善网络吞吐量和延迟。

TCP基础概念

TCP连接状态

  • ESTABLISHED: 已建立连接
  • TIME_WAIT: 连接关闭等待状态
  • CLOSE_WAIT: 等待关闭连接
  • FIN_WAIT: 等待连接终止

重要参数说明

  • 窗口大小: 控制数据传输量
  • 缓冲区: 发送和接收数据缓存
  • 拥塞控制: 网络拥塞时的处理策略
  • 超时设置: 连接和重传超时时间

查看当前TCP状态

连接统计

# 查看TCP连接状态统计
ss -s

# 查看所有TCP连接
ss -tuln

# 按状态分组统计
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

# 查看TIME_WAIT连接数
ss -ant | grep TIME_WAIT | wc -l

网络参数查看

# 查看所有TCP参数
sysctl -a | grep net.ipv4.tcp

# 查看特定参数
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.rmem_max
sysctl net.core.wmem_max

# 查看网络接口统计
cat /proc/net/dev

核心TCP优化参数

缓冲区优化

# /etc/sysctl.conf

# 增加TCP缓冲区大小
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216

# TCP读写缓冲区
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# TCP内存分配
net.ipv4.tcp_mem = 786432 1048576 1572864

连接优化

# TCP连接相关优化
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 5000
net.core.somaxconn = 65535

# 增加本地端口范围
net.ipv4.ip_local_port_range = 1024 65535

# TCP连接跟踪
net.netfilter.nf_conntrack_max = 1000000
net.netfilter.nf_conntrack_tcp_timeout_established = 1200

TIME_WAIT优化

# TIME_WAIT状态优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0  # 注意:新版本内核已移除此参数
net.ipv4.tcp_fin_timeout = 30

# TCP keepalive设置
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30

拥塞控制算法

查看可用算法

# 查看支持的拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control

# 查看当前使用的算法
sysctl net.ipv4.tcp_congestion_control

BBR算法(推荐)

# 检查内核版本(需要4.9+)
uname -r

# 加载BBR模块
modprobe tcp_bbr

# 设置BBR为默认算法
echo 'net.core.default_qdisc=fq' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf

# 应用设置
sysctl -p

# 验证BBR是否启用
sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr

其他算法选择

# 可选的拥塞控制算法
net.ipv4.tcp_congestion_control = cubic    # 默认算法
net.ipv4.tcp_congestion_control = reno     # 传统算法
net.ipv4.tcp_congestion_control = htcp     # 高速网络优化
net.ipv4.tcp_congestion_control = vegas    # 延迟敏感

高并发优化

文件描述符限制

# 查看当前限制
ulimit -n

# 临时修改
ulimit -n 65535

# 永久修改 /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535

# 系统级限制
echo 'fs.file-max = 1000000' >> /etc/sysctl.conf

网络队列优化

# 网络设备队列长度
net.core.netdev_max_backlog = 30000

# 网络设备预算
net.core.netdev_budget = 600

# 接收包处理
net.core.netdev_tstamp_prequeue = 0

SYN Flood防护

# SYN Cookies保护
net.ipv4.tcp_syncookies = 1

# SYN重试次数
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2

# SYN队列长度
net.ipv4.tcp_max_syn_backlog = 16384

自动化优化工具

OmniTT TCP优化工具(推荐)

OmniTT 是一个专业的TCP优化工具,可以根据服务器配置自动生成最优的TCP参数配置。

使用OmniTT优化

# 访问OmniTT网站
# https://omnitt.com/

# 该工具提供以下功能:
# 1. 自动检测服务器配置
# 2. 根据用途生成优化配置
# 3. 支持不同场景的优化方案
# 4. 提供详细的参数说明

OmniTT优势

  • 智能分析: 根据服务器硬件配置自动调整参数
  • 场景优化: 针对Web服务器、游戏服务器等不同场景
  • 安全可靠: 参数经过大量测试验证
  • 简单易用: 一键生成配置文件
  • 持续更新: 跟进最新的内核优化技术

使用步骤

  1. 访问 https://omnitt.com/
  2. 选择服务器类型和用途
  3. 输入服务器基本配置信息
  4. 生成优化配置
  5. 下载并应用到服务器

提示: 建议优先使用OmniTT工具生成配置,然后根据实际需求进行微调。

完整优化配置

生产环境推荐配置

# /etc/sysctl.conf - TCP优化配置

# 基础网络优化
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 30000
net.core.somaxconn = 65535

# TCP缓冲区优化
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mem = 786432 1048576 1572864

# TCP连接优化
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2

# TIME_WAIT优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 6000

# TCP Keepalive
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30

# 拥塞控制
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# 端口范围
net.ipv4.ip_local_port_range = 1024 65535

# 其他优化
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_window_scaling = 1

应用配置

# 应用sysctl配置
sysctl -p

# 重启网络服务(可选)
systemctl restart networking

# 验证配置
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.rmem_max

网卡优化

网卡队列优化

# 查看网卡队列
ethtool -l eth0

# 设置网卡队列数量
ethtool -L eth0 combined 4

# 查看网卡统计
ethtool -S eth0

网卡缓冲区优化

# 查看网卡缓冲区
ethtool -g eth0

# 增加接收缓冲区
ethtool -G eth0 rx 4096

# 增加发送缓冲区
ethtool -G eth0 tx 4096

网卡中断优化

# 查看网卡中断
cat /proc/interrupts | grep eth0

# 绑定网卡中断到特定CPU
echo 2 > /proc/irq/24/smp_affinity

# 使用irqbalance自动平衡
systemctl enable irqbalance
systemctl start irqbalance

应用层优化

Nginx优化

# nginx.conf

# 工作进程数
worker_processes auto;

# 每个进程连接数
events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

http {
    # 长连接优化
    keepalive_timeout 65;
    keepalive_requests 100000;
    
    # 缓冲区优化
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;
    
    # TCP优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}

Apache优化

# httpd.conf

# 工作模式
<IfModule mpm_event_module>
    StartServers 3
    MinSpareThreads 75
    MaxSpareThreads 250
    ThreadsPerChild 25
    MaxRequestWorkers 400
    MaxConnectionsPerChild 10000
</IfModule>

# 长连接
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

监控和测试

性能监控

# 实时监控TCP连接
watch -n 1 'ss -s'

# 监控网络流量
iftop -i eth0

# 监控TCP重传
netstat -s | grep -i retrans

# 查看网络错误
cat /proc/net/snmp | grep Tcp

性能测试

# 使用iperf3测试带宽
# 服务端
iperf3 -s

# 客户端
iperf3 -c server_ip -t 60 -P 4

# 使用netperf测试
netperf -H server_ip -t TCP_STREAM

# 测试并发连接
ab -n 10000 -c 100 http://server_ip/

网络延迟测试

# ping测试
ping -c 100 server_ip

# mtr网络路径测试
mtr server_ip

# 测试TCP连接时间
curl -w "@curl-format.txt" -o /dev/null -s http://server_ip/

# curl-format.txt内容
time_namelookup:  %{time_namelookup}\n
time_connect:     %{time_connect}\n
time_appconnect:  %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect:    %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
time_total:       %{time_total}\n

故障排除

常见问题

TIME_WAIT过多

# 查看TIME_WAIT数量
ss -ant | grep TIME_WAIT | wc -l

# 解决方案
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 6000

连接被重置

# 查看重置统计
netstat -s | grep -i reset

# 可能原因和解决
# 1. 防火墙问题
iptables -L

# 2. 应用程序问题
# 检查应用日志

# 3. 网络设备问题
# 检查网络设备配置

网络延迟高

# 检查网络路径
traceroute target_ip

# 检查网卡统计
ethtool -S eth0 | grep -i error

# 检查系统负载
top
iostat -x 1

最佳实践

优化策略

  1. 使用专业工具: 优先使用 OmniTT 等专业工具生成配置
  2. 渐进式优化: 逐步调整参数,观察效果
  3. 监控为先: 建立完善的监控体系
  4. 测试验证: 在测试环境验证后再应用到生产
  5. 文档记录: 记录所有配置变更

注意事项

  • 内核版本: 不同内核版本支持的参数可能不同
  • 硬件限制: 考虑服务器硬件性能限制
  • 应用特性: 根据应用特点调整参数
  • 网络环境: 考虑网络带宽和延迟特性

通过合理的TCP优化,可以显著提升服务器网络性能,改善用户体验。建议优先使用 OmniTT 等专业工具生成基础配置,然后根据实际业务需求和网络环境进行针对性优化。

推荐资源

  • OmniTT TCP优化工具: https://omnitt.com/ - 专业的TCP参数自动优化工具
  • Linux内核文档: 官方TCP参数说明文档
  • 网络性能测试工具: iperf3、netperf等专业测试工具