线材
家里装修放线的时候除了埋网线,顺便还埋了几根光纤皮线,选用的是单模双芯的皮线。皮线比网线要便宜得多,放线时可以多穿几根,这样能做到有备无患,我在装修的时候当时不懂只放了一根线,好在最后埋完线测试的时候发现并没有折断的情况。
光纤皮线有好几种型号,局域网场景关注两个点:
单模和多模,对于普通用户来说主要区别是传输距离的区别,距离远选单模,家用场景其实多模也是可以的,想进一步了解可以看看这个:单模光纤与多模光纤的全面易懂的介绍。
单芯和双芯,这里建议一定要选双芯,最重要的是双芯才支持万兆,如暂时用不上万兆,双芯也能多一根备用。
其实埋线的时候我并没有想好后面万兆网络的应用,主要还是预留好未来升级网络的基础设施,等到真正要把万兆网络做组网的时候才发现埋线只是入坑的第一步。
万兆网的应用场景
我家的电视柜里放了一个 all in one 小主机,小主机的硬件方面支持 PCIE 插槽,软件方面主系统安装了 PVE,在 PVE 中又安装了 OpenWrt 软路由,以及其他的一些诸如 Plex 服务、Unifi AC 等需要长期在线的服务。
同时小主机还配备了一个 M.2 接口的 1TB 三星 SSD,为了更高效的利用 1TB 的存储空间,就做了一个极简的 NAS 网盘。我日常使用的主机是一款 M1 芯片的 Mac mini,存储才 256GB,这个 NAS 网盘正好能扩展给 Mac mini 使用,像代码仓库等都存储在这个 NAS 上,Mac mini 通过 NFS 自动挂载 NAS,开发时直接读写 NFS。
正是有了这个需求场景,万兆组网的需求就被我提上了日程。
如何连接
我家有两个重要的网络枢纽,一个是弱电箱,所有的网线、光纤线都会汇聚在弱电箱中,一个是电视柜,弱电箱中有好几条线与电视柜中的小主机连接。由于我目前只需要将 Mac mini 和小主机连接,最简单的办法是一根光纤线直连,但是考虑到灵活性,这里用到了光纤适配器(耦合器,也称法兰),这样可以省去一个光纤交换机,当然使用适配器会有一些损耗,但是损耗很小,可以接受。
埋在墙里的皮线是没有接头的,还需要连接上接头,这个接头再连接光模块,光模块最后插入到光口网卡中,这样才能完成网络连接,比网线连接要麻烦且复杂得多。
连接跳线
光纤线有很多种接头,这里不一一列举,室内局域网连接的光纤接头选用 LC 的接头就行,跳线需要另外购买。
但是这里的接头的连接需要非常专业的工具和工艺,不像网线自己拿个网线钳接水晶头这么简单。光纤连接有热熔和冷接两种,热熔的效果更好,但是专业度也更强,一般需要找专业做工程热熔的专业人士上门服务,当然也可以自己买工具做冷接,但是一套工具下来加上自己学习冷接操作,还不如找专业人士来上门做热熔。
请人做热熔的时候也要交待清楚自己的需求,我就因为一开始没说清楚,差点把我的光纤全部接成了千兆网,双芯线可以只连接其中一根线芯,这样只能组千兆,连接两根线芯才能组万兆,连接好之后还需要加装特殊的保护盒,否则脆弱的光纤线太容易被折断了,单芯和双芯使用的保护盒还不一样。
连接光模块
线材接好了接头之后,就是连接光模块了,光模块用于将光信号转换成电信号,光模块和线材要采用同一套标准。这里主要是单模和双模的区别,还需要注意的是,光模块可能还会挑交换机、网卡等设备,一般要求线材两头使用的光模块至少是同一个品牌的。我就因为网卡挑光模块,一开始买了便宜的华为光模块,后来只能换用兼容性更好的 Intel 光模块。光模块可以咸鱼上淘二手的。
网卡选用
All in one 小主机可以直接安装 PCIE 网卡,普通 PCIE 接口的万兆网卡在闲鱼上买二手的都还算比较便宜,如常见的 Intel X520,有单口和双口,这个看自己需要,驱动也比较常见,常见的 Linux 系统会自带。
而到了 Mac 这边就比较头痛了,Mac mini 肯定是没法直接使用 PCIE 接口的网卡,一开始我想着用雷电口的显卡扩展坞来转接 PCIE 的 Intel X520,但是尝试了好几种驱动都无法驱动,像 Sonnet 和 Small Tree 两家的驱动都不行,据说黑苹果是可以的。最后只能咬牙买了威联通的 T310G1S 外置光口网卡,只要有雷电口就能用,威联通使用的网卡芯片是经过苹果官方认证的,免驱使用,这也是网卡贵的原因。
一切就绪后,最后用光纤适配器将光纤线直连,接下来就是测速跑分环节了。
测速
使用 iperf3 进行测速,服务器为 PVE 中安装的 OpenWrt 软路由,网卡为虚拟网卡。
iperf3 -c 192.168.31.2 -t 10 -i 1
Connecting to host 192.168.31.2, port 5201
[ 5] local 192.168.31.13 port 49594 connected to 192.168.31.2 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 1.10 GBytes 9.43 Gbits/sec
[ 5] 1.00-2.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 2.00-3.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 3.00-4.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 4.00-5.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 5.00-6.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 6.00-7.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 7.00-8.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 8.00-9.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 9.00-10.00 sec 1.10 GBytes 9.41 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 11.0 GBytes 9.41 Gbits/sec sender
[ 5] 0.00-10.00 sec 11.0 GBytes 9.41 Gbits/sec receiver
测试结果为 9.41 Gbits/sec,接近 10G 网速,网上有说将 MTU 设置为 9000 会有提升,但在我的环境下实测后发现并没有什么变化。
测试另一个虚拟机,这里安装的是 Ubuntu 22,这个虚拟机和 OpenWrt 的虚拟机都是共用了 PVE 虚拟出来的万兆网卡,结果就比 OpenWrt 的损耗要大,且测速时的网速并不稳定,推测是流量需要经过 OpenWrt 路由器的转发,如有大神知道原因,还望指导。
iperf3 -c 192.168.31.6 -t 10 -i 1
Connecting to host 192.168.31.6, port 5201
[ 5] local 192.168.31.13 port 49667 connected to 192.168.31.6 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 1.09 GBytes 9.34 Gbits/sec
[ 5] 1.00-2.00 sec 1.02 GBytes 8.80 Gbits/sec
[ 5] 2.00-3.00 sec 1.09 GBytes 9.39 Gbits/sec
[ 5] 3.00-4.00 sec 1.09 GBytes 9.37 Gbits/sec
[ 5] 4.00-5.00 sec 1020 MBytes 8.55 Gbits/sec
[ 5] 5.00-6.00 sec 1.09 GBytes 9.39 Gbits/sec
[ 5] 6.00-7.00 sec 939 MBytes 7.88 Gbits/sec
[ 5] 7.00-8.00 sec 880 MBytes 7.38 Gbits/sec
[ 5] 8.00-9.00 sec 1012 MBytes 8.49 Gbits/sec
[ 5] 9.00-10.00 sec 1.04 GBytes 8.95 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 10.2 GBytes 8.75 Gbits/sec sender
[ 5] 0.00-10.00 sec 10.2 GBytes 8.75 Gbits/sec receiver
好了,接下来测试文件传输,由于 OpenWrt 的磁盘空间并不大,这里使用 Ubuntu 22 来做传输测试。
scp -c aes128-ctr ./ubuntu-20.04.3-live-server-amd64.iso chenyiguo@192.168.31.6:/home/chenyiguo/
ubuntu-20.04.3-live-server-amd64.iso 100% 1203MB 261.7MB/s 00:04
pv ubuntu-20.04.3-live-server-amd64.iso > ~/work-root/ubuntu-20.04.3-live-server-amd64.iso
1.17GiB 0:00:03 [ 354MiB/s] [==================================>] 100%
使用 scp 传输文件速度为 261.7MB/s ,scp 属于加密传输,另外再使用 pv 命令传输为 371.71 MB/s(MiB 换算成 MB 需 * 1.048576),注意这里的 ~/work-root/
是挂载了 Ubuntu 服务器上的 NFS 网络磁盘。
万兆网卡一般在 Windows 环境中传输文件测试能达到 1GB/s,但在我现有的 macOS 环境中测试无法达到 1GB/s,这里面可能会有多方面的原因,宿主机的磁盘 IO、虚拟机的磁盘 IO、虚拟机上的 NFS 都有可能存在性能瓶颈,但是可以肯定的是网络传输已经不是当前链路的性能瓶颈了。
将 Mac mini 的网卡切换成千兆网卡后进行对比测试。
iperf3 测试结果:
iperf3 -c 192.168.31.6 -t 10 -i 1
Connecting to host 192.168.31.6, port 5201
[ 5] local 192.168.31.90 port 50074 connected to 192.168.31.6 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 116 MBytes 970 Mbits/sec
[ 5] 1.00-2.00 sec 112 MBytes 942 Mbits/sec
[ 5] 2.00-3.00 sec 112 MBytes 941 Mbits/sec
[ 5] 3.00-4.00 sec 110 MBytes 926 Mbits/sec
[ 5] 4.00-5.00 sec 114 MBytes 957 Mbits/sec
[ 5] 5.00-6.00 sec 112 MBytes 942 Mbits/sec
[ 5] 6.00-7.00 sec 112 MBytes 941 Mbits/sec
[ 5] 7.00-8.00 sec 112 MBytes 941 Mbits/sec
[ 5] 8.00-9.00 sec 112 MBytes 941 Mbits/sec
[ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 1.10 GBytes 944 Mbits/sec sender
[ 5] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec receiver
文件传输测试结果:
scp -c aes128-ctr ./ubuntu-20.04.3-live-server-amd64.iso chenyiguo@192.168.31.6:/home/chenyiguo/
ubuntu-20.04.3-live-server-amd64.iso 100% 1203MB 111.0MB/s 00:10
pv ubuntu-20.04.3-live-server-amd64.iso > ~/work-root/ubuntu-20.04.3-live-server-amd64.iso
1.17GiB 0:00:10 [ 110MiB/s] [==================================>] 100%
测试结果表明万兆和千兆对比 iperf3 测速差距明显,文件传输相对来说差距会小很多,文件传输的性能还有进一步优化的空间,后面有优化效果再做单独介绍。
至此,家庭万兆光纤局域网组网算是成功了,光纤组网的专业性要求远超网线的组网,且组网成本比较高,要追求性价比的话确实不推荐,不过也算是高速局域网做好了基础准备。