上一部分讲完了 NAT、局域网结构与“联机为什么难”的根源; 从这一部分开始,我们就要进入“真正能让联机发生”的三种关键技术:
内网穿透、P2P 连接、VPN ——它们到底在底层是怎么工作的,又为什么能突破那些看似无形的网络边界。
如果你玩过 Minecraft、Terraria、饥荒联机版、CS 1.6, 那你大概率听过这几个词:“frp”“ngrok”“ZeroTier”“花生壳”。 它们的共同目标是——让别人能连上你的电脑。
在上一章里我们提到,NAT(网络地址转换)是 IPv4 时代的权宜之计。 它让一个局域网的多台设备共用一个公网 IP 出口。 可是 NAT 也带来了一个致命的特性:
从内往外的连接容易建立,从外往内的连接基本不可能。
原因其实很简单。
假设你家路由器的公网地址是 120.45.67.89
,而你的电脑是内网 192.168.1.5
。
当你访问一个网站时(比如 baidu.com
),
路由器会在 NAT 表里建立一条映射:
内网IP:端口 | 公网IP:端口 | 目标IP:端口 | 状态 |
---|---|---|---|
192.168.1.5:51234 | 120.45.67.89:40000 | 220.181.38.148:443 | 已建立 |
于是返回的数据就能被路由器准确地“送回”给你。
但如果此时另一个人(比如你的朋友)想主动访问 120.45.67.89:40000
,
路由器并不知道这是谁的连接请求——
除非你手动在路由器上设置“端口映射”。
而绝大多数家庭用户 根本没有公网IP, 更别说能登录运营商网关去配映射了。 这就导致:
“我开了服务器,别人连不上。” 这就是内网穿透要解决的问题。
那我们没有公网 IP 怎么办? 办法其实很“人类”: ——找个有公网 IP 的服务器帮你转发。
这就是“内网穿透”的基本原理。
你在家运行了一个游戏服务器,
比如 Minecraft 监听在本地 127.0.0.1:25565
。
这时你启动一个内网穿透客户端(比如 frp),
它会向你的远程服务器(假设在阿里云)发起一个长期连接。
于是:
你的电脑 <====> 阿里云服务器 <====> 外部玩家
所有外部的访问请求都通过阿里云这台服务器中转回来。 阿里云就像一个“公共邮箱”——别人把信放进去,你再来取。 虽然比直接通信慢一点,但至少能通。
技术方案 | 原理简述 | 优点 | 缺点 |
---|---|---|---|
端口映射 (Port Forwarding) | 路由器层面手动设置端口转发 | 无中间服务器 | 一般用户无权限设置 |
FRP / ngrok | 内网客户端与公网节点保持 TCP 隧道,由中继转发流量 | 稳定、简单 | 有延迟、带宽受限 |
UPnP / NAT-PMP | 向路由器自动申请端口映射 | 自动化方便 | 并非所有路由器支持 |
P2P 穿透 | 双方互相“打洞”,通过中继协调后点对点直连 | 高效 | 打洞成功率受 NAT 类型影响 |
在游戏中,我们一般使用的 联机软件(如联机宝、联机对战平台、Steam Remote Play), 底层要么是 P2P NAT 打洞,要么干脆就开 VPN 隧道。 P2P 穿透和 VPN 看似不同,但在本质上都绕过了 NAT 限制。
接下来,我们进入更有意思的部分。
P2P(Peer-to-Peer)这个概念并不新。 从最早的 Napster(音乐分享)、BT 下载,到今天的游戏联机、区块链节点, 它的本质始终没变:
去中心化的数据传输。
当你在玩《Among Us》《使命召唤:战区》《CS:GO》的时候, 很多联机模式其实并没有真正的“中央服务器”。 它们依赖的是玩家之间的直连通信。
比如《Among Us》里一个玩家创建房间,其他人加入; 实际上,这个创建者就是“主机”,其他人连他。
问题是,如果主机在内网怎么办? 这时 P2P 的“打洞”技术登场。
我们刚刚说 NAT 阻止外部主动连接。 但是 NAT 是有“漏洞”的: 当两台内网设备几乎同时向同一个公网地址发起连接时, 它们的 NAT 表项中往往会产生一个可预测的映射模式。
P2P 利用这个特性做“UDP 打洞”:
这就是“打洞成功”。
但事情当然不会总这么顺利。 因为 NAT 类型千差万别: 有的动态端口分配不可预测、有的会严格屏蔽陌生请求、 有的运营商还在外面再套一层 CGNAT(运营商级 NAT)。 所以打洞的成功率在 60%~90% 不等。
这时候,P2P 程序通常会“回退”到中继模式(Relay)—— 也就是还是通过服务器转发。 Steam、Epic、WeGame 等平台的联机服务都采用这种“优先直连,失败则中继”的模式。
优点 | 缺点 |
---|---|
延迟低(若打洞成功) | 打洞失败率高 |
不依赖中心服务器 | 安全性差(泄露公网 IP) |
带宽利用率高 | NAT 兼容复杂 |
维护成本低 | 很难穿越防火墙或企业网络 |
所以你会看到,一些大型游戏虽然宣称“P2P 匹配”, 但实际还是在云上有大量的中继节点做 backup。
我们常听到“开 VPN 联机更稳定”、“公司 VPN 让你远程办公像在办公室一样”, 但很多人并不真正理解 VPN 到底是怎么做到的。
在技术层面,VPN(Virtual Private Network,虚拟专用网络) 的核心理念很朴素:在公共互联网之上,搭建一条专属于你的“私有隧道”。 这条隧道并不会真的挖穿什么墙壁,它只是在网络层面上建立了一个“虚拟的局域网”, 让远在天南海北的设备,看起来像在同一个本地网络中。
当你启动 VPN 客户端时,系统中会多出一张虚拟网卡(TUN/TAP 设备)。 这张网卡不是物理硬件,而是操作系统虚拟出来的“假网卡”。 所有需要经过 VPN 的流量,都会先经过它:
[应用层程序] → [虚拟网卡] → [加密隧道] → [VPN 服务器] → [互联网]
VPN 客户端做的事情其实只有三步:
于是,在整个网络传输链上,外部设备看到的只是:
你 ↔ VPN服务器 ↔ 目标网站
对目标来说,请求来自 VPN 服务器; 对你来说,就像自己和世界“直连”了一样。
这就是“虚拟专用网络”的意义—— 让分散在不同网络环境下的设备,通过加密隧道组成一个逻辑上的私有网络。
要理解 VPN 的妙处,可以先回忆一下公司或校园网的体验: 局域网(LAN)内的设备互相能直接通信,不需要公网 IP。
而 VPN 的做法,就是在逻辑上模拟出这样的环境。 当你连上 VPN 后,系统会被分配一个来自 VPN 服务端的“虚拟内网地址”, 所有通过它传输的数据,都像在同一个虚拟交换机下。
对于游戏或办公软件来说,这一点非常重要—— 它们往往并不关心真实的网络路径,只要能 ping 通、能发现彼此就行。
这也是为什么很多联机工具(例如 Hamachi、ZeroTier、Tailscale) 能让两台电脑“隔着路由器也能看到彼此”。 它们的底层,本质上就是一个 VPN + 节点发现系统的组合。
虽然 VPN、P2P 和内网穿透的实现方式完全不同, 但它们都在解决同一个问题:如何让两个位于不同网络的主机互相通信。
技术 | 工作原理 | 典型场景 | 特点 |
---|---|---|---|
内网穿透 | 内网主机主动向外网节点建立连接,通过中继转发请求 | 远程桌面、Web服务、自建游戏服务器 | 部署灵活,延迟略高 |
P2P 打洞 | 双方协商 NAT 映射表,通过打洞直接建立连接 | 语音通话、文件传输、游戏联机 | 高效、低延迟,但对网络环境敏感 |
VPN 隧道 | 在客户端与服务器之间建立加密虚拟通道 | 企业办公、远程协作、虚拟局域网、游戏 | 稳定、安全、可控 |
三者不是竞争关系,而是互为补充。 例如:
现代联机系统的核心理念就是这三者的融合: 即通过虚拟化网络、自动化打洞、中继兜底, 在任何复杂环境下都能保证通信可达。
有时候,玩家会发现开了 VPN 之后游戏反而更卡,这其实是由网络路径决定的。
VPN 在传输时要经过:
你 → VPN服务器 → 游戏服务器
相比直接访问:
你 → 游戏服务器
显然中间多了一跳转发节点。 加上加密/解密带来的 CPU 开销,自然可能变慢。
当然,也有例外: 如果 VPN 服务商使用了更优的传输路径(比如更好的国际出口或中转路由), 那整体延迟反而可能更低。
这也是为什么有些专门的“游戏加速器”看起来像 VPN, 但其实在内部采用了专线中继 + 路由优化算法,而不是单纯的隧道转发。
VPN 从诞生至今,始终有三个最重要的用途:
换句话说,VPN 并不是某种“神秘工具”, 它只是提供了一种安全、抽象化、跨网络的通信手段。 它的真正价值,在于让复杂网络环境下的通信变得像“本地连接”一样简单。