用网页工具点对点传文件时,你可能遇到过怪事:同一 WiFi 下秒连,换成两台设备各用各的网络,有时能连上、有时连不上。这背后是 NAT 和防火墙在起作用——它们决定了两台设备能不能"找到彼此的门"。LanBeam 局域网快传 也受这条规律约束,把原理讲明白,遇到问题就不会慌。
先理解 NAT:一栋楼的传达室
你家路由器只从运营商那里拿到一个公网地址,家里所有设备共用它。设备发出的请求经过路由器时,会被换上路由器的地址再出去,回来的数据由路由器按记录分发到对应设备——这个"地址转换"就是 NAT,像传达室替整栋楼收发快递。
传达室的规矩是:只有"楼里的人先主动寄过信"的那个对象,回信才收;外面陌生号码直接寄来的信,往往被拒收。防火墙更进一步,会主动拦下可疑的连接请求。这两条规矩合在一起,意味着两台都躲在各自 NAT 后面的设备,谁也没法直接敲开对方的门。
ICE 和候选地址:先商量怎么走
WebRTC 建立连接前,两端会各自列出自己可达的地址,这叫候选(candidate),再由 ICE 框架逐对尝试:
- 主机候选:设备在自己局域网里的地址,比如 192.168.x.x——同一 WiFi 下的两台设备用这个直接握手,所以秒连
- 公网候选:经过路由器转换后呈现在公网上的地址和端口——跨网络连接主要靠它
- 中继候选:实在打不通时借道中继服务器转发——LanBeam 的设计是文件内容不经过服务器,所以不提供中继,跨网打不通时只能换网络环境
打洞:两边同时敲门
跨网络连接的关键技巧叫"打洞":两台设备在信令的协调下,几乎同时向对方的公网候选发包。路由器的 NAT 看到自家设备主动向对方发过包,就会放行对方回的包——两扇门同时打开一条缝,数据通道就穿过去了。
打洞能不能成功,取决于两边 NAT 的类型:家用路由器大多是"宽松型",成功率很高;一些企业网络、校园网和运营商级 NAT 规则严格,两边都是"严防死守"型时就可能失败。这不是某个工具的缺陷,而是所有点对点方案共同面对的物理现实——遇到打不通的网络,换一个网络环境(比如手机热点)通常就能解决。