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 都能飞起来!