VPS 网络优化与 TCP 调优
引言
大家好,今天想跟你们聊聊 VPS 网络优化这个话题。我知道很多人买完 VPS 后就直接用了,觉得速度慢就怪商家带宽不够。其实吧,很多情况下,通过合理的系统配置和 TCP 调优,能让网络体验提升好几个档次。我自己也是踩过不少坑,今天就把一些实用的经验分享出来,希望能帮到大家。
先看看当前网络状态
在开始调优之前,咱们得先搞清楚当前的网络状况。你总不能蒙着眼睛调参数吧?
可以用下面这些命令先做个"体检":
# 查看网络接口状态
ip addr
查看网络延迟和丢包
ping -c 10 google.com
测试带宽速度
speedtest-cli
查看当前 TCP 连接状态
netstat -ant | wc -l
这些命令跑一遍,你心里大概就有数了。如果延迟本来就很高,那可能要考虑换个线路更优的 VPS;如果延迟还行但速度上不去,那往下看的调优方法应该能帮到你。
TCP 参数调优
TCP 是我们最常用的传输协议,默认参数往往比较保守。适当调整一些关键参数,效果还是很明显的。
调整 TCP 窗口大小
TCP 窗口大小直接影响数据传输效率。默认的 window size 通常偏小,大文件传输时会很吃亏。
# 调整 TCP 窗口大小
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
这几行命令的意思是把接收和发送的缓冲区调大。单位是字节,16777216 也就是 16MB,对于大多数场景足够了。
开启 TCP 快速打开
TCP Fast Open (TFO) 可以减少三次握手的开销,对于频繁建立连接的场影特别有用,比如跑网站或者 API 服务。
# 开启 TCP Fast Open
sysctl -w net.ipv4.tcp_fastopen=3
值为 3 表示同时支持客户端和服务器端的 TFO。
调整 TCP 拥塞控制算法
默认的 cubic 算法在网络条件不好时表现一般,你可以试试 bbr 或者 reno。BBR 是 Google 开发的,在跨洲际传输时效果通常不错。
# 查看当前使用的算法
sysctl net.ipv4.tcp_congestion_control
尝试启用 BBR(需要内核支持)
sysctl -w net.core.default_qdisc=fq
sysctl -w net.ipv4.tcp_congestion_control=bbr
如果报错说内核不支持,那就换回默认的 cubic 吧,别强求。
BBR 加速方案
说到网络加速,BBR 基本上是绕不开的话题。它通过控制数据发送速率来避免网络拥塞,在很多场景下都能明显提升速度。
检查 BBR 是否可用
# 检查内核是否支持 BBR
lsmod | grep bbr
查看可用的拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
如果看到 bbr,那就恭喜了,可以直接用。
永久启用 BBR
上面的 sysctl 命令重启后会失效。想让它永久生效,编辑一下 sysctl 配置文件:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
生效
sysctl -p
然后再确认一下:
sysctl net.ipv4.tcp_congestion_control
输出应该是 bbr 就对了。
一键脚本
如果觉得手动敲命令麻烦,市面上有很多现成的 BBR 一键脚本,比如teddysun 做的那个,用起来挺省心的。不过用之前最好看看脚本内容,确认没安全问题再跑。
系统内核参数优化
除了 TCP 相关的参数,还有一些系统内核参数也值得调一调。
文件描述符限制
如果你的 VPS 要跑高并发的服务,比如大流量的网站,文件描述符可能不够用。
# 查看当前限制
ulimit -n
临时修改
ulimit -n 65535
永久修改
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
连接跟踪表大小
如果跑 NAT 或者防火墙,连接跟踪表可能会满,导致新连接被丢弃。
# 查看当前连接数
conntrack -L | wc -l
调整连接跟踪表大小
sysctl -w net.netfilter.nf_conntrack_max=1048576
不过这个要根据实际需求来,不是所有人都需要调这个。
TIME_WAIT 优化
TIME_WAIT 状态的连接会占用一些资源,适当调整可以让服务器更好地处理大量短连接。
# 开启 TIME_WAIT 复用
sysctl -w net.ipv4.tcp_tw_reuse=1
缩短 TIME_WAIT 超时时间
sysctl -w net.ipv4.tcp_fin_timeout=15
优化效果验证
调完参数后,咱们得验证一下效果。别调了半天,结果一点变化没有,那不是白忙活吗?
简单测速
# 用 curl 测试下载速度
curl -o /dev/null http://speedtest.tele2.net/1MB.zip
或者用 iperf3 测试
iperf3 -c iperf.example.com
观察 TCP 状态
# 查看 TCP 状态分布
ss -s
实时监控网络状态
watch -n 1 "ss -s"
如果看到连接建立更快了、丢包更少了,那说明优化有效果。
长期监控
建议装个监控工具,比如 zabbix 或者 Prometheus,把网络流量、延迟、丢包率这些指标都记录下来。这样不仅能看出优化效果,还能及时发现新问题。
总结
好啦,今天分享的 VPS 网络优化和 TCP 调优的内容就到这里。总结一下重点:
1. 先诊断 - 搞清楚问题出在哪里,再针对性地调
2. TCP 参数 - 窗口大小、快速打开、拥塞控制算法这些都可以试试
3. BBR 加速 - 在支持的情况下效果通常不错
4. 内核参数 - 文件描述符、连接跟踪这些根据实际需求来
5. 验证效果 - 调完要测试,别盲目调一堆参数
最后提醒一下,不同的 VPS 配置、不同的使用场景,最优的参数组合可能都不一样。我的经验不一定完全适合你,建议边调边测,找到最适合自己环境的配置。
如果觉得有帮助,欢迎收藏转发,有什么问题也可以评论区聊聊。祝大家的 VPS 都能飞起来!
VPS 网络优化与 TCP 调优
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法