家里的网络架构大致如下,Windows server 上通过 NIC teaming 将两个 2.5G 网口聚合在一起。
但实测的时候,从 Mac 上无论是 iperf3 还是 smb 传文件都只达到了 2.5G 的速度。
请教各位帮忙看看问题可能出在哪?

家里的网络架构大致如下,Windows server 上通过 NIC teaming 将两个 2.5G 网口聚合在一起。
但实测的时候,从 Mac 上无论是 iperf3 还是 smb 传文件都只达到了 2.5G 的速度。
请教各位帮忙看看问题可能出在哪?

1
0x663 Nov 21, 2024
数据先流转到路由器然后再分发给你的 mac 吧?我觉得可能是这样,你换个 10G 得路由器试试。
|
2
mohumohu Nov 21, 2024
小米的是傻瓜交换机吧,支持聚合吗?
|
3
shika Nov 21, 2024 via Android
聚合模式是什么?
|
4
opengps Nov 21, 2024
聚合提高网速本身得有多个连接,你 smb 拷贝文件有可能只是在用一个连接
|
5
chachi Nov 21, 2024
用 win 作为客户端测试下
mac 的 smb 有点一言难尽 |
6
Karte Nov 21, 2024
先确定下是每个端口都有 10G, 还是总工 10G
|
7
realpg PRO 只能跑 2.5G 是正常的 能跑到 5G 才不对
|
8
dode Nov 21, 2024
试试 smb 多链路
|
9
dreamage Nov 21, 2024
iperf3 -c <server_ip> -P <num_threads> 搞 10 个线程试试
|
10
creeeeezy OP @0x663 之前 Windows server 这台机器装的 NAS 系统提供的网卡聚合,是可以让速度达到 5G 的。底层应该是 Linux 的网卡 bonding
|
11
creeeeezy OP @realpg 之前 Windows server 这台机器装的 NAS 系统提供的网卡聚合,是可以让速度达到 5G 的。底层应该是 Linux 的网卡 bonding
|
15
LGA1150 Nov 21, 2024 via Android
L2 聚合一般使用哈希来均衡流量,需要多个客户端或多条 TCP 连接才有效果。要想均衡单条 TCP 只能用 balance-rr 模式,且有可能因为 TCP 乱序导致负优化。
|
17
shika Nov 21, 2024 via Android 我查了半天的结论是,在交换机侧不做配置的情况下,无论是 windows 的 nic 组合还是 Linux 的 bonding ,似乎都不能实现你想要的带宽叠加(Linux 的 bonding mode 5 和 6 有点儿不太确定)。想问一下,NAS 系统下你是如何测试带宽的呢,带宽叠加可能是 SMB 多通道的功劳,而不是 Linux 的网卡 bonding 。
|
21
kuanat Nov 21, 2024 OP 描述的现象的实质与单链路和多链路没有关系,我这里简单解释一下,就以 OP 的环境为例,L2 交换机没有端口聚合的功能。
L2 交换机的工作原理是根据 MAC 将数据包发送到特定的物理端口上,物理端口对应设备的 MAC 是通过记忆或者 arp 协议来更新的。L2 链路聚合会使聚合的 NIC 设备共享相同的 MAC 。 设想客户端 MacBook 通过 smb 协议访问 Win/Linux 资源,这是个单链路的请求,到达交换机端口的时候,不同交换机可能有不同处理方式,不管怎么样,都只会通过一个口到达 Win/Linux 。 由于 Win 不支持 round robin 的平衡模式,所以返回数据一样只会走聚合链路中的一个。这是常说的单链路无法超过单一接口最大速率的情况。Linux bonding 的区别在于,返回数据(包)会轮流经由两个网卡发送,所以可以同时利用两个 NIC 的带宽。当这些数据包到达交换机的时候,又会被交换到客户端的那一个端口上。 能够实现这个效果的原理就在于 linux bonding balance-rr 这个实现。其他的负载平衡方式主要看 hash 参数,也有些自适应的模式能达到类似效果。更底层的原因是 linux 网络栈是内核实现,来源不同的包只要具有相同的元组就可以被内核转交给应用程序正常处理,而应用程序构造的数据包交由内核之后,经由什么途径发出与应用程序无关。 这个实现对交换机没有要求,如果交换机可以对两个端口做聚合会更好一些,这样就不需要反复更新 MAC 与端口的绑定。可能存在的问题是乱序,即顺序包经由两个 NIC 到达交换机时先后顺序错乱了。双 NIC 聚合可能还好,数量越多 rr 模式越可能产生乱序。 PS 上面说得可能有些抽象,如果有 socket 编程经验可能更容易理解一些。 关键点是网络栈是内核实现,协议/IP/端口这些都是属于内核的,而不是属于某个应用的,同样也不属于某个网络设备。应用只能通过 bind 之类的方法获得 IP 端口的使用权,内核收到的数据包,把内部应用层的部分交给应用程序。应用程序处理完毕后,发出的数据包实际还要回内核,由内核包装上外层协议并完成路由(一般说的四表五链),最终到达网络设备 NIC 的时候,再做 L2 层封装上 MAC 等等发送出去。 所以本质上应用层面上的单链路是否经由物理层面的单通道发送是不相关的两件事,正因为这种架构上的解耦,最终才能够实现单链路带宽翻倍的效果,同时还不需要特定的交换机支持。 |
24
Ipsum Nov 22, 2024 via Android
交换机不支持 lacp 怕是很难做呀
|
27
mingtdlb Nov 22, 2024
聚合得看是哪一种,主备就不行。还有,聚合一般是基于流的负载分担,so 你多起两个 iperf ,才知道能不能满速
|
28
kuanat Nov 22, 2024
|
29
kuanat Nov 22, 2024 @shika #26
balance-rr 还有 tlb/alb 都不需要特定交换机支持,具体可以看 linux bonding 的文档。 但这个行为确实与交换机有关,当启用 balance-rr 的时候,在交换机看来多个端口对应设备的 MAC 地址在反复切换,交换机会有异常的表现。一般来说管理功能越高级的越可能出问题,傻瓜型的往往没有影响。 |
31
0xD800 Nov 23, 2024
高手好多,希望有朝一日我也能跟你们讨论。!
|