技术解析

同时使用多网卡提升树莓派网络利用率
0
2021-06-28 05:15:46
idczone

树莓派 3 自带的有线网卡是 100M 的,无线网卡是 72M 的,都比较慢。想提升网速的话,最直接的方法是使用 usb 网卡,千兆的有线网卡或者 450M 以上的 2.4GHz 无线网卡或者 5GHz 无线网卡。但因为树莓派 3 的 usb 接口是 2.0 的,而且 tf 卡也要共享带宽,所以也提升不了太多,而高速的 usb 网卡也不便宜(千兆 usb 有线网卡最便宜大概要 50 多,450M 以上的 usb 无线网卡更贵),而且大家手头上通常没有闲置的,为此购买不大值得。

那么一个间接的方法是同时使用有线和无线网卡,这样合理使用的话速度可以叠加。因为我有一个闲置的 300M usb 无线网卡,所以将它和内置有线网卡一起使用(因为测试过,它和内置无线网卡一起使用的话,会互相影响,速度反而更慢,所以不用内置无线网卡了),这样理论上就有 400M 的带宽了,当然实际上达不到。

但一起使用的话需要一些技术手段,如果只是(在同一个网段)简单启用双网卡,虽然两个 ip 地址都能用,但实际上只有一个网卡会工作,因为所有的流量都走到了路由表里第一个网卡了,这样肯定是不行的。那么大致有如下几个方法: 1、两个网卡分别接入不同的网段。 2、两个网卡绑定在一起使用。 3、配置路由表,让两个网卡在同一个网段可以同时使用。

因为我的网络环境很简单,只有一个路由器和一个网段,所以方法 1 我就不考虑了。但如果有两个网段的话,方法 1 是最简单的。开始时我想使用方法 2,将两个有线网卡绑定到一起来共享 1 个 ip 是比较简单的,但将一个有线网卡和一个无线网卡绑定到一起,则麻烦很多,网上资料也比较杂乱。另外因为我配置也是通过 ssh 进行的,不能把网络连接搞断了。还好我还有内置无线网卡可以使用,如果一共只有两个网卡,那几乎就没办法配置了。但即使这样也很麻烦,最后几经尝试都以失败告终。

最后只能使用方法 3。方法 3 的好处是配置简单,但缺点是使用起来比较麻烦,需要自己来做负载均衡,不过灵活性比较高。

我路由器地址是 192.168.1.1,有线网卡是 eth0,无线网卡是 wlan0,在路由器上分别绑定到 192.168.1.6 和 192.168.1.7。那么在两个网卡都连接上后,只需要执行这样一个脚本,就可以让两个网卡同时工作了:

ip route add 192.168.1.0/24 dev eth0 src 192.168.1.6 table 100
ip route add default via 192.168.1.1 dev eth0 table 100
ip rule add from 192.168.1.6 lookup 100

ip route add 192.168.1.0/24 dev wlan0 src 192.168.1.7 table 200
ip route add default via 192.168.1.1 dev wlan0 table 200
ip rule add from 192.168.1.7 lookup 200

具体效果是通过 192.168.1.6 访问树莓派会走有线网卡,通过 192.168.1.7 访问树莓派会走无线网卡。如果从树莓派下载多个文件,可以通过轮询或者随机选择 ip 来生成文件地址列表文件,然后使用 aria2c -i 文件列表 来下载,就可以同时使用两个网卡了。

如果是在树莓派往外连接,还是要看路由表里哪个网卡在前边(用 ip route 命令查看,一般有线网卡在前边),另外也可以在命令里指定网卡,比如用 curl --interface eth0 或者 wget --bind-address 192.168.1.6

可以使用了后,重点就是速度能提升多少了。在我的环境,从树莓派往电脑下载文件,树莓派内置有线网卡能达到 11.3 MB/s,300M 的无线网卡,速度最快能达到 21 MB/s 出头,但不稳定,容易降到十几兆。一起使用的话,最快可以达到 30 MB/s 出头,但容易降到 25 - 26 MB/s。效果还是非常明显的。


所以我买的 orangepi pc2,千兆网卡,可惜 usb 还是 2.0 的,存储还是有瓶颈,不知道什么时候能出 usb3.0 的 pi 呢?

树莓派的 io 不行

速度能达到多少?

太给力了!

我感觉综合考虑二手笔记本可能是比较不错的选择,不到一千,性能可以,内存大,有 usb 3.0,有千兆有线网卡,还自带屏幕,功率 10w 出头,体积较小,安静,就是坏了的话比较麻烦。其他的选择要么有明显的短板,要么性价比低,要么功率高或者噪声大。

同意,就算是现在新出的微型电脑,N3450+4g+64g 也不到 1000,性能好多了,还有三个 USB3 和千兆,可玩性高多了。

所以我玩的是带 3.0USB 口子的 ATOM 主板,比树莓派便宜,比树莓派可玩性高,性能横扫树莓派几条街,树莓派原来的定义是是卖给国外学生学习编程的廉价开发板,后来因为资料多便宜才被一些人用作其他用途

没事我就蹲闲鱼收坏屏 ATOM 寨板,最便宜的一个 35 块就收到了,不过是 2G 内存 USB2.0 而且没引出 3.0 针脚的 Z3735F 板子

有 lede 的话可以看下 mwan3 的实现,不仅实现了负载均衡还有这之上的策略路由。iptables 的关键记录:
[email&iptables -t mangle -L mwan3_policy_wan_balan
ced
Chain mwan3_policy_wan_balanced (3 references)
target prot opt source destination

MARK all -- anywhere anywhere
mark match 0x0/0xff00 statistic mode random probab
ility 0.50000000000 /* wan2 1 2 */ MARK xset 0x200/0xff0
0
MARK all -- anywhere anywhere
mark match 0x0/0xff00 /* wan 1 1 */ MARK xset 0x10
0/0xff00

嗯,直接用 iptables 就可以做负载均衡,以后可能搞一下。

之前我也考虑过这种,但有一个树莓派一个旧笔记本够用了,弄太多设备也没什么用,就不再考虑了。当初买树莓派时还想着玩玩硬件方面的东西,后来也没兴趣玩了。另外二手瘦终端貌似也是不错的选择,几十到几百的都有,扩展性要比寨板好不少。

如果是多个有线网卡,默认情况下系统不会让上游交换机学习到多个 mac 地址,也就是说在响应 arp 请求时总会使用某一个网卡的 mac 地址告诉上游,在上游交换机看来这个主机只有一个网卡,具体可以看这个: http://linuxinsight.com/proc_sys_net_ipv4_conf_eth0_arp_filter.html,但有线加无线是什么情况没测试过,看来只需要改改路由表就行了

上一条风格好差,没法修改或删除,大家凑合看吧。另外补充系统不会让交换机学习到多个 mac 的前提是多个网卡在同一个网络中

树莓派本身性能不行啊

有个东西叫 multi path tcp

大概搜了下,挺复杂了,而且好像要服务端客户端都得改,但我的客户端是手机、Windows 等等。

嗯,如果是两个有线网卡就很容易了,无线网卡多了好几个步骤,麻烦不少。

我記得 rpi 系列內建的有線網卡跟 USB 是同一個 bus
不管怎搞上限差不多就是 USB 2.0 的 30MB/s 左右...
rpi3 內建的 wifi 是走 SDIO 這個倒是可以拿來增加一點頻寬

那样意义应该也不是很大,tf 卡和 u 盘的速度同样限制在 usb 2.0。

分母更大,感觉“利用率”会下降

为什么不用 bonding mode=5

读取本地 usb2.0 上挂的移动硬盘速度能到 20 多 M,通过网卡读取路由器上挂载的 usb3.0 U 盘上的文件速度能到 70 多 M。

还是受限于树莓派的总线速度吧,30M/s 已经接近极限了

你尝试过吗,我没弄成功。

那 usb 2.0 就是瓶颈了,但树莓派 usb 2.0 读读卡器里的 sd 卡也能达到 35 M 以上,20 多 M 有点不对劲吧,是不是文件系统的问题。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服