Relayium

什么是点对点(P2P)文件传输?

最近更新: 2026-08-07

「点对点」这个词经常被随意使用,但对文件传输来说,它的确切含义是:文件直接从一台设备到另一台设备,而不是先上传到某家公司的服务器再下载下来。中间没有一站可以停留、可能留下副本。

听起来很简单,但实际路径并不相同。本文先解释通用 WebRTC/ICE 中 TURN 可作为后备的概念,再明确区分 Relayium 的实现:局域网浏览器 WebRTC 直连、跨网络浏览器按设计使用 TURN、CLI 仅直连。

P2P 与常见做法的区别:省掉中间那一站

大多数「发送文件」工具的工作方式是上传:文件从你的设备上传到公司的服务器,存放在那里,对方再从服务器下载下来。这是两跳,而且有一段时间,你文件的完整副本会存放在别人的存储上——即便之后会被删除。

点对点传输省掉了这一站。一旦你的设备和对方设备之间建立起连接,文件的字节就直接经这一跳流动,不再经过别处。没有服务器端的副本需要存储、需要保护,也不需要日后再删除,因为它压根没有被上传过。

两台设备到底如何找到彼此:STUN

这里有一个不太直观的地方:你的设备几乎肯定不知道自己在公网上看起来是什么地址——它藏在家用路由器或运营商的网络地址转换(NAT)后面,这层机制会把它隐藏在一个共享的公网 IP 之后,并动态地重新分配端口。对方设备也处于同样的处境。双方都无法在不先弄清楚「什么地址才能真正连到对方」之前,直接「拨号」找到对方。

这正是 STUN(NAT 会话穿越工具)的用途。每台设备会向一个轻量的 STUN 服务器简短地问一个问题:「你看到我是从哪个地址、哪个端口过来的?」答案告诉它自己对外可见的地址——不涉及文件,不涉及任何内容,只是足够描述一条能连回它的路径的网络信息。双方交换这些信息(通过一个只承载连接建立细节、从不承载文件字节的信令步骤),然后尝试直接打通到对方地址的路径。在很多真实场景中——尤其是同一个 Wi-Fi 下的两台设备,或者行为可预测的 NAT——这一步就能成功,从而建立起完全直连的连接。

找不到直连路径时:TURN 中继

有时 STUN 还不够。有些 NAT——尤其是较严格的企业网络或某些移动运营商——行为难以预测,仅凭外部信息根本无法找出一条直连路径。如果双方设备都处在这类 NAT 之后,真正意义上的直连就是不可能的;总得有什么东西居中转发流量。

在通用 WebRTC/ICE 设计里,TURN 可以在直连失败时作为后备中继。Relayium 浏览器端的选择更明确:同一局域网使用 WebRTC 直连,所有跨网络会话从一开始就使用 TURN。文件到达中继前已端到端加密,因此中继只承载密文,无法读取或解密内容。

为什么这很重要:隐私与速度

隐私方面的道理很直接:当文件的字节只经过一跳、直接在两台设备之间流动时,就不存在一个服务器端的存储环节,让副本可能停留、被记录,或被别人访问——因为它压根没被放在那里过。这与「我们承诺以后会删除」是结构上完全不同的保证。

速度方面的道理也是一样。先上传再下载的传输需要两次穿越网络——上行一次,下行一次——而且经常需要等发送方完全上传完,接收方才能开始下载。而直连只穿越网络一次,数据可以在两台设备之间持续流动,速度取决于两端中较慢的那条连接,中间没有服务器限制吞吐量或增加额外延迟。

Relayium 是如何把这些拼起来的

要自己验证,你需要什么

  • 两台你能同时看到屏幕的设备——一台笔记本加一部手机最合适。
  • 一个小文件。这里关心的是连接走了哪条路径,不是速度。
  • 一段两台都在同一 Wi-Fi 下的时间,以及一段它们分处不同网络的时间——把手机 Wi-Fi 关掉走蜂窝数据就够了。

在同一网络下的两台设备上打开 relayium.com,它们通常会自动找到彼此——不需要账号,不需要配对码,也无需安装任何东西;这就是局域网场景,很多时候甚至用不上 STUN。要跨网络发给不同网络上的人,则用配对码:发送方登录、生成一个配对码(或分享链接,也可选择扫描二维码),对方加入之后,传输经加密 TURN 中继完成——这是穿透难以预测的 NAT 最可靠的一条路,中继也只经手密文;接收方始终不需要账号。

实时路径建立后,每批最多 1,000 个文件会沿选定路径持续流动,每个文件都独立用 SHA-256 校验。Relayium 不保留服务器端实时内容副本或传输历史。对方离线时使用的零知识存储链接是另一种模式,并非实时 P2P 会话。

  1. 两台设备都在同一 Wi-Fi 下时,各自打开 Relayium 并把文件发过去。

    https://relayium.com/
  2. 读一下应用给这条连接标的标签。在同一网络下它写的是「局域网直连」。

  3. 现在把两台设备放到不同网络上,用配对码再发一次。

    https://relayium.com/cross-network
  4. 再读一次标签。「P2P 直连」表示跨互联网找到了直连路径;「中继」表示没找到,字节是由加密中继代为转发的。

  5. 记下你得到的是哪一个,以及当时是哪两个网络。这就是你自己对本文开头那个问题的答案,而不是我们给的答案。

这些标签告诉了你什么

同一网络下你会看到「局域网直连」。跨网络时你会看到「P2P 直连」或「中继」之一,而具体是哪一个取决于那两个网络,与你做过什么配置无关。

「中继」不是失败。它是兜底机制存在并且正在起作用,而中继全程只承载密文——这正是本文 TURN 那一节描述的情形,只不过这次是从里面看到的。

当标签不是你预期的那个

第一次去看的人通常会被三件事意外到。它们都不是需要修的故障,但每一件都值得你能叫出它的名字。

你看到什么、检查什么、它意味着什么

跨网络时永远显示「中继」,从不出现「P2P 直连」。
https://relayium.com/cross-network   # the path label reads the same on both ends

检查一下是不是两端都在蜂窝数据上,或者处在运营商级 NAT 之后——那是找不到直连路径最常见的原因。这里没有需要修的东西:这就是设计中的兜底,中继只承载密文,而同样这两台设备在同一网络下依然走直连、依然免费。

在同一个 Wi-Fi 下,却从来不显示「局域网直连」。
https://relayium.com/   # both devices on one Wi-Fi, and the path label never says LAN direct

检查这个网络是不是隔离了客户端——访客 Wi-Fi,以及很多酒店和办公网络,会直接阻断设备之间的流量。在那种网络里两台设备根本互相看不见,所以改用跨网络的配对码流程,它不依赖两端在本地能互相到达。

根本没有任何路径标签。
https://relayium.com/   # there is no path label until the two ends have connected

这个标签描述的是一条连接,所以它在连接存在之后才会出现。两端还没找到彼此时没有什么可标,而「传输始终没开始」和「传输走了意料之外的路径」是两个不同的问题。

常见问题

点对点和端到端加密是一回事吗?

两者相关但并不相同。P2P 描述端点之间的通信,并不保证每一跳都直连;TURN 也可能承载流量。加密描述中间方能否读取。Relayium 在同一局域网使用 WebRTC 直连,跨网络使用端到端加密的 TURN,中继无法读取或解密内容。

P2P 传输会经过服务器吗?

一个小型信令服务器会帮两台设备找到彼此的地址——但它只会看到连接建立所需的信息,从不涉及文件字节。在浏览器里跨网络传输时,TURN 中继会按设计转发加密后的文件数据,但即便如此,它处理的也只是它无法解密的密文。

直连为什么一开始就会失败?

有些网络——常见于较严格的企业防火墙或某些移动运营商的 NAT——其构造方式使得仅凭外部信息根本无法找出一条可达的地址。与其在每次传输时都花二十来秒把这件事试出来,Relayium 的浏览器端干脆让所有跨网络传输一开始就走中继——所以承载它们的是中继,而不是一次失败的直连尝试。

走中继时,P2P 传输会变慢吗?

会增加一些延迟,因为中继是数据要经过的一跳额外路径,而且是共享服务器而非专用服务器。但总体上仍然比先上传再下载要快,因为不需要等文件完全落到服务器上,下载端才能开始。

P2P 传输是否双方都需要账号?

同一网络下的两台设备完全不需要账号。跨网络用配对码发送时,需要发送方登录,但无论哪种方式,接收方都不需要账号。

想亲身体验?在两台设备上打开 Relayium,开始一次加密的实时会话。

立即试用 Relayium

继续阅读