iperf3指定网卡测试 --bind-dev参数详解

最新安装上了iperf3 最新的3.13版本,发现多了一个参数的支持–bind-dev。关注到这个参数的一定会知道老版本的iperf3里有一个-B的参数,可以在多IP的主机上指定使用哪个IP进行测试。本博客有过具体的分析,详细见iPerf3 -B参数详细图文分析

1、新老版本iperf3(iperf3 3.13 vs. iperf3 3.9)参数更新

  • 老版本对-B参数的说明:
    通过指定ip地址来选择发送的端口,但我们能过上面的详细分析可知道,这个-B仅仅能指定通过哪个IP地址进行发送报文,并不能通过这个参数改变发送报文的物理网卡,主机通过哪个物理网卡发送数据,最终还是取决于主机的路由表(对于拥有多个属于同一个IP子网的网卡的主机有这个问题)。如果需要改变发送的物理网卡,我们还需要通过改变路由表项的matrix设置,来保证报文从指定的端口发送出去。
       -B, --bind host
              bind to the specific interface associated with address host.
  • 新版本对-B参数以及新增加的–bind-dev的说明:
    新版本增加了指定物理网卡的参数,有二种方式:
  • 通过–bind-dev 跟上一个网卡名字的方式(ifconfig显示出来的网卡名字)显性的指定从哪个物理网卡进行发送,
  • 通过-B hostIP[%dev]或者 --bind hostIP[%dev]的方式,用[]里的可先参数的方式进行指定。
       -B, --bind host[%dev]
              bind  to the specific interface associated with address host.  If an optional interface is specified, it is treated as a shortcut for --bind-dev dev.  Note that a percent sign and inter‐
              face device name are required for IPv6 link-local address literals.

       --bind-dev dev
              bind to the specified network interface.  This option uses SO_BINDTODEVICE, and may require root permissions.  (Available on Linux and possibly other systems.)

2、直接看结论

如果你不想看详细过程,那么可以直接看以下结论:

  1. 指定物理网卡则可以让主机从指定的物理网卡进行发送
  2. 指定物理网卡后,会自动使用物理网卡对应的IP地址进行发送

3、–bind-dev dev使用详解

  1. 我们看一下,本机有二张网卡,属于同一个子网的IP地址,分别为eno1, enp2s0,对应的IP地址分别为192.168.3.238和192.168.3.107。在开始测试前,TX的报文数量分别为1.2G和370.4G。
  2. 使用iperf3 --bind-dev命令,通过enp2s0进行发包1.09Gbytes进行测试
    完成测试后,再次使用ifconfig命令查看,可以看到eno1网卡的TX数据发送量还是保持在1.2GB没有变化,而enp2s0的TX数据发送量从370.4G增长到371.7G说明数据是从enp2s0网卡发送的。
  3. 反过来通过iperf3 --bind-dev命令,通过eno1进行发包1.09Gbytes进行测试,我们则会发现: 完成测试后,再次使用ifconfig命令查看,可以看到enp2s0网卡的TX数据发送量还是保持在371.7GB没有变化,而eno1的TX数据发送量从1.2G增长到2.4G说明数据是从eno1网卡发送的。

结论,直接指定物理网卡,则可以自动切换为指定物理网卡的IP地址进行发送


xxx@xxx-pc:~/iperf3/iperf$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.238  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::a6fc:b416:ea9c:df2f  prefixlen 64  scopeid 0x20<link>
        ether 8c:dc:d4:41:8b:ac  txqueuelen 1000  (以太网)
        RX packets 369667  bytes 26117275 (26.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 807538  bytes 1224949754 (1.2 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7f00000-f7f20000

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.107  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::98ed:685c:da1d:183e  prefixlen 64  scopeid 0x20<link>
        ether a0:36:9f:56:95:be  txqueuelen 1000  (以太网)
        RX packets 7713629  bytes 1981189364 (1.9 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 248973591  bytes 370498351533 (370.4 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xf7d00000-f7dfffff

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 17648  bytes 2096944 (2.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17648  bytes 2096944 (2.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

xxx@xxx-pc:~/iperf3/iperf$ /usr/local/bin/iperf3 -c 192.168.3.60 --bind-dev enp2s0

我们从服务端可以看到,收到来自己192.168.3.107的1.09G的报文。
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.3.107, port 47464
[  5] local 192.168.3.60 port 5201 connected to 192.168.3.107 port 47476
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  92.6 MBytes   776 Mbits/sec
[  5]   1.00-2.00   sec   112 MBytes   940 Mbits/sec
[  5]   2.00-3.00   sec   112 MBytes   940 Mbits/sec
[  5]   3.00-4.00   sec   112 MBytes   940 Mbits/sec
[  5]   4.00-5.00   sec   112 MBytes   940 Mbits/sec
[  5]   5.00-6.00   sec   112 MBytes   940 Mbits/sec
[  5]   6.00-7.00   sec   112 MBytes   940 Mbits/sec
[  5]   7.00-8.00   sec   112 MBytes   941 Mbits/sec
[  5]   8.00-9.00   sec   112 MBytes   939 Mbits/sec
[  5]   9.00-10.00  sec   112 MBytes   941 Mbits/sec
[  5]  10.00-10.17  sec  19.5 MBytes   941 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.17  sec  1.09 GBytes   924 Mbits/sec                  receiver
-----------------------------------------------------------

xxx@xxx-pc:~/iperf3/iperf$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.238  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::a6fc:b416:ea9c:df2f  prefixlen 64  scopeid 0x20<link>
        ether 8c:dc:d4:41:8b:ac  txqueuelen 1000  (以太网)
        RX packets 371228  bytes 26246399 (26.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 807585  bytes 1224955508 (1.2 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7f00000-f7f20000

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.107  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::98ed:685c:da1d:183e  prefixlen 64  scopeid 0x20<link>
        ether a0:36:9f:56:95:be  txqueuelen 1000  (以太网)
        RX packets 8073124  bytes 2004918105 (2.0 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 249795878  bytes 371728640852 (371.7 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xf7d00000-f7dfffff


xxx@xxx-pc:~/iperf3/iperf$ /usr/local/bin/iperf3 -c 192.168.3.60 --bind-dev eno1

我们从服务端可以看到,收到来自己192.168.3.238的1.09G的报文。
Accepted connection from 192.168.3.238, port 45136
[  5] local 192.168.3.60 port 5201 connected to 192.168.3.238 port 45142
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  95.5 MBytes   801 Mbits/sec
[  5]   1.00-2.00   sec   111 MBytes   934 Mbits/sec
[  5]   2.00-3.00   sec   111 MBytes   934 Mbits/sec
[  5]   3.00-4.00   sec   111 MBytes   934 Mbits/sec
[  5]   4.00-5.00   sec   111 MBytes   934 Mbits/sec
[  5]   5.00-6.00   sec   111 MBytes   934 Mbits/sec
[  5]   6.00-7.00   sec   111 MBytes   934 Mbits/sec
[  5]   7.00-8.00   sec   111 MBytes   934 Mbits/sec
[  5]   8.00-9.00   sec   111 MBytes   934 Mbits/sec
[  5]   9.00-10.00  sec   111 MBytes   934 Mbits/sec
[  5]  10.00-10.14  sec  15.9 MBytes   934 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.14  sec  1.09 GBytes   921 Mbits/sec                  receiver


xxx@xxx-pc:~/iperf3/iperf$ ifconfig
demo-oai: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.70.129  netmask 255.255.255.192  broadcast 192.168.70.191
        ether 02:42:11:7b:67:e4  txqueuelen 0  (以太网)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:bf:65:22:bd  txqueuelen 0  (以太网)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.238  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::a6fc:b416:ea9c:df2f  prefixlen 64  scopeid 0x20<link>
        ether 8c:dc:d4:41:8b:ac  txqueuelen 1000  (以太网)
        RX packets 726265  bytes 51096987 (51.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1614509  bytes 2449795540 (2.4 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7f00000-f7f20000

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.107  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::98ed:685c:da1d:183e  prefixlen 64  scopeid 0x20<link>
        ether a0:36:9f:56:95:be  txqueuelen 1000  (以太网)
        RX packets 8080367  bytes 2005367711 (2.0 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 249808572  bytes 371729998079 (371.7 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xf7d00000-f7dfffff

4、-B hostIP[%dev]或者 --bind hostIP[%dev]的方式

看起来,会检查指定的IP地址和物理网卡的绑定关系,如果不一至就会出错。(尚未分析过原因为何会出错,因为原先不指定[%dev]时,主机程序不会 IP地址和物理网卡的绑定关系,主机总是使用指定的IP,但却按照路由表决定由哪些网卡进行发送)。网卡配置情况,路由表项,如下所示。

xxx@xxx-pc:~/iperf3/iperf$ /usr/local/bin/iperf3 -c 192.168.3.60 -B 192.168.3.238%eno1------通过网瞳eno1发送
xxx@xxx-pc:~/iperf3/iperf$ /usr/local/bin/iperf3 -c 192.168.3.60 -B 192.168.3.238%enp2s0----出错,连接超时
xxx@xxx-pc:~/iperf3/iperf$ /usr/local/bin/iperf3 -c 192.168.3.60 -B 192.168.3.107%enp2s0---通过网卡enp2s0发送
xxx@xxx-pc:~/iperf3/iperf$ /usr/local/bin/iperf3 -c 192.168.3.60 -B 192.168.3.107%eno1------出错,连接超时


xxx@xxx-pc:~/iperf3/iperf$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.238  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::a6fc:b416:ea9c:df2f  prefixlen 64  scopeid 0x20<link>
        ether 8c:dc:d4:41:8b:ac  txqueuelen 1000  (以太网)
        RX packets 2143213  bytes 150333835 (150.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3228464  bytes 4899509947 (4.8 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7f00000-f7f20000

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.107  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::98ed:685c:da1d:183e  prefixlen 64  scopeid 0x20<link>
        ether a0:36:9f:56:95:be  txqueuelen 1000  (以太网)
        RX packets 8818872  bytes 2054024464 (2.0 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 253112865  bytes 376654961590 (376.6 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xf7d00000-f7dfffff


xxx@xxx-pc:~/iperf3/iperf$ route
内核 IP 路由表
目标            网关            子网掩码        标志  跃点   引用  使用 接口
default         _gateway        0.0.0.0         UG    100    0        0 enp2s0
default         _gateway        0.0.0.0         UG    101    0        0 eno1
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.3.0     0.0.0.0         255.255.255.0   U     100    0        0 enp2s0
192.168.3.0     0.0.0.0         255.255.255.0   U     101    0        0 eno1
192.168.70.128  0.0.0.0         255.255.255.192 U     0      0        0 demo-oai
192.168.71.128  0.0.0.0         255.255.255.192 U     0      0        0 rfsim5g-public
192.168.72.128  0.0.0.0         255.255.255.192 U     0      0        0 rfsim5g-traffic

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
最新版本iperf,官网下载直接编译,适合win10系统。 iperf 3.9 (cJSON 1.7.13) CYGWIN_NT-10.0-19041 LAPTOP-4KUBOSU3 3.2.0-340.x86_64 2021-03-29 08:42 UTC x86_64 Optional features available: CPU affinity setting Usage: iperf3 [-s|-c host] [options] iperf3 [-h|--help] [-v|--version] Server or Client: -p, --port # server port to listen on/connect to -f, --format [kmgtKMGT] format to report: Kbits, Mbits, Gbits, Tbits -i, --interval # seconds between periodic throughput reports -F, --file name xmit/recv the specified file -A, --affinity n/n,m set CPU affinity -B, --bind bind to the interface associated with the address -V, --verbose more detailed output -J, --json output in JSON format --logfile f send output to a log file --forceflush force flushing output at every interval --timestamps emit a timestamp at the start of each output line (using optional format string as per strftime(3)) -d, --debug emit debugging output -v, --version show version information and quit -h, --help show this message and quit Server specific: -s, --server run in server mode -D, --daemon run the server as a daemon -I, --pidfile file write PID file -1, --one-off handle one client connection then exit --server-bitrate-limit #[KMG][/#] server's total bit rate limit (default 0 = no limit) (optional slash and number of secs interval for averaging total data rate. Default is 5 seconds) Client specific: -c, --client run in client mode, connecting to -u, --udp use UDP rather than TCP --connect-timeout # timeout for control connection setup (ms) -b, --bitrate #[KMG][/#] target bitrate in bits/sec (0 for unlimited)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值