在工作中我们有端到端系统,我们将路由数据包通过另一端弹出,然后返回到它们起源的地方.您可以将其视为普通通信堆栈.
为了测试吞吐量,我们发现自己使用iperf3通过使用两台外部计算机将流量发送到此堆栈.我们发现自己总共使用了三台计算机,因为我们无法解决这个路线问题,但我觉得必须有一些我们没有看到的解决方案,因为我确信之前已经出现过.我想尽可能只使用一台机器.
假设我们的环境如下:
其中A是iperf3客户端,B由多个程序组成,这些程序将数据包作为以太网数据包传递给彼此(为简单起见,保留为一个黑盒子),C是iperf3服务器.
所以回顾一下,我希望数据包从A,B到C,再到B,再到A.
要使用Iperf执行此操作,我在A处有一个客户端向C发送数据包.
iperf3 -c "C"
我还在C处设置服务器
iperf3 -s
但是,此时没有任何路由规则,这些数据包将绕过B并在A和C之间直接进行.为了阻止这种情况发生,我制定了一个路由规则,例如“将所有指向C的流量路由到B”.
route add "C" netmask 255.255.255.255 gw "B"
另外,我们必须在另一侧做同样的事情,以便服务器不会直接发回A.
route add "A" netmask 255.255.255.255 gw "B"
如果你还没有捕获它,这将导致一个矛盾并导致所有流向A和C的流量都为B.这意味着当B完成处理并希望将数据发送到C时,它将发送给自己因为这就是路由表所规定的*.这也将发生在相反的方向.
有没有人知道这方面的方法?我不确定它是否可以通过简单的路由完成,但我不太了解路由开始,所以也许有一个技巧呢?
*我真的不确定它是否会继续向自己发送(我认为它不会,即使它确实不会知道该怎么做第二次)但这是我试图说它会不适用于此配置.