iPerf3 -B (--bind host)绑定发送端网卡/发送IP端地址

多网卡主机下,使用iPerf3打流时,如何控制通过哪个网卡进行打流,这是一个常见的问题。

阅读iperf3的官方说明文档,我们能看到下面说明

-B, --bind host

Bind to host, one of this machine's addresses. For the client this sets the outbound interface.

For a server this sets the incoming interface. This is only useful on multihomed hosts, which have multiple network interfaces.

翻译:绑定到主机,主机的一个地址。对客户端来说,这个设置数据发送从哪个接口发送。

对服务端来说,这是设置数据从哪个接口接收。这个命令只在多宿主主机(二个或者二个以上网络接口)中有用。

(最新的iperf3 3.13版本里,这个参数有更新,对老版本iperf3兼容,所以并不改变本文内容的有效性,具体参见:iperf3指定网卡测试-B参数更新 或 --bind-dev参数详解

看起来是非常清楚的描述,但其实在接口(interface)这里语焉不详,这个接口是指网络网卡呢,

还是指IP接口?-B选项和主机路由之间的关系如何?

-B选项对客户端来说意味着:

如果你的客户端主机虽然有多个网络,但多个网络属于不同的子网,并且只有一个网络端口可

以到达你的目标服务端主机,那么你不会有以下问题。

如果你的客户端主机有多个网络,并且有多个网络端口都可以到达你的目标服务端主机,而你希

望指定iPerf3从特定网络端口发送数据到目标服务端主机,那么本文会帮助你更快的达到目标。

问题:

从哪个接口(interface)发送是和-B后跟的IP地址有关,还是跟主机路由表里设定的表项有关?

如果路由表设设置和-B绑定的IP地址冲突了如何处理?

答案与结论(不想看详细的,看下面结论就可以了):

1)如果你用了-B参数,iPerf3会越过主机ip地址和物理网卡的绑定关系。

2)iPerf3会用-B参数指定的IP地址发送数据。

3)iPerf3会把数据从主机路由表指定的物理网卡发送出去。

注意:windows端的iperf3 这个结论好像不成立,windows端的行为:看起来是-B指定哪个IP就从哪个IP对应的网卡出去,还没有仔细研究过,

要找下带二个网卡的WINDOWS机器试一下)

我们看一下如下测试:

测试环境配置:

测试主机环境为二台Linux主机,一台是树莓派主机,安装了raspberry pi OS,有二个网络接口eth0和wlan0,

分别是192.168.3.15和192.168.3.243二个IP地址,掩码为255.255.255.0,通过二层交换机和普通PC主机

相连,PC主机安装的是ubuntu,只有一个网卡,IP地址为192.168.3.231,掩码是255.255.255.0。

三个网卡属于同一个局域网,默认网关地址都是192.168.3.1。iPerf3客户端工作在树莓派上,iPerf3服务端工作在普通PC主机上。

无-B选项测试:

树莓派中的默认主机路由表如下:

由于我们的目标地址是普通主机(192.168.3.231),由上述主机路由可见:

如果没有-B指定的情况下,如下图所示,我们可以看到iPerf3客户端选择192.168.3.15端通过eth0将

数据发送到192.168.3.231服务端(通过ifconfig命令,我们可以看到eth0发送的数据包数量增加了约

100M Bytes)。这是符合预期的,因为第3条网络路由表项的Metric是202,优先级大于第4条网络

路由表项的Metric 303。

有-B选项配置:

下面我们用:

sudo route add -host 192.168.3.231 metric 100 dev eth0

命令为树莓派主机增加一条主机路由,指定发往192.168.3.231(普通PC,iPerf3服务端)的数据包,

从eth0发送(主机路由优先级>网络路由>默认路由,,并把Metric设为100做为双保险)。

第一步:

通过ifconfig和route查看到前网络状态(eth0已经发送了1.1G bytes数据)

第二步,

用iperf3 -c 192.168.3.231 -B 192.168.3.243命令指定从192.168.3.243接口发送数据

我们从iperf3服务端可以看到,服务端收到从192.168.3.243发送过来的数据。

那么这个数据是从哪个网卡发出来的呢?eth0还是wlan0? 我们看下一步。

第三步,

通过ifconfig查看到前网络状态(eth0已经发送了1.2G bytes数据)

我们会看到eth0口发送的数据量从原先的1.1G增加到了1.2G,而wlan口发送的数据保持在46.3M bytes几乎没有变化

这说明:iperf3 -c 192.168.3.231 -B 192.168.3.243,用WLAN0口的IP:192.168.3.243,通过eth0,发送数据到服务端。

则:ip地址用了-B指定的,真实的发送数据的网卡则用了主机路由表项指定的网卡。

有-B选项的进一步测试:

下面,我们做进一步的测试来说明我们上述的结论:

第一步:

修改主机路由表:

sudo route del  -host 192.168.3.231 metric 100 dev eth0

sudo route add -host 192.168.3.231 metric 100 dev wlan0

修改成功后,指定发往192.168.3.231(普通PC,iPerf3服务端)的数据包,从wlan0发送

(主机路由优先级>网络路由>默认路由,,并把Metric设为100做为双保险)

通过ifconfig命令,我们可以看到当前网络状态如下:

第二步:

用iperf3 -c 192.168.3.231 -B 192.168.3.15指定通过 192.168.3.15发送数据

服务端从192.168.3.15收到了数据包。

第三步,

通过ifconfig命令,检查发送后的网络状态

eth0的发送数据包几乎没有变化,保持在1.3G bytes, 而wlan0的发送数据包则从46.3M增加到了49.5M bytes

这说明:iperf3 -c 192.168.3.231 -B 192.168.3.15,用eth0口的IP:192.168.3.15,通过wlan0,发送数据到服务端。

再一次说明则:ip地址用了-B指定的,真实的发送数据的网卡则用了主机路由表项指定的网卡。

结论:

1)如果你用了-B参数,iPerf3会越过主机ip地址和物理网卡的绑定关系。

2)iPerf3会用-B参数指定的IP地址发送数据。

3)iPerf3会把数据从主机路由表指定的物理网卡发送出去。

目录

-B选项对客户端来说意味着:

问题:

答案与结论(不想看详细的,看下面结论就可以了):

测试环境配置:

无-B选项测试:

有-B选项配置:

第一步:

第二步,

第三步,

有-B选项的进一步测试:

第一步:

第二步:

第三步,

结论:


猜你喜欢

转载自blog.csdn.net/meihualing/article/details/112390106