连接协议选择
强制使用 UDP,1% 丢包在 TCP 下会被放大为严重的延迟,而 UDP 下则基本无影响。
1 | proto udp |
增加缓冲区
根据实际延迟与最大带宽计算出合理的缓冲区大小,单位为字节。
如延迟为100ms,最大带宽为100Mbps,那么缓冲区大小应该为100ms * 100Mbps * 1000 / 8 = 1250000Bytes。对应的配置为:
1 | sndbuf 1250000 |
上述值还可以适当调大。
增加服务器的TCP/UDP缓冲区大小
在/etc/sysctl.conf中添加以下内容:
1 | # 增大内核 UDP 缓冲区限制,适配高带宽深管道(BDP) |
提高nginx的缓冲区大小
修改nginx的配置文件,添加/修改如下内容
1 | http { |
常见问题
OpenVPN 速度慢的常见原因是什么?
高延迟链路上默认缓冲区太小是主因:带宽与延迟的乘积(BDP)远超默认窗口,吞吐量被卡死;其次是用了 TCP 封装,1% 的丢包会被放大成严重延迟。
OpenVPN 的 sndbuf/rcvbuf 缓冲区怎么计算?
按带宽延迟积计算:缓冲区字节数 = 带宽(Mbps) × 延迟(ms) × 1000 / 8。例如延迟 100ms、带宽 100Mbps 时,应设置 sndbuf/rcvbuf 约 1250000 字节。
为什么要强制 UDP 并开启 BBR?
UDP 没有 TCP 的重传风暴,丢包影响小;BBR 拥塞控制算法针对高带宽深管道优化。两者配合再调大内核缓冲区,高延迟环境下的吞吐量能显著提升。