我正在建立一个测试实验室来支持我正在开发的网络监控应用程序。
我编写了一个简单的 UDP 数据包生成器和接收器,并使用 iperf3 创建一些批量后台流量。我的监控应用程序在 iperf3 生成的噪音中查找由我的数据包生成的 UDP 数据包。
该系统使用带有 SFP+ 收发器的光纤 10G 以太网。
让我们调用我的 UDP 数据包生成器机器 A、我的 UDP 接收器 B、iperf3 服务器 C 和我的监控机器 D。
我有两个开关,分别称为 S1 和 S2。
我的 UDP 生成器/接收器都有 API,因此我可以清除和请求计数器并测量 A 发送的数据包是否被 B 接收,而我的监控应用程序也有一个 API,因此我可以计算 D 接收到的数据包数量和这些数字在一个好的测试中应该都是平等的。
如果我在我的所有系统都连接到同一个交换机 (S1) 的情况下运行测试,这样 A 正在生成我的 UDP 数据包并发送大约 800mb/s 的流量,并运行 iperf3 客户端,它正在发送 8gbps 的流量和我镜像端口 A,然后 B 上的 UDP 接收器和 D 上的监视器在数亿个数据包中 100% 看到相同的数字。
现在假设我有一个专用的 iperf3 客户端机器 E,我将 A 和 E 连接到第二个交换机 (S2)
并像以前一样在A上生成我的数据包,但在E上运行iperf3客户端,并镜像连接S1上两个交换机的中继端口,B(S1)将可靠地接收来自A(S2)的100%的数据包,而D( S1) 将丢弃 1 到几百个数据包。
我不明白这一点。在这两种情况下,镜像源的总吞吐量完全相同,那么当 B(S1) 接收到来自 A(S2) 的 100% 的数据包时,为什么当交换机中继在一起时镜像端口会丢弃数据包?它不是突发流量,因此 S1 中的队列似乎在两种情况下都面临相同的压力。
我最初在两个便宜的 4 端口 Mikrotik SFP+ 交换机上尝试了这个,然后在 Ubiquiti 聚合交换机上尝试,今天在 Cisco SX550X 上尝试,认为一些适当的 Cisco 设备可以解决它,但性能与 Ubiquiti 聚合交换机大致相同。
任何人都可以阐明为什么当所有流量都来自 NIC 连接的源端口时镜像端口会正常工作,但当镜像源连接到另一个交换机时却不能?

