当前位置:   article > 正文

ZeroTier 和 FRP 速度对比实验(附搭建方法)_zerotier速度可以达到多少

zerotier速度可以达到多少

起因

最近和两个表妹一起玩星露谷物语,但是这个游戏的 steam 联机国内超卡,所以我搭了 FRP 内网穿透服务。过程中了解到ZeroTier ,就顺手做了 ZeroTier 和 FRP 的测速对比实验。

测试

测试条件

轻量级腾讯云:公网IP,出站带宽 6Mbps,部署 FRP 服务器 和 Zerotier moon
主机1:组装台式机,windows10,中国联通宽带,100Mbps 下载 / 40Mbps 上传
主机2:Macbook Air 2014,windows10,中国联通手机流量,200Mbps下载 / 50Mbps 上传
此时 主机1 和 主机2 都没有公网IP,无法实现直连

测试指标

下载速度,上传速度,延迟,抖动

测试工具

psping:用于测试延迟,抖动
iperf3:用于测试下载速度,上传速度
speedTestX:docker版,用于测试所有指标

测试结果
主机1 <-> FRP <-> 主机2

延时与抖动
在这里插入图片描述
上传速度
在这里插入图片描述
下载速度
在这里插入图片描述

主机1 <-> 主机2 (ZeroTier + ZeroTier moon)

延时与抖动
在这里插入图片描述
上传速度
在这里插入图片描述
下载速度
在这里插入图片描述

主机1 <-> 腾讯云在这里插入图片描述
主机2 <-> 腾讯云在这里插入图片描述
测试结论

在测试条件下
ZeroTier 的 网络速度比 FRP 快很多
ZeroTier 的 网络延时 和 FRP 差不多
ZeroTier 的 网络抖动 高于 FRP

可以看到 FRP 这种转发服务,测试结果接近腾讯云的带宽上限 6mbps;
ZeroTier 的测试结果远高于 6mbps,可见它的原理不是全转发,应当是使用了 TCP 打孔,因为网络同属中国联通所以比较成功。推测如果 主机2 从中国联通的手机流量换成中国移动的手机流量,传输速度可能会大受影响。

附:FRP 与 ZeroTier 的安装使用

本文假定以星露谷联机为目的。

FRP

FRP 的原理不难理解,就是转发。将公网 IP 服务器的一个端口接收到的所有数据,转发到内网 IP 的主机上,这样就使得内网 IP 的主机仿佛拥有了公网 IP 一样。

FRPs

登录腾讯云,下载 FRP,编写配置文件,frps.ini

[common]
bind_port = 7939
token = xxxxxxxxxxxxxxxx
  • 1
  • 2
  • 3

bind_port 是 绑定本地端口。
token 是 密钥,使用这个服务器的凭证。
到腾讯云的防火墙面板放行 TCP 7939 端口。
然后写一个小脚本 frp_start 用来启动 FRP 服务器。

#!/bin/bash
nohup ~/frp/frps -c ~/frp/frps.ini > frp.log  2>&1 &
  • 1
  • 2

运行脚本,FRP服务端搭建完成。
cat frp.log查看运行日志,ps -ef|grep frps查看进程。

FRPc

来到星露谷主机的 windows 主机1,下载 FRP,编写配置文件,frpc.ini

[common]
server_addr = 172.7.76.71
server_port = 7939
token = xxxxxxxxxxxxxxxx

[stardew-valley]
type = udp
local_ip = 127.0.0.1
local_port = 24642
remote_port = 24642

[iperf3]
type = tcp
local_ip = 127.0.0.1
local_port = 5201
remote_port = 5201

[iperf3-u]
type = udp
local_ip = 127.0.0.1
local_port = 5201
remote_port = 5201
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

server_addr 腾讯云的公网IP
server_port, token 和 frps.ini 一样
下面是三个隧道,stardew-valley 用来联机星露谷,剩下两个用来做速度测试。
local_port 是本地端口,remote_port 是服务端端口,
stardew-valley 隧道 会把本机的 24642 udp端口,映射到腾讯云 172.7.76.71 的 24642 udp端口。
到腾讯云的防火墙面板放行 UDP 24642,TCP 5201,UDP 5201。
然后在主机1上运行 frpc,保持此程序一直运行。

frpc -c frpc.ini
  • 1

主机1 正常建房,另外两个星露谷玩家在联机窗口直接输入 172.7.76.71 即可。

ZeroTier

ZeroTier是虚拟局域网,所有用户通过 ZeroTier-one 连接到一个虚拟化的局域网中。这种方案所有用户都必须安装使用 ZeroTier-one

ZeroTier-one

在 ZeroTier 网站上注册账户,创建网络,并把 network ID 记录下来。
然后参照官网在所有要参与联机的节点上都安装 zerotier-one。
加入网络(如果是windows,可以用 ZeroTier-ui 图形化操作)

sudo zerotier-cli join db64858fxxxxxxxx
  • 1

注意加入后,还要等待批准,在 ZeroTier 网站上可以看到已加入的节点,把前面的 Auth? 复选框选上即可批准,服务器会自动给该节点分配虚拟局域网的 IP。
该命令可以确认自己的 IP。

sudo zerotier-cli listnetworks
  • 1
ZeroTier moon 服务器搭建
生成 moon.json

ZeroTier moon 服务器需要公网IP,因此用腾讯云来搭建。

cd /var/lib/zerotier-one
sudo -s
zerotier-idtool initmoon identity.public >>moon.json
vim moon.json
  • 1
  • 2
  • 3
  • 4

vim 修改这一条"stableEndpoints": ["172.7.76.71/9993"],填入 公网IP 和 端口

生成 moon 签名文件
zerotier-idtool genmoon moon.json
  • 1

可以看到生成了一个类似 000000xxxxxxxxxxx.moon 的文件,新建 moons.d 文件夹并将此文件移入

mkdir moons.d
mv 000000xxxxxxxxxxx.moon moons.d
  • 1
  • 2

然后重启 zerotier-one 服务

service zerotier-one restart
  • 1
加入 moon 节点
zerotier-cli orbit [moon.json 文件中的 id] [moon.json 文件中的 id]
  • 1

这里注意 ID 要写两次。这条命令要在所有节点上全部运行一遍。
在非 moon 节点上执行如下语句验证 moon 节点是否添加成功

zerotier-cli listpeers
  • 1

应当可以看到类似

200 listpeers xxxxxxxxxx 172.7.76.71/9993;4214;4090 124 1.10.1 MOON
  • 1

则说明 moon 节点设置成功。

联机游戏

主机1 用 ZeroTier-ui 图形界面看一下自己的 IP,或者用 zerotier-one-cli listnetworks 获取。
然后正常建房,其他玩家输入主机 IP 即可。

联机方案简单讨论

最终选择 FRP 来联机星露谷。
游戏联机传输的数据通常都很少,决定联机体验的关键是延迟和抖动。因此 ZeroTier 速度快的优势无法发挥。
更关键的是,选择 FRP 的话,只有主机需要折腾 FRPc,其他玩家只需要知道一个 IP 就行,ZeroTier 要一人装一个,对于非专业人士来说比较劝退。
星露谷

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/851949
推荐阅读
  

闽ICP备14008679号