1

MacBook 与其他设备的低成本高性能数据传输方案

 1 year ago
source link: https://soulteary.com/2023/01/01/low-cost-high-performance-data-transfer-solution-for-macbook-and-other-devices.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

MacBook 与其他设备的低成本高性能数据传输方案

2023年01月01日阅读Markdown格式9077字19分钟阅读

本篇文章分享在不使用路由器的情况下,使用“数据线或网线”将 MacBook 与其他设备连接在一起,获得更高效率的数据交换性能。

最近考虑将 Mac 设备和其他的设备连在一起使用,比如之前在“廉价的家用工作站方案:前篇”或“装在笔记本里的私有云环境:K8s 集群准备”两篇文章里提到的大内存,多核心的设备与 MacBook 更高效的连通到一起,以及搭载 M1/M2 芯片的 MacBook 连接在一起。

因为目标设备都是笔记本,能够直接想到的成本比较低的方案便是使用有线或者无线路由器,将设备连通到一起。但是,借助路由器,会是传输效率最高的方案吗?或者会是成本最合理的方案吗?显然不是。

被抛弃的方案选型

单纯追求效率,首选方案中一定会有“光纤方案”的一席之位,早在 2005 年,苹果出品的 XSAN 就支持通过接入光纤方式来进行高效的数据交互操作。如果选择这个方案,我们可以选择比如 QNAP 出品的万兆雷电3转换器,支持将光纤 SFP+ 接口转换为传统的电口,这样的转换头大概 2000 元一只。忽略掉线缆、使用两个转换器直接组网,成本在 4000 元左右(可能触发优惠券)。

但是上面的方案中,我们只能覆盖 Mac 连通 Mac,或者 Mac 连通具备雷电接口的设备,当另外一个设备不支持雷电的时候,这个方案就无能为力了,比如是 AMD 芯片的设备,或者是阉割掉全功能雷电接口的某些厂商。

如果追求方便,我们或许会想到使用无线网络交换,现如今的 Mac 设备也好,新的笔记本设备也罢,基本都支持 Wi-Fi 6(非 Mac设备更换网卡成本 100 元左右),甚至 Wi-Fi 6E 规格进行数据传输,搭配一个支持 Wi-Fi 6 的无线路由器就能够得到理论千兆的传输速率。

作为第一批小米 Wi-Fi 6路由器的用户,在使用两年设备之后,就个人体验来说,如果是长时间的数据交互,还是可能遇到一些问题的。首先,延迟相比有线还是不够稳定;其次,想得到更好的传输效果,我们需要传输的设备都距离路由器比较近才能够得到好的效果。并且,在传输过程中,如果其他的设备进行下载或者上传,会影响总共可用的无线传输带宽,进而影响传输效果。

如果不用光纤、也不用无线,那么剩下的可选方案里,最经济实惠的只有使用“有线”传输了。

如果不考虑外出使用,理想状况,我们使用可选品牌和型号越来越多的2.5G、万兆(10G)交换机或者路由器,搭配雷电转万兆、USB 3(Type-C)转万兆的 USB 网卡,就能满足设备网络连接稳定,传输效率不差啦。

即使我们从长期使用角度来看,暂且忽略目前 2.5G 或者万兆设备的价格,依旧会发现两个问题:首先,雷电转万兆的 USB 网卡价格不逊前文中提到的雷电转光口的价格;其次,USB 目前市面上基本只有转 5G 速率的网卡(市面上没有 10GbE 的 USB NIC 控制器),5G 版本价格也不算便宜,在这个需求场景下显得非常鸡肋。

高性价比的数据交互、传输方案

那么,退而求其次的高性价比方案是什么呢?

考虑到我们还是会有携带设备外出的情况,所以如果组网连通依赖中心化设备(光纤终端、万兆交换机、高密或者支持 Wi-Fi 6E 的无线 AP),就不是那么好了,并且中心化设备也需要支付额外的成本。

上文提到的问题,如果我们将设备类型拆开,划分为与连接“雷电”的设备与“非雷电”设备,再排除掉上文中提到的问题,那么答案就很明显啦。

与支持雷电的设备,我们使用雷电数据线进行连接组网,满足连通和数据传输需求,成本只需要一根几十块钱的数据线。

与不支持雷电的设备,我们可以借助古老的“网线”直连,为了提升效率,除了直接使用笔记本目前都搭载的千兆网卡之外,还可以使用相对便宜的 2.5G USB 网卡来完成设备的连接。相比较上文中动辄几千的成本,购置两个 2.5G USB 网卡,搭配两条七类网线,包邮到家大概 300 块左右。

下面记录一下 Mac 和其他设备使用“数据线”直连的配置过程,以及目前的传输速率,先来记录使用雷电相互连接的 Mac 设备。

使用雷电数据线直连其他 Mac 或支持雷电协议的设备

支持雷电协议的设备,能够在使用雷电数据线连接设备彼此的时候,互相协调分配可用的 IP,并保证网络连通。

使用雷电数据线连接两台支持雷电的设备

使用雷电数据线连接两台支持雷电的设备

当设备使用雷电数据线连接之后,我们将能看到系统网络设置中多出一个“雷劈网桥”,稍等片刻,它会完成网络地址的分配,状态将会从“无 IP 地址” 变为“自分配的 IP”。

获得雷电网桥分配的 IP 地址

获得雷电网桥分配的 IP 地址

选择“网桥”,点击进去之后,我们将得到设备分配的 IP 地址。想要两台设备进行数据交互,我们需要使用相同的方式,打开系统设置中的网络选项卡,获得两台设备的 IP 地址。当然,也可以使用命令 arp -a,来获得使用雷电数据线连接的设备,所分配的地址:

arp -a
...
...
suyangdedahaomacbook-pro.local (169.254.190.176) at 82:e7:xx:xx:xx:1 on bridge0 [ethernet]
...
...

接下来,我们可以使用 iperf3 测试连接速度,如果你的 Mac 设备没有安装它,可以通过 brew install iperf3 来完成安装。然后选择其中一台作为服务器,另外一台作为客户端,来模拟数据传输下载,得到网络连接速度。

比如,我在其中一台上输入 iperf3 -s 启动测速服务端:

iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------

然后接着,在另外一台设备上输入 iperf3 -c 169.254.190.176 ,设置好要测试的 IP 地址,对雷电线另外一头的设备进行压力测试:

iperf3 -c 169.254.190.176                    
Connecting to host 169.254.190.176, port 5201
[  5] local 169.254.13.145 port 56484 connected to 169.254.190.176 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  1.67 GBytes  14.3 Gbits/sec                  
[  5]   1.00-2.00   sec  1.86 GBytes  16.0 Gbits/sec                  
[  5]   2.00-3.00   sec  1.84 GBytes  15.8 Gbits/sec                  
[  5]   3.00-4.00   sec  1.94 GBytes  16.6 Gbits/sec                  
[  5]   4.00-5.00   sec  1.90 GBytes  16.3 Gbits/sec                  
[  5]   5.00-6.00   sec  1.85 GBytes  15.9 Gbits/sec                  
[  5]   6.00-7.00   sec  1.78 GBytes  15.3 Gbits/sec                  
[  5]   7.00-8.00   sec  1.97 GBytes  16.9 Gbits/sec                  
[  5]   8.00-9.00   sec  1.90 GBytes  16.3 Gbits/sec                  
[  5]   9.00-10.00  sec  1.91 GBytes  16.4 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  18.6 GBytes  16.0 Gbits/sec                  sender
[  5]   0.00-10.00  sec  18.6 GBytes  16.0 Gbits/sec                  receiver

iperf Done.

上面的输出日志中,我们得到了 16.0 Gbits 的测试结果。

但其实,我们应该稍微拉长一些测试时间,以及可以选择忽略掉前几次速度可能不够客观的数据反馈,以及适当调整下速度的计量单位,方便我们与日常使用的 MB/s 进行转换。比如,在下面的命令中,我声明要使用 “MB” 作为单位,忽略最开始的 5 次数据结果,并且将测试时间拉长至 20 s:

iperf3 -c 169.254.190.176 -f MB --omit 5 --time 20
Connecting to host 169.254.190.176, port 5201
[  5] local 169.254.13.145 port 56505 connected to 169.254.190.176 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  1.79 GBytes  1832 MBytes/sec                  (omitted)
[  5]   1.00-2.00   sec  1.98 GBytes  2030 MBytes/sec                  (omitted)
[  5]   2.00-3.00   sec  1.97 GBytes  2016 MBytes/sec                  (omitted)
[  5]   3.00-4.00   sec  1.93 GBytes  1977 MBytes/sec                  (omitted)
[  5]   4.00-5.00   sec  1.90 GBytes  1946 MBytes/sec                  (omitted)
[  5]   0.00-1.00   sec  1.93 GBytes  1973 MBytes/sec                  
[  5]   1.00-2.00   sec  1.90 GBytes  1946 MBytes/sec                  
[  5]   2.00-3.00   sec  1.95 GBytes  1994 MBytes/sec                  
[  5]   3.00-4.00   sec  2.03 GBytes  2079 MBytes/sec                  
[  5]   4.00-5.00   sec  1.89 GBytes  1933 MBytes/sec                  
[  5]   5.00-6.00   sec  1.90 GBytes  1943 MBytes/sec                  
[  5]   6.00-7.00   sec  2.01 GBytes  2061 MBytes/sec                  
[  5]   7.00-8.00   sec  1.97 GBytes  2016 MBytes/sec                  
[  5]   8.00-9.00   sec  1.84 GBytes  1883 MBytes/sec                  
[  5]   9.00-10.00  sec  1.95 GBytes  1992 MBytes/sec                  
[  5]  10.00-11.00  sec  1.93 GBytes  1979 MBytes/sec                  
[  5]  11.00-12.00  sec  1.93 GBytes  1981 MBytes/sec                  
[  5]  12.00-13.00  sec  2.07 GBytes  2118 MBytes/sec                  
[  5]  13.00-14.00  sec  1.98 GBytes  2029 MBytes/sec                  
[  5]  14.00-15.00  sec  1.92 GBytes  1968 MBytes/sec                  
[  5]  15.00-16.00  sec  2.00 GBytes  2044 MBytes/sec                  
[  5]  16.00-17.00  sec  1.89 GBytes  1935 MBytes/sec                  
[  5]  17.00-18.00  sec  1.89 GBytes  1931 MBytes/sec                  
[  5]  18.00-19.00  sec  1.86 GBytes  1904 MBytes/sec                  
[  5]  19.00-20.00  sec  1.83 GBytes  1872 MBytes/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-20.00  sec  38.7 GBytes  1979 MBytes/sec                  sender
[  5]   0.00-20.00  sec  38.7 GBytes  1979 MBytes/sec                  receiver

iperf Done.

测试结束后,我们能够看到数据传输速度的结果是 1979 MBytes,除以 8 ,得到差不多 247 MB/s 的速度。

在完成基础测试之后,我们使用日常数据传输命令 scp 来进行一个简单的额外测试。

允许 Mac 通过 SSH  进行远程登录

允许 Mac 通过 SSH 进行远程登录

想要完成 scp 的数据拷贝,我们需要在系统设置中的“通用”菜单里找到“共享”,然后在“共享”中打开“远程登录”。

接着,使用常规命令,不指定传输数据使用的加密算法,从另外一台设备下载“Ubuntu 22.04”的系统镜像到本地:

scp 169.254.13.145:~/linktest/ubuntu-22.04.1-live-server-amd64.iso .
([email protected]) Password:
ubuntu-22.04.1-live-server-amd64.iso        100% 1407MB 204.9MB/s   00:06

可以看到传输速度在 200MB/s 出头,应该是加密算法影响了传输效率,这里我们将加密算法指定为计算量比较低的方法,再进行尝试:

scp -c aes128-ctr 169.254.13.145:~/linktest/ubuntu-22.04.1-live-server-amd64.iso .
([email protected]) Password:
ubuntu-22.04.1-live-server-amd64.iso        100% 1407MB 234.2MB/s   00:06

scp -c aes128-ctr 169.254.13.145:~/linktest/ubuntu-22.04.1-live-server-amd64.iso .
([email protected]) Password:
ubuntu-22.04.1-live-server-amd64.iso        100% 1407MB 234.1MB/s   00:06

可以看到传输速度到达了 234MB/s 左右,接近我们使用 iperf3 测试的结果。

相比较使用中心化设备,我们只需要一根数据线,就能随时随地的进行至少 200MB/s 的数据传输了,比多数环境中的千兆网络满载速率要高一倍,是不是还挺不错的?

使用网线与其他设备直接连接

因为我的 2.5G 网卡还在路上,所以我先使用普通的千兆网卡完成本文的配置部分,等待网卡到位,我在更新/补充数据部分。

这里,我使用 Mac 来与一台 AMD CPU 的 Ubuntu 笔记本进行连接,当我们使用网线插上两台设备后,此时设备并不能够直接使用,还需要进行额外的设置。

创建一个虚拟网络接口

创建一个虚拟网络接口

还是在系统设置中,打开网络设置,然后选择“管理虚拟接口”。

新建桥接器

新建桥接器

接着,在弹出的对话框中选择“新建桥接器”。

选择 USB 网卡,创建桥接器

选择 USB 网卡,创建桥接器

选择要桥接的设备为我们的 USB 网卡,然后起个名字,按“创建”按钮。点击创建,和上文中使用雷电数据线连接设备一样,我们将能够看到一个黄色的小圆点,以及网桥状态显示为“自分配的 IP”。

为网桥设置 IP 地址

为网桥设置 IP 地址

进入创建好的网桥的详细设置中,先选择“TCP/IP”,然后选择“手动指定 IP 地址”,在 IP 地址中填写一个合适的地址,例如:192.168.199.2

等待设置完毕
等待设置完毕

设置完毕,我们返回网络列表,可以看到“黄色的小圆点”变成了“绿色的小圆点”。

这里,我们也需要设置网线连着的另外一台机器,如果你的系统不支持设置网桥,并且那台设备也不需要直接联网,可以直接修改该设备网卡中的 IP 地址,将 IP 地址的网段和网络掩码修改的和 Mac 设备一致即可,比如 192.168.199.3255.255.0.0

为了完成性能验证,我们和上面一样,首先需要选择一台设备执行 iperf3 -s 启动测试服务端。

然后在另外一台设备上输入命令,来完成测试:

iperf3 -c 192.168.199.2 -4 -f MB --omit 5 --time 20
Connecting to host 192.168.199.2, port 5201
[  5] local 192.168.199.3 port 50140 connected to 192.168.199.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   114 MBytes   114 MBytes/sec    0    431 KBytes       (omitted)
[  5]   1.00-2.00   sec   113 MBytes   113 MBytes/sec    0    499 KBytes       (omitted)
[  5]   2.00-3.00   sec   112 MBytes   112 MBytes/sec    0    523 KBytes       (omitted)
[  5]   3.00-4.00   sec   112 MBytes   112 MBytes/sec    0    602 KBytes       (omitted)
[  5]   4.00-5.00   sec   111 MBytes   111 MBytes/sec    0    602 KBytes       (omitted)
[  5]   0.00-1.00   sec   113 MBytes   113 MBytes/sec    0    602 KBytes       
[  5]   1.00-2.00   sec   112 MBytes   112 MBytes/sec    0    602 KBytes       
[  5]   2.00-3.00   sec   113 MBytes   113 MBytes/sec    0    602 KBytes       
[  5]   3.00-4.00   sec   112 MBytes   112 MBytes/sec    0    602 KBytes       
[  5]   4.00-5.00   sec   112 MBytes   112 MBytes/sec    0    602 KBytes       
[  5]   5.00-6.00   sec   112 MBytes   112 MBytes/sec    0    602 KBytes       
[  5]   6.00-7.00   sec   113 MBytes   113 MBytes/sec    0    602 KBytes       
[  5]   7.00-8.00   sec   112 MBytes   112 MBytes/sec    0    602 KBytes       
[  5]   8.00-9.00   sec   112 MBytes   112 MBytes/sec    0    602 KBytes       
[  5]   9.00-10.00  sec   113 MBytes   113 MBytes/sec    0    602 KBytes       
[  5]  10.00-11.00  sec   111 MBytes   111 MBytes/sec    0    602 KBytes       
[  5]  11.00-12.00  sec   113 MBytes   113 MBytes/sec    0    602 KBytes       
[  5]  12.00-13.00  sec   112 MBytes   112 MBytes/sec    0    602 KBytes       
[  5]  13.00-14.00  sec   113 MBytes   113 MBytes/sec    0    602 KBytes       
[  5]  14.00-15.00  sec   112 MBytes   112 MBytes/sec    0    950 KBytes       
[  5]  15.00-16.00  sec   112 MBytes   113 MBytes/sec    0    950 KBytes       
[  5]  16.00-17.00  sec   112 MBytes   113 MBytes/sec    0    950 KBytes       
[  5]  17.00-18.00  sec   112 MBytes   112 MBytes/sec    0    950 KBytes       
[  5]  18.00-19.00  sec   111 MBytes   111 MBytes/sec    0   1.38 MBytes       
[  5]  19.00-20.00  sec   112 MBytes   113 MBytes/sec    0   1.38 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-20.00  sec  2.19 GBytes   112 MBytes/sec    0             sender
[  5]   0.00-20.00  sec  2.19 GBytes   112 MBytes/sec                  receiver

iperf Done.

可以看到,使用千兆网线和网卡连接的两台设备,能够跑到 110MB/s 的满速。

同样的,使用 scp 进行速度测试,因为上限是 100MB/s ,所以我们就不指定传输加密算法了,设备性能足够高,怎么都能跑满这个千兆带宽:

scp -P 55555 ./ubuntu-22.04.1-live-server-amd64.iso 192.168.199.3:/app/linktest/
ubuntu-22.04.1-live-server-amd64.iso        100% 1407MB 110.2MB/s   00:12

scp -P 55555 192.168.199.3:/app/linktest/ubuntu-22.04.1-live-server-amd64.iso .
ubuntu-22.04.1-live-server-amd64.iso        100% 1407MB 110.7MB/s   00:12

这篇内容就先到写到这里啦。

希望能够帮助到想要更高效率完成数据交互、传输,但是同样不希望增加太多成本的你,新年快乐。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK