VPN 基础

多设备实测对比VPN场景下TCP重传性能差异全解析

多设备实测对比VPN场景下TCP重传性能差异全解析 | shadowrocket

本文从一线网络运维的故障排查场景出发,围绕VPN与TCP重传:多设备对比的核心主题,通过可复现的实测流程拆解不同终端、不同网关设备在VPN隧道场景下的TCP重传性能差异,所有分析都基于公开的TCP协议标准与VPN封装规范,不涉及特定厂商的私有定制功能,也不输出无法验证的极端测试结论,所有排查步骤都可以在普通用户的现有网络环境下复现。

实测前的基准环境校准步骤

首先要排除非VPN因素对TCP重传的干扰,所有参与对比测试的设备都要先断开VPN连接,在裸公网环境下跑满对应链路的基准带宽,确认裸网下的TCP重传行为符合当前链路的正常波动范围,避免把公网本身的链路丢包、小火箭加速器运营商路由波动误判为VPN引入的异常,从源头缩小故障定位的范围。

实测场景VPN与TCP重传多设备对比

网络运维人员正在调试校准测试设备的基准网络参数,排除非VPN因素对后续TCP重传测试的干扰

接下来要统一所有测试设备的VPN封装参数,比如全部采用相同的隧道封装协议、相同的加密套件、相同的隧道MTU值,避免封装参数差异带来的额外IP分片,分片丢包是最容易引发不必要TCP重传的常见前置因素,很多测试前没有对齐参数的对比结果都不具备参考性,得先把这类变量全部排除之后再开展正式对比。

不同终端系统的TCP栈实现差异对比

首先拿通用桌面操作系统做对照,不同系统默认的TCP拥塞控制算法、重传超时计算逻辑本身就有区别,在没有开启VPN的时候这种差异不会被明显感知,但VPN隧道相当于在原有网络路径上叠加了一层额外的封装开销,路径的RTT波动区间被拉长,不同系统的重传触发阈值差异就会被成倍放大,最终表现出来的重传统计数据差距会远大于裸网场景。

实测过程中很容易发现,部分移动终端系统出于节电优化的需求,会在后台休眠阶段临时冻结TCP栈的重传探测逻辑,shadowrocket当VPN隧道在后台保活时,一旦出现临时丢包,这类终端不会立刻触发快速重传,反而会等待更长的超时周期,表现出来的TCP重传延迟远高于桌面端设备,这部分差异很多普通用户排查故障时很容易忽略,直接归因为VPN服务本身质量差。

VPN网关侧的转发逻辑对重传行为的影响

很多人做对比测试的时候只会关注终端侧的差异,却忽略了VPN网关本身的TCP优化配置,部分网关会默认开启隧道内的TCP透明代理功能,直接接管隧道内所有TCP连接的重传调度,相当于把终端侧的TCP重传逻辑替换成了网关侧的实现,这种场景下不同网关的调度策略差异会直接覆盖终端本身的TCP栈行为,哪怕终端之间的配置完全不同,最终表现出来的重传特征也会高度趋同。

排查这部分问题的时候,可以先在VPN隧道内同时跑两个不同终端的相同业务流,观察两边的TCP重传触发时机,如果两个终端的重传事件几乎同步触发,基本可以判定当前网关开启了TCP透明代理功能,所有重传调度都由网关统一处理,终端侧的配置调整不会对结果产生明显影响,后续优化要优先从网关侧入手。

常见测试误区与故障定位注意事项

很多测试者会把VPN场景下的TCP重传率高低直接等同于网络质量好坏,实际上部分场景下主动触发的快速重传反而是链路利用率更高的表现,只要重传的数据包占比没有影响到上层业务的交互时延,就不需要盲目调整设备配置,强行关闭快速重传反而可能导致业务卡顿,反而降低实际使用体验。

另外还要注意隐私边界相关的影响,部分VPN服务提供方会在网关侧对隧道内的TCP报文做特征识别,对部分特定类型的报文做限流或者缓存处理,这类行为也会改变TCP重传的统计结果,这类场景下的多设备对比结果不能直接用来判定设备本身的TCP栈优劣,要先排除中间网络的人为干预因素,再继续做后续排查。

最后做完所有对比测试之后,要把不同设备的重传行为和对应业务的实际体验做关联验证,不要单纯盯着重传统计数字调整配置,比如实时交互类业务对重传触发的时延敏感度远高于大文件传输业务,同一套设备配置在不同业务场景下的表现完全不同,不存在通用的最优配置,要结合自身的实际使用场景做针对性调整。

VPN 基础编辑组 | shadowrocket
VPN 基础编辑组
内容编辑

解释加密隧道、连接协议与出口地址,帮助理解 VPN 的工作方式。

查看更多文章
配置入门

从一个连接问题开始

遇到WireGuard对端端口变更相关问题,可从“同步批准的配置并检查相关网络规则”开始阅读。开放一个端口不等于认证与路由配置正确,需要结合具体环境判断。