跳到主要内容

只要打开过 OpenVPN 的配置文件,或者 VPN 应用的高级设置,你大概都见过 UDP 和 TCP 二选一的选项。它看上去只是个小开关,却决定了在 Wi-Fi 信号不稳、酒店防火墙很严、视频通话开始卡顿时,隧道会怎样表现。“OpenVPN 的 TCP 和 UDP 哪个更好”这个问题有简短答案,也有更有用的详细答案。简短的答案是:UDP 更适合做默认值,TCP 更适合做备选。详细的答案在下面。

我们会看两种传输方式各自做什么、为什么 TCP 套 TCP 会拖慢速度、涉及哪些端口,以及怎样在大约十五分钟内在自己的网络上测试两种模式。隧道与加密的基础知识不在这里重复,可以参考 VPN 协议是什么 和 WireGuard 与 OpenVPN 的对比。本文只回答一个问题:当 OpenVPN 的外层从 UDP 换成 TCP,到底有什么变化。

传输层为隧道做了什么

任何 VPN 隧道都要把加密后的数据包放进互联网能够投递的“容器”里。底层互联网搬运的是 IP 数据包,在 IP 之上,常见的传输方式有两种。

UDP(用户数据报协议)发出一个包就继续往下走。它不为送达编号,不等待确认,也不会自己重发。包丢了,UDP 并不知道。

TCP(传输控制协议)建立一条可靠、有序的数据流。它给数据编号,等待确认,重发丢失的部分,并在发现拥塞时降速。包丢了,TCP 会把后面的数据全部压住,直到缺口补上。

OpenVPN 可以用其中任意一种作为加密隧道的外层。两种情况下,隧道内容受到的保护方式是一样的。从 UDP 切到 TCP,不会让密码更强,也不会更弱,改变的只是加密好的数据包怎样在你的设备和 VPN 服务器之间传送。

可以用快递来想象。UDP 像把包裹放在门口就走的快递员,某个包裹从车上掉了,没人会告诉他。TCP 像要求每件都签收的快递员,少了一件就折回去找,而且第 6 件没到之前绝不先送第 7 件。TCP 带来确定性,而确定性要用等待时间来换。

为什么隧道通常默认用 UDP

偏向 UDP 的原因,来自隧道里本来就装着什么。你通过 VPN 发送的大部分内容本身就是 TCP 流量:网页、应用接口、下载、加密浏览。这些内层连接自己就有确认、重发和拥塞控制,并且最清楚该怎样处理丢包,因为它们知道应用需要什么。

当隧道使用 UDP 时,外层丢一个包,就只是内层丢一个包。内层 TCP 发现后,重发那一小段并略微降速。问题只由一层处理,而且是最懂数据的那一层。

此外还有这些好处:

  • 延迟更低、更平稳。 不需要额外等待外层的确认。这对通话、游戏和远程桌面很重要,对这些应用来说,晚到的包宁可跳过也不值得等。如果你关心这方面,VPN 能降低 ping 吗 详细讲了延迟、抖动和丢包。
  • 切换网络更容易。 UDP 没有需要拆除的连接。手机从 Wi-Fi 切到移动数据时,基于 UDP 的隧道通常在短暂停顿后就能恢复。
  • 开销更小。 UDP 头部很小,也不需要额外维护连接状态。
  • 适合实时流量。 现代网页协议背后的 QUIC 也是建立在 UDP 之上的,原因类似(见 RFC 9000)。

当然 UDP 不是万能的。有些网络会丢弃或限制 UDP,有些防火墙只放行很短的出站端口清单。这正是 TCP 派上用场的场合。

TCP 套 TCP:叠加带来的问题

在 TCP 隧道里再跑 TCP 连接,常被称为“TCP over TCP”,这也是人们提醒慎用 OpenVPN TCP 模式的主要原因。这个问题比较微妙,下面用一个分步示例说明。

假设你在一个每 100 个包约丢 3 个的 Wi-Fi 上,通过 TCP 模式的隧道下载文件。看看外层丢了一个包时发生什么。

  1. 外层 TCP 发现丢包,计时器开始计时,并把之后所有外层包压住,直到丢失的包被重发。如果连接已经不稳定一阵子,这个延迟可能是几百毫秒。
  2. 外层在等待的时候,承载你下载的内层连接什么也收不到,它的确认包也停止回传。
  3. 内层连接自己的计时器超时。它认为那一段数据丢了,于是重发,并且因为以为网络拥塞而降低发送速度。
  4. 与此同时,外层恢复了,把压住的包放出去,随后内层重发的数据段也到了。内层于是收到重复数据,而且已经降了速。
  5. 如果这种情况反复出现,两层都会不断缩小窗口、叠加计时器。吞吐量可能比丢包率本身所能解释的下降得多得多,连接会卡住好几秒,然后突然冲一下。

这种现象有时被叫做“TCP 崩溃”(TCP meltdown)。在良好的连接上它很少出现,因为几乎不丢包,两层也就不会互相冲突。但在移动网络、拥挤的 Wi-Fi 和长距离链路上它会很明显。所以 OpenVPN 自己的文档把 UDP 列为推荐模式,把 TCP 当作没有其他选择时的备用方案。

要记住的是:问题并不在于 TCP 不好,而在于两套独立的恢复机制同时在解决同一个问题,却没有互相协调。

端口与网络:TCP 能帮上忙的地方

实际使用中,更多时候问题出在端口而不是性能。端口是服务使用的编号“门”。OpenVPN 官方分配的默认端口是 1194,通常与 UDP 搭配。你也会看到 OpenVPN 提供在 TCP 443 端口上,这和普通加密网页用的是同一个端口。

这为什么重要?有些网络,包括某些办公室、学校、酒店和公共热点,只允许出站连接使用很短的端口清单,通常是 80 和 443,其余都丢弃。于是 1194 端口上的 UDP 隧道可能从第一个包就失败,而 443 端口上的 TCP 隧道能通过,因为网络把它当成普通的加密浏览。

这里有两点提醒:

  • 遵守你所在网络的规则。 限制端口的网络通常有原因,比如雇主的安全策略。如果你在公司或学校网络上,先问清楚是否允许使用 VPN。本文谈的是兼容性,不是绕开任何人的管控。
  • 443 端口不是隐身衣。 有些检测系统不管端口号是什么,都能识别出 VPN 隧道。换端口更多是解决“在这家酒店的网络上始终连不上”这类问题,并不能让流量变得看不见。

日常来说,TCP 是用于兼容的选项。如果 UDP 在你的网络上能用,就很少有理由离开它。

逐项对比

项目 UDP 模式 TCP 模式
常见默认端口 1194 443 或 1194(取决于配置)
可靠性层 外层没有,由内层流量处理丢包 外层 TCP 重发丢失的包
网络良好时的延迟 低 略高
丢包网络上的表现 平缓下降 可能卡住或忽快忽慢(TCP over TCP)
切换网络 通常恢复很快 连接需要重建
通过严格的端口过滤 有时被拦截 在 443 端口上常能通过
适合 通话、游戏、手机、日常使用 阻止 UDP 的网络
加密强度 相同 相同

如果只看一行,请看最后一行。加密完全相同,所以安全性不是选择哪种模式的理由。

在自己的网络上测试两种模式

不要猜,直接测。大约十五分钟,就能得到你实际使用的网络上的结果。以下步骤假设你的 VPN 应用或客户端提供传输方式的设置;如果没有,或者拿不准,请保持默认值并联系客服。

  1. 先记录未开 VPN 时的基线。 跑一次测速,并对一个知名主机做 ping。记下下载速度、上传速度和 ping 值。
  2. 用默认设置连接,重复测试,记录同样三个数字,并留意加载网页或开始播放视频时有没有不同的感觉。
  3. 只切换传输方式(UDP 改 TCP,或反过来),并重新连接同一个位置。如果同时换了位置,对比就没有意义了。
  4. 重复这三项测量,再加一项:连续 ping 一整分钟,观察尖峰。在丢包的网络上用 TCP 模式,安静一段时间后你可能看到很长的延迟尖峰。
  5. 试一个真实任务。 在每种模式下参加一次简短的视频通话,或打开一次远程桌面。真实使用能暴露平均值掩盖的卡顿。
  6. 在第二个网络上再测。 比如移动数据。家里光纤上的结果可能与咖啡馆或火车上不同。
  7. 保存结果。 记下哪种模式在哪个网络上最好,下次就不用重复实验。

读数字时有几点提示。要比较 ping 的尖峰,而不只是平均值:延迟(latency)是数据包往返所需的时间,抖动(jitter)是这个时间的波动程度。下载测试里略快、但每隔几秒就出现尖峰的模式,用来通话反而更糟。还要记住,速度慢也可能与传输方式毫无关系。VPN 为什么慢 列出了其他常见原因,从距离遥远的服务器到拥挤的 Wi-Fi 信道。

场景:不同的人适合哪种模式

住酒店的旅行者。 莉娜入住的酒店大堂网络可以上网,但 VPN 一直停在“正在连接”。看起来 UDP 包被过滤了。切换到 443 端口的 TCP 后连接成功。视频通话不如在家里流畅,但邮件和消息都能用,这正是她的目标。如果酒店附近移动信号不错,改用移动数据也是一种选择;更完整的内容见 在酒店 Wi-Fi 上使用 VPN。

在家用光纤办公的远程工作者。 志明整天通过远程桌面工作。每多 50 毫秒的延迟,打字时都能感觉到滞后。UDP 给了他需要的低而稳的延迟,他从来没有理由去动这个设置。

校园网拥挤的学生。 上课时间,成百上千台设备共用同一个接入点,小魏的笔记本大约每 20 个包丢一个。TCP 模式让下载时断时续、忽快忽慢,UDP 的下降则平缓得多。如果校规屏蔽 UDP,她应当去问信息中心是否允许使用 VPN,而不是自己瞎试。

家用路由器稳定的一家人。 陈家在家里的手机和笔记本上使用 VPN。网络很干净,应用默认值就够用,没人觉得有什么区别。正确的决定就是什么都不改。

常见错误与局限

  • 为了“更安全”改成 TCP。 加密没有变化,你得不到任何好处,还可能损失速度。
  • 同时改多项设置。 一次改了传输方式、位置和应用,就说不清是哪一项造成了差别。
  • 把 443 端口当隐身衣。 它在某些网络上能提高兼容性,但并不能掩盖隧道的存在。
  • 忽略 MTU。 过大的数据包在某些路径上会被分片或丢弃,表现为下载大文件时卡住,而小网页正常。这与路径 MTU 发现(RFC 1191)有关,VPN 软件通常会把包缩小一点,为隧道开销留出空间。如果大文件卡住而小网页能打开,请告诉客服,不要盲目修改数值。
  • 把所有问题都归咎于传输方式。 信号弱、服务器负载高、Wi-Fi 信道不好,都可能出现相同症状。在断定模式有问题之前,先按 提高 VPN 连接稳定性 排查一遍。
  • 忘了这个选择只存在于提供该选项的协议中。 WireGuard 只用 UDP,没有可选项。TCP 与 UDP 的选择主要是 OpenVPN 的话题。

如果连接根本启动不了,传输方式只是众多原因之一。VPN 连接不上 里的检查清单按顺序排好了,从正确输入账号密码一直到检查设备时钟。

总结

OpenVPN 在 UDP 和 TCP 上承载的是同一种加密隧道,所以两者谁都不比对方更安全。UDP 更适合作默认值,因为它让隧道里的流量自己处理丢包,并保持较低延迟,在手机和共用 Wi-Fi 上尤其如此。TCP 模式在丢包时会遇到 TCP 套 TCP 的叠加问题,但对只允许一小批出站端口的网络来说,是有用的备选。保持默认值,一次只改一项,用真实任务来测量,并始终遵守你所用网络的规则。

如果想在自己的网络上简单试用 VPN,可以在 价格页面 查看通行证时长,并在 下载页面 获取免费应用。

常见问题

OpenVPN 用 TCP 还是 UDP 更快?

网络状况好时,UDP 通常略快,对网络变化的反应也更灵活。网络丢包较多时,TCP 模式可能明显变慢,因为隧道本身和隧道里的数据都在尝试修复同一个丢失的包。最好在自己的网络上实测,而不是照搬经验规则。

OpenVPN 走 TCP 比走 UDP 更安全吗?

不是。两种模式下隧道的加密与认证完全相同。选择只改变数据包的承载方式,以及在丢包或网络限制较多时的表现,不会改变加密强度。

为什么有些教程推荐 TCP 443 端口?

不少网络只放行与普通加密网页相同的出站端口,其他端口大多被关闭。这个端口上的 TCP 隧道可能在 UDP 连不上的地方连上。这是为了兼容你有权使用的网络,而不是绕开别人设定的规则。

VPN 应用里有这个选项时,需要改吗?

只有出现具体问题时才改,例如在某个网络上始终连不上。先保持应用默认值,一次只改一项,并记录结果。

WireGuard 需要选 TCP 还是 UDP 吗?

WireGuard 只使用 UDP,所以没有可选项。本文讲的取舍适用于 OpenVPN,以及其他能在两种传输方式上运行的设计。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

  • XPASS VPN 创始人
  • eSIMonline.asia 联合创始人
  • 7 年以上网络营销经验
  • Cojourney Visa 与 Cojourney Travel 创始人

短途出行或忙碌的一个月,需要 VPN?

XPASS 提供按天数计算的预付通行证。一次付款,不会自动续费。

查看通行证

继续阅读

VPN 安全

WireGuard 与 OpenVPN 有什么区别

WireGuard 和 OpenVPN 都能建立加密隧道,但设计、复杂度和灵活性不同。本文用通俗的方式比较,并说明该怎样选择。

阅读约 9 分钟

VPN 基础

什么是 VPN 协议?

VPN 协议规定了你的设备与 VPN 服务器如何连接并保护流量。本文用通俗的语言讲清楚它的含义和主要取舍。

阅读约 9 分钟

故障排除

VPN 为什么很慢?如何让它变快

VPN 变慢时的实用排查清单:先测速,再排除自己网络的问题,然后逐步处理 Wi-Fi、后台应用、设备设置和视频卡顿。

阅读约 7 分钟

故障排除

如何提升 VPN 连接稳定性

经常掉线或卡住的 VPN,通常是在对周围的网络或设备作出反应。这些步骤帮你找到并修复薄弱环节。

阅读约 5 分钟

故障排除

VPN 连接不上?逐步排查方法

VPN 连接不上时的清晰排查顺序:通行证状态、登录信息、Wi-Fi 与移动数据、权限、防火墙、应用冲突和错误提示。

阅读约 8 分钟