请教网络聚合失败的问题

312 天前
 creeeeezy

家里的网络架构大致如下,Windows server 上通过 NIC teaming 将两个 2.5G 网口聚合在一起。

但实测的时候,从 Mac 上无论是 iperf3 还是 smb 传文件都只达到了 2.5G 的速度。

请教各位帮忙看看问题可能出在哪?

2635 次点击
所在节点    NAS
31 条回复
kuanat
311 天前
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 等等发送出去。

所以本质上应用层面上的单链路是否经由物理层面的单通道发送是不相关的两件事,正因为这种架构上的解耦,最终才能够实现单链路带宽翻倍的效果,同时还不需要特定的交换机支持。
porrt8
311 天前
@kuanat 请教下如果是跑 iperf 多线程模式的话,会被认作是多链路并使端口聚合在数据表现上生效嘛?
creeeeezy
311 天前
@kuanat 大体看懂了,感谢老哥讲解。
Ipsum
311 天前
交换机不支持 lacp 怕是很难做呀
v1
311 天前
@creeeeezy #20 厂家宣传吹嘘的场景是需要一台网管型交换机的,两个端口做 LACP 汇聚或者静态汇聚,设备面也要支持对应的模式。
shika
311 天前
balance-rr 模式交换机侧可以不做配置吗?涨知识了
@kuanat
mingtdlb
310 天前
聚合得看是哪一种,主备就不行。还有,聚合一般是基于流的负载分担,so 你多起两个 iperf ,才知道能不能满速
kuanat
310 天前
@porrt8 #22

没有关系,多链路的数据包也可以经过多网卡发送。多线程的情况下可以在不支持 rr 平衡模式的时候提供更好的带宽利用率,只是每个线程都无法超过单个网卡的最大带宽。
kuanat
310 天前
@shika #26

balance-rr 还有 tlb/alb 都不需要特定交换机支持,具体可以看 linux bonding 的文档。

但这个行为确实与交换机有关,当启用 balance-rr 的时候,在交换机看来多个端口对应设备的 MAC 地址在反复切换,交换机会有异常的表现。一般来说管理功能越高级的越可能出问题,傻瓜型的往往没有影响。
shika
310 天前
@kuanat 感谢解答!
0xD800
310 天前
高手好多,希望有朝一日我也能跟你们讨论。!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1091431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX