有一种说法流传很广:加速器通过“更快的线路”来减少ping 值。
这句话没说错,却把真正值得琢磨的部分盖住了。物理线路上信号的传播速度被光速锁死,任何设备都越但是这条线。那加速器到底改变了什么?答案不在传输层,而在协议层。
加速器的原理,说白了是改写了一套到底通信的协议行为:数据包在物理链路上的传输方式和没加速时不一样——不是传得更快,而是传得更“有效”。而“有效”这个词要看拆开来看,起因TCP和UDP对它的定义完全不同。
TCP加速:确认不是确认
TCP的设计约束是理解一切加速行为的起点。
TCP 开工前要凑齐 SYN、SYN-ACK、ACK 三样。这套三次握手在 RTT 为 200ms 的链路上至少要 200ms:SYN 出去一趟、SYN-ACK 回来一趟,第三个 ACK 可以捎数据,但建连本身就吃掉了一个 RTT。这就是’冷启动延迟‘。
之后 TCP 的拥塞控制从一个小窗口起步,每收到一个 ACK 就长大一点。高延迟链路上,窗口涨多缓存决于 ACK 回来的速度:RTT 若 200ms,窗口每 200ms 才涨一次。所以即便带宽充裕,TCP 也要好几个 RTT 才能’摸‘出可用带宽并填满。慢启动并不真的慢,只是被 RTT 约束的探测过程。
很多人会误以为加速器“降低了ping 值”。更准确的说法是,加速器将长RTT链路分割为多段短RTT链路,让每一段的TCP行为独立运行。
考虑一个场景:用户在北京,目标服务器在洛杉矶。直连RTT大约200ms。加速器在东京部署了一个节点。用户到东京的RTT是60ms,东京到洛杉矶的RTT是110ms。
当用户通过加速器访问目标时,真用起来建立了两个TCP连接:用户到东京节点,东京节点到目标服务器。每个连接各自完成三次握手,各自维护独立的拥塞窗口,各自处理丢过来重写。
具体是这样:用户的数据 60ms 内到达东京节点,节点立刻回 ACK——这 ACK 来自中间节点而非目标服务器。用户的 TCP 栈以为链路延迟只有 60ms,拥塞窗口的爬升速度比直连快三倍以上。数据先在东京节点缓存,再通过第二条 TCP 连接发往洛杉矶。
这种设计带来的行为变化是:用户侧感知到的TCP连接建立时间和慢启动经过,都与短RTT链路对齐。但代价是,一套到底的语义被破坏了——发送端收到ACK时,数据可能还没离开东京节点。
这就是TCP加速的本质:用空间换时间,用中间缓存换取更快的ACK反馈循环。它没有违反TCP协议,而是在两个独立的TCP连接之间做中继。每一段都是合法的TCP,但整体不再是一套到底的TCP。
UDP加速:为什么相同的逻辑不适用
UDP没有连接建立经过,没有ACK,没有拥塞窗口。那么UDP加速在做什么?
只做转发,等于什么都没改。中间节点若只是把 UDP 包原样送走,它和运营商的路由器没两样,唯一不同是走了一条别的物理路径。真正的加速来自两件事:挑哪条路,以及丢包怎么补救。
一种设计是:加速器在中间节点给 UDP 做前向纠错编码。发送端在原始数据报之外加上冗余数据,途中丢包时接收端可用冗余信息重建丢失内容,不用等重传。代价是带宽开销增加;但对实时音视频这类延迟敏感的应用,等重传比多花带宽更难接受。
还有更激进的一种:加速器把 UDP 转成自定义可靠协议在中间链路传输,到对端节点再还原成 UDP。这等于放弃 UDP 的无连接特性,在中间段引入类似 TCP 的确认与重传。对’用 UDP 但实际需要一定可靠性‘的应用可能有效;但对依赖丢包作为拥塞信号的协议(比如 QUIC),隐藏丢包可能干扰应用层的速率控制。
反直觉的地方在这:抖动可能降了,排队延迟却升了。中间节点要做冗余编码、要缓冲,都要时间;节点一忙,这部分耗时可能比绕开拥堵省下的还多。结果就是:RTT 曲线更平,但整体高了一点。
代理的拓扑:节点在哪里,比有多少节点更重要
所有加速器本质上都是代理——它们终止一端连接,建立另一端连接。但代理的拓扑结构决定了快慢改善的上限。
一个常见的工程选择是“边缘节点 + 骨干网 + 边缘节点”。用户连接到最近的边缘节点,流量通过加速器自建的骨干网传输,然后在目标侧的边缘节点离开,进入公共互联网到达目标服务器。
这套设计的核心假设是:加速器的骨干网比公网更快、更可靠。某些路径上这个假设成立——尤其是跨越多个运营商对等互联点的长距离路径,这些对等点往往是拥堵高发区。但在另一些路径上,公网的 BGP 可能已选出足够好的路由,加速器骨干网没有额外收益。
最关键的其实是节点摆在哪。你到加速节点那一段如果本身就经过拥堵的运营商出口,交给它也救不了第一公里;目标服务器如果托管在与加速器骨干没有直连的节点,最后一公里照样看公网的脸色。
在工程实践中通常会看到,快慢改善对“中部路线”的优化最为肉眼可见,而对第一公里和最后一公里的控制力较弱。如果用户的本地网络或目标服务器的接入网络是瓶颈,加速器能做的事情非常有限。
判断一个加速服务是否适用于特定场景,最直接的方式不是看宣传的节点数量,而是测量你的流量实际经过了哪些网络边界。节点数量多意味着选择多,但不意味着自动选择了最优路线.
# 通过加速器访问目标,观察路线变化 mtr -r -c 10 目标IP # 对比直连路线 mtr -r -c 10 --address 本地IP 目标IP
如果你发现加速后的路线确实绕开了某个经常出现拥塞的AS边界,那么加速有效。如果加速后的路线在到达加速节点之前已经经过了那个边界,那么加速器没有帮上忙。
误判:加速 vs. 路由变化
还有一种情况容易被误判为加速器的效果:本地ISP的路由调度规则恰好发生了变更。
还有个归因陷阱:某段时间延迟降了,而那会儿你正好开着加速工具,就容易把功劳算给它。可也可能是运营商在那段时间因故障或成本调整换了出口路由,正好绕开了常年拥堵的点。想分清,就得在切换前后各测一次直连和加速路径。
还有一种更隐蔽的情况:加速工具用的 DNS 解析返回了不同的目标 IP。很多大服务用 CDN,不同 IP 对应不同接入点。如果加速器的 DNS 解析返回离用户更近或负载更低的 CDN 节点,延迟下降可能完全来自 DNS 层面的变化,而非加速器骨干网的贡献。这就是’看似是加速器,其实是 DNS‘的变体。
要区分这些情况,要看保持一个不变的参照系:固定目标IP,而不是目标域名。用IP进行直连测试和加速测试的对比,才能排除DNS变化的干扰。用域名测试时,你不知道每一次解析返回的IP是否相同。
系统的边界
加速器能改变的是协议行为和中部路线。它不能改变的是光速限制、第一公里链路质量、目标服务器的处理ping 值,以及应用层协议自身的交互模式。
边界也要说清楚:如果延迟主要来自服务端数据库查询或业务逻辑,传输层怎么优化都没用;如果协议要求串行多次交互(比如连调好几个 API),加速器只能省每一趟的传输时间,交互次数减不掉。
搞清加速器做不到什么,比搞清它做得到什么更重要。它不是让网络变快的魔法,而是在约束条件下用协议中继和路径选择改变数据流向的工程手段。先把边界划清,再判断它适不适合你的问题。
