iperf测试带宽的问题 -- 上下行带宽差距大

今天测试机房的两台服务器之间的网络带宽,发现了一个奇怪的现象:

同时测试上下行带宽:

[root@ptl3m log]# iperf -c 172.28.2.21 -t 60 -i 10  -d -L 8083
------------------------------------------------------------
Server listening on TCP port 8083
TCP window size: 4.00 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 172.28.2.21, TCP port 5001
TCP window size:  400 KByte (default)
------------------------------------------------------------
[  3] local 172.28.2.23 port 46174 connected with 172.28.2.21 port 5001
[  5] local 172.28.2.23 port 8083 connected with 172.28.2.21 port 39939
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  4.37 GBytes  3.75 Gbits/sec
[  5]  0.0-10.0 sec   552 MBytes   463 Mbits/sec
[  3] 10.0-20.0 sec  4.84 GBytes  4.16 Gbits/sec
[  5] 10.0-20.0 sec   221 MBytes   185 Mbits/sec
[  3] 20.0-30.0 sec  4.87 GBytes  4.19 Gbits/sec
[  5] 20.0-30.0 sec   303 MBytes   254 Mbits/sec
[  3] 30.0-40.0 sec  4.01 GBytes  3.45 Gbits/sec
[  5] 30.0-40.0 sec  1.04 GBytes   891 Mbits/sec
[  3] 40.0-50.0 sec  4.81 GBytes  4.14 Gbits/sec
[  5] 40.0-50.0 sec   223 MBytes   187 Mbits/sec
[  3] 50.0-60.0 sec  4.75 GBytes  4.08 Gbits/sec
[  3]  0.0-60.0 sec  27.7 GBytes  3.96 Gbits/sec
[  5] 50.0-60.0 sec   347 MBytes   291 Mbits/sec
[  5]  0.0-60.0 sec  2.65 GBytes   379 Mbits/sec

从上面可以看到这种测试方法上下行带宽差距较大。但是采用下面的命令测试,带宽差距就没有那么大:

[root@ptl3m log]# iperf -c 172.28.2.21 -t 60 -i 10  -r -L 8083
------------------------------------------------------------
Server listening on TCP port 8083
TCP window size: 4.00 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 172.28.2.21, TCP port 5001
TCP window size:  400 KByte (default)
------------------------------------------------------------
[  3] local 172.28.2.23 port 46130 connected with 172.28.2.21 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  4.67 GBytes  4.01 Gbits/sec
[  3] 10.0-20.0 sec  4.17 GBytes  3.58 Gbits/sec
[  3] 20.0-30.0 sec  4.70 GBytes  4.04 Gbits/sec
[  3] 30.0-40.0 sec  4.92 GBytes  4.23 Gbits/sec
[  3] 40.0-50.0 sec  4.86 GBytes  4.18 Gbits/sec
[  3] 50.0-60.0 sec  4.28 GBytes  3.68 Gbits/sec
[  3]  0.0-60.0 sec  27.6 GBytes  3.95 Gbits/sec
[  5] local 172.28.2.23 port 8083 connected with 172.28.2.21 port 38653
[  5]  0.0-10.0 sec  3.91 GBytes  3.36 Gbits/sec
[  5] 10.0-20.0 sec  4.02 GBytes  3.45 Gbits/sec
[  5] 20.0-30.0 sec  3.92 GBytes  3.37 Gbits/sec
[  5] 30.0-40.0 sec  4.02 GBytes  3.45 Gbits/sec
[  5] 40.0-50.0 sec  4.06 GBytes  3.49 Gbits/sec
[  5]  0.0-60.0 sec  24.1 GBytes  3.44 Gbits/sec

这种-d 和 -r参数对结果产生了影响,那么到底是网卡的全双工有问题,还是其他配置有问题呢。请大佬指教!谢谢

----------------------以下是雷哥2022年6月24日对本文的修改、补充----------------------

我们来看-d和-r的作用:

-d        使用双测试模式。服务端使用-L指定的端口反向连接到客户端,上行下行是同时跑数据进行测试。

-r        往返测试模式。当完成客户端到服务端的带宽测试时,服务器使用-L指定的端口,反向连接到客户端,进行服务端到客户端的带宽测试。

原来的环境没有了,我用本地虚拟机,调整窗口大小做了测试:

# 客户端
[root@web01 ~]# iperf -c 10.0.0.12 -t 30 -i 5  -d -L 8083 -w 130k
------------------------------------------------------------
Server listening on TCP port 8083
TCP window size: -1.00 Byte (WARNING: requested  127 KByte)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.0.0.12, TCP port 5001
TCP window size:  254 KByte (WARNING: requested  127 KByte)
------------------------------------------------------------
[  3] local 10.0.0.14 port 47904 connected with 10.0.0.12 port 5001
[  5] local 10.0.0.14 port 8083 connected with 10.0.0.12 port 39944
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.0 sec   494 MBytes   828 Mbits/sec
[  5]  0.0- 5.0 sec   245 MBytes   411 Mbits/sec
[  3]  5.0-10.0 sec   532 MBytes   892 Mbits/sec
[  5]  5.0-10.0 sec   250 MBytes   420 Mbits/sec
[  3] 10.0-15.0 sec   517 MBytes   867 Mbits/sec
[  5] 10.0-15.0 sec   266 MBytes   447 Mbits/sec


# 服务端
[root@lb01 ~]# iperf -s -w 130k
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  254 KByte (WARNING: requested  127 KByte)
------------------------------------------------------------
[  4] local 10.0.0.12 port 5001 connected with 10.0.0.14 port 47904
------------------------------------------------------------
Client connecting to 10.0.0.14, TCP port 8083
TCP window size:  254 KByte (WARNING: requested  127 KByte)
------------------------------------------------------------
[  6] local 10.0.0.12 port 39944 connected with 10.0.0.14 port 8083
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-30.0 sec  2.99 GBytes   857 Mbits/sec
[  6]  0.0-30.0 sec  1.42 GBytes   405 Mbits/sec

看这意思,我的网卡在同时有上下行的时候,下行受限了,但是我没有配置这种策略啊。求大佬们继续指点。

另外,iperf3已经去掉了双向测试-d和-r选项。我们来看看iperf的使用吧。

iperf使用方法示例

启动服务端(10.0.0.12)

iperf -s

单项测试(客户端到服务端):

iperf -c 10.0.0.12 -t 30 -i 5  

双向测试

# 同时进行上传、下载测试(双向测试)
iperf -c 10.0.0.12 -t 30 -i 5 -d -L 8083

# 自动的先进行上传测试;再进行下载测试
iperf -c 10.0.0.12 -t 30 -i 5 -r -L 8083

参数解读:

-s        以服务端的模式启动iperf

-c        以客户端的的形式启动iperf

-t        指定测试时长,后面的数字代表秒数,上面的例子是持续测试30s

-i        指定报告的间隔时间,上例是每5秒输出一次测试结果

-d        同时进行上下行带宽测试。

-L        用来指定服务端反向连接客户端的端口(即客户端同时作为服务端,提供的可连接端口)

-w        指定窗口大小进行测试

指定窗口大小进行测试

# 服务端
iperf -s -w 130k

# 客户端
iperf -c 10.0.0.12 -i 5 -t 30 -r -L 8083 -w 130k

### Linux 中 iperf 上行与下行带宽差异分析 在Linux环境中使用iperf工具测量网络性能时,可能会观察到上行和下行带宽之间存在显著差异。这种现象通常由以下几个因素引起: #### 1. 网络配置不对称 许多互联网服务提供商(ISP)提供给用户的宽带连接是非对称性的,即下载速度远高于上传速度。这意味着即使在同一局域网内的设备间执行iperf测试,也可能因为ISP设定而表现出不同的传输速率[^2]。 #### 2. 设备硬件限制 参与测试的两端计算机或其他网络装置可能具有不同规格的NIC(Network Interface Card),这些接口卡的数据处理能力直接影响着实际可达到的最吞吐量。如果一方的网卡质量较差或老旧,则可能导致该方向上的流量受限于较低的速度上限[^1]。 #### 3. 路由器设置影响 某些路由器对于内外网访问有着特定的安全策略或是QoS(Quality of Service)规则,在进行跨子网通信时会对进出站的数据流实施不同程度的服务等级控制。当涉及到从内部发起对外部资源请求的情况(比如客户端向服务器发送量数据),就容易受到此类机制干扰从而造成单边拥塞问题。 #### 4. 应用层协议特性 TCP/IP协议栈本身也会影响最终测得的结果。例如,默认情况下TCP采用慢启动算法来探测路径最容量;而在多条并发连接场景下还存在着窗口缩放等因素制约整体表现。因此即使是相同物理链路上的不同应用实例也会因所选参数各异而导致实测数值有所偏差。 为了更直观地展示上述情况,可以运行如下命令来进行一次完整的双向带宽测试: ```bash # Server端保持监听状态等待Client连接 iperf -s # Client端指定目标地址并开启双向往返模式 iperf -c server_address -d -t 30 -i 5 ``` 通过调整iperf的各项选项以及对比多次实验所得平均值能够帮助定位具体瓶颈所在,并据此采取相应措施优化现有环境下的网络效能。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值