Relayium

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

最近更新: 2026-08-07

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

听起来很简单,但实际路径并不相同。本文先解释通用 WebRTC/ICE 中 TURN 可作为后备的概念,再明确区分 Relayium 的实现:局域网浏览器 WebRTC 直连、跨网络浏览器按设计使用 TURN;CLI 的传输模式——push、pull、sync、serve、send、receive——都是直连,从不走中继。

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

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

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

  • 基于上传的传输:你的设备到服务器再到对方设备——两跳,中间有一份存储的副本。
  • 点对点传输:你的设备直接到对方设备——一跳,什么都不存储。
  • Relayium 的实时浏览器模式有两条路径:同一局域网内 WebRTC 直连;跨网络则按设计使用 TURN 承载端到端加密的密文,并且不保留服务器端内容副本或历史。

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

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

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

  • STUN 始终只获取和交换网络地址——从不涉及文件内容、文件名或加密密钥。
  • Relayium 在同一局域网的浏览器会话中直接使用 WebRTC;跨网络浏览器路径则有意使用中继。
  • Relayium CLI 的 send/receive 和 text 模式只走 P2P 直连:按它们今天的实现,这条路径里没有 ICE 也没有 TURN,所以两端建立不了直连时,会话会直接失败,而不是回退到中继。这是这些模式的性质,不是 Relayium 整体的性质——App 和网页做跨网络传输时按设计就是走中继的,中继上流过的是它读不了的密文。
  • 同一网络下的两台设备(不需要配对码)通常连得最直接,因为往往根本没有 NAT 挡在中间。

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

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

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

  • 同一网络下 Relayium 让设备直连;跨网络时默认走 TURN 中继,因为那种场景下直连路径往往根本找不到。
  • 中继只转发密文;它从不掌握解密密钥,无法读取文件内容、文件名或其中的任何其他信息。
  • Relayium CLI 的 send/receive 和 text 模式只走 P2P 直连:按它们今天的实现,这条路径里没有 ICE 也没有 TURN,所以两端建立不了直连时,会话会直接失败,而不是回退到中继。这是这些模式的性质,不是 Relayium 整体的性质——App 和网页做跨网络传输时按设计就是走中继的,中继上流过的是它读不了的密文。

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

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

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

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. 再读一次标签。在浏览器里跨网络时,它每次都写「中继」。这是设计如此,而不是一次失败的尝试:应用从一开始就向 ICE 请求仅中继路径,因此根本不会收集到直连候选供它优先选择。

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

这些标签告诉了你什么

同一网络下你会看到「局域网直连」。在浏览器里跨网络时,你会看到「中继」——不是有时候,也不取决于你的那两个网络。这正是 Relayium 与本文上面描述的通用 ICE 阶梯唯一不同的地方。

「中继」不是失败,在这里也不是兜底:并没有先尝试直连再失败。Relayium 提前做出这个选择,是因为跨网络路径上的直连候选通常本来就会失败,而等它们逐个检查完,要多花大约二十秒才会用上那条它本来就要用的中继。中继全程只承载密文。

当标签不是你预期的那个

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

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

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

没有出错,也没有什么需要检查——这条流程只会显示这一个标签。Relayium 浏览器端对每一个跨网络会话都请求仅中继的 ICE 路径,所以直连既不会被尝试,也不会被报告。中继只承载密文;同样这两台设备在同一网络下依然走直连,依然免费。

在同一个 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

继续阅读