Linux环境下网络性能测试

简介:

网络性能测试的几项重要指标

1、可用性

测试网络性能的第一步是确定网络是否正常工作,最简单的方法就是使用ping命令,通过向远端的机器发送ICMP请求,并等待接收ICMP回应,来判断远端的机器是否连通,网络是否正常工作。

2、响应时间

ping命令的ICMP报文响应一次往返所花费时间就是响应时间,有很多因素会影响到响应时间,如网段的负荷,网络主机的负荷,广播风暴,工作不正常的网络设备等等。

3、网络利用率

网络利用率是指网络被使用的时间占总时间(即被使用的时间+空闲的时间)的比例。例如,Ethernet虽然是共享的,但同时却只能有一个报文在传输,因此在任一时刻,Ethernet或者是100%的利用率,或者是0%的利用率。计算一个网段的网络利用率相对比较容易,但是确定一个网络的利用率就比较复杂。因此,网络测试工具一般使用网络吞吐量和网络带宽容量来确定网络中两个节点之间的性能。

4、网络吞吐量

网络吞吐量是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽,通过网络吞吐量可以寻找出网络瓶颈。比如,即使clientserver都被分别连接到各自的100M以太网卡上,但是如果这两个100M的以太网卡被10M的交换机连接起来,那么10M的交换机就是网络的瓶颈。

5、网络带宽容量

与网络吞吐量不同,网络带宽容量指的是在网络的两个节点之间的最大可用带宽,这是由组成网络的设备能力所决定的。

使用iperf进行测试

iperf介绍

iperf是一个TCP/IP和UDP/IP性能测试工具,能够提供网络吞吐率信息,以及震动、丢包率、最大组和最大传输单元大小等统计信息,可以由这些信息来分析网络的通信性能、定位网络瓶颈。

iperf以client/server方式工作,服务器端和客户端都使用同一程序iperf,服务器端使用-s选项,而客户端则使用-c选项。在 client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来回传递着特殊的流量模式,以测试网络的性能。

iperf获取与安装

下载地址:http://iperf.sourceforge.net/

配置与安装:

 
 
  1. [root@rh tool]# tar -zxvf iperf-2.0.2.tar.gz
  2. [root@rh tool]# cd iperf-2.0.2
  3. [root@rh iperf-2.0.2]# ./configure --prefix=/usr/netperf
  4. [root@rh iperf-2.0.2]# make
  5. [root@rh iperf-2.0.2]# make install
  6. [root@rh iperf-2.0.2]# ls /usr/netperf

iperf的使用

启动server端:

 
 
  1. [root@rh iperf-2.0.2]# cd /usr/iperf/bin
  2. [root@rh bin]# ./iperf -s

还可以设置这些参数:

服务器端选项 环境变量选项 说明
-s, --server $IPERF_SERVER 在服务器端运行 iperf;
-D . 以后台方式运行 iperf 服务模式;
-R . 如果 iperf 正在运行,则将其终止运行;

启动client端:

用TCP的方式测试本机到192.168.0.138主机(-c 192.168.0.138)的网络性能,时长为60(-t 60),缓冲区的大小为8KB (-l 8k),每10(-i 10)打印一次测试结果。

 
 
  1. [root@rh iperf-2.0.2]# cd /usr/iperf/bin
  2. [root@rh bin]# ./iperf -c 192.168.0.138 -t 60 -l 8k -i 10
  3. ------------------------------------------------------------
  4. Client connecting to 192.168.0.138, TCP port 5001
  5. TCP window size: 23.2 KByte (default)
  6. ------------------------------------------------------------
  7. [ 3] local 192.168.0.137 port 42812 connected with 192.168.0.138 port 5001
  8. [ ID] Interval Transfer Bandwidth
  9. [ 3] 0.0-10.0 sec 1.64 GBytes 1.41 Gbits/sec
  10. [ 3] 10.0-20.0 sec 5.26 GBytes 4.52 Gbits/sec
  11. [ 3] 20.0-30.0 sec 5.26 GBytes 4.52 Gbits/sec
  12. [ 3] 30.0-40.0 sec 5.27 GBytes 4.53 Gbits/sec
  13. [ 3] 40.0-50.0 sec 5.26 GBytes 4.51 Gbits/sec
  14. [ 3] 50.0-60.0 sec 5.26 GBytes 4.52 Gbits/sec
  15. [ 3] 0.0-60.0 sec 27.9 GBytes 4.00 Gbits/sec

还可以设置这些参数:

客户端选项 环境变量选项 说明
-b, --bandwidth $IPERF_BANDWIDTH 指定客户端通过 UDP 协议发送信息的带宽,默认值为 1Mbps;

使用netperf进行测试

netperf介绍

netperf是一种网络性能测量工具,主要针对基于TCP或UDP的传输。netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/response)模式。netperf反应的是一个系统能以多快的速度向另一个系统发送数据,以及另一个系统能以多快的速度接受数据。

netperf是以client/server的方式工作,server端是netserver,用来侦听来自client 端的连接;client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试结果;在控制连接建立并传递了测试配置信息后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。

netperf可以模拟三种不同的TCP流量模式:

  • 单个TCP连接,批量(bulk)传输大量数据;
  • 单个TCP连接,client请求/server应答的交易(transaction)方式;
  • 多个TCP连接,每个连接中一对请求/应答的交易方式

netperf可以模拟两种UDP的流量模式:

  • 从client到server的单向批量传输;
  • 请求/应答的交易方式。

由于UDP传输的不可靠性,在使用 netperf时要确保发送的缓冲区大小不大于接收缓冲区大小,否则数据会丢失,netperf将给出错误的结果。因此,对于接收到分组的统计不一定准确,需要结合发送分组的统计综合得出结论。

netperf获取与安装

下载地址:http://www.netperf.org/netperf/

配置与安装:

 
 
  1. [root@rh tool]# tar -zxvf netperf-2.6.0.tar.gz
  2. [root@rh tool]# cd netperf-2.6.0
  3. [root@rh netperf-2.6.0]# ./configure --prefix /usr/netperf
  4. [root@rh netperf-2.6.0]# make
  5. [root@rh netperf-2.6.0]# make check
  6. [root@rh netperf-2.6.0]# make install
  7. [root@rh netperf-2.6.0]# ls /usr/netperf

netperf使用

启动server端:

 
 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netserver

启动client端:

1)TCP_STREAM模式。进行TCP批量传输性能测试。这是netperf缺省情况。

批量数据传输典型的例子有FTP和其他类似的网络应用(即一次传输整个文件)。根据使用传输协议的不同,批量数据传输又分为TCP批量传输和UDP批量传输。

用 TCP 批量传输的方式 (-t TCP_STREAM)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),每次发送本地发送测试分组的大小为2048Bytes (-m 2048)

 
 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t TCP_STREAM -H 192.168.0.138 -l 60 -- -m 2048
  3. MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET
  4. Recv Send Send
  5. Socket Socket Message Elapsed
  6. Size Size Size Time Throughput
  7. bytes bytes bytes secs. 10^6bits/sec
  8. 87380 16384 2048 60.00 5463.11

从上面netperf的输出结果中,可以得到如下信息:

  • 1)远端系统(即 server)使用大小为 87380 字节的 socket 接收缓冲;
  • 2)本地系统(即 client)使用大小为 16384 字节的 socket 发送缓冲;
  • 3)向远端系统发送的测试分组大小为 2048 字节,通过 -m 2048 设置;
  • 4)测试经历的时间为 60 秒;
  • 5)吞吐量的测试结果为 5463.11 Mbps;

在缺省的情况下,netperf向远端系统发送的测试分组大小会设置为本地系统所使用的 socket 发送缓冲大小。

还可以设置这些局部命令行参数:

客户端选项 变量 说明
-s $size 设置本地系统的 socket 发送与接收缓冲大小;
-S $size 设置远端系统的 socket 发送与接收缓冲大小;
-m $size 设置本地系统发送测试分组的大小;
-M $size 设置远端系统接收测试分组的大小;
-D . 对本地与远端系统的 socket 设置 TCP_NODELAY 选项;

通过修改以上的参数,并观察测试结果的变化,可以确定是什么因素影响了连接的吞吐量。

例如,如果怀疑路由器由于缺乏足够的缓冲区空间,使得转发大的分组时存在问题,就可以改变测试分组的大小(-m),以观察吞吐量的变化。如果当测试分组由较大变为较小,而吞吐量出现较大的变化(比如吞吐量变大),说明网络中路由器确实存在缓冲区不足的问题。

2)UDP_STREAM,进行 UDP 批量传输性能测试。

需要注意的是此时测试分组的大小不能大于 socket 发送与接收的缓冲区大小,否则 netperf 会报错。

UDP_STREAM 方式使用与 TCP_STREAM 方式相同的局部命令行参数。

用 UDP 批量传输的方式 (-t UDP_STREAM)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),每次发送本地发送测试分组的大小为2048Bytes (-m 2048)

 
 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t UDP_STREAM -H 192.168.0.138 -l 60 -- -m 2048
  3. MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET
  4. Socket Message Elapsed Messages
  5. Size Size Time Okay Errors Throughput
  6. bytes bytes secs # # 10^6bits/sec
  7. 229376 2048 60.00 11159606 0 3047.29
  8. 229376 60.00 11115165 3035.15

可以看到,最后结果有两行,第一行数据显示的是本地系统的发送统计,这里的吞吐量表示 netperf 向本地 socket 发送分组的能力。但是由于 UDP 是不可靠的传输协议,发送出去的分组数量不一定等于接收到的分组数量;第二行数据显示的就是远端系统接收的情况,这里看到接收到的数据小于发送的数据,即存在丢包的情况。远端系统的接收吞吐量也小于本地发送吞吐量。

3)TCP_RR,在一个 TCP 连接中进行多次 request 和 response 的交易过程的性能测试。

这种方式常出现在数据库应用中,数据库与客户端程序建立一个 TCP 连接后,就在这个连接中传递数据库的多次交易过程。

用 TCP_RR 的方式(-t TCP_RR)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),设置 request 分组大小为 64Bytes,response 分组大小1024Bytes

 
 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t TCP_RR -H 192.168.0.138 -l 60 -- -r 64,1024
  3. MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET : first burst 0
  4. Local /Remote
  5. Socket Size Request Resp. Elapsed Trans.
  6. Send Recv Size Size Time Rate
  7. bytes Bytes bytes bytes secs. per sec
  8. 16384 87380 64 1024 60.00 9194.92
  9. 16384 87380

这里的输出结果有两行,第一行数据显示的是本地系统的信息,第二行数据显示的远端系统的信息。Trans. Rate per sec 是平均交易率。

通常增加 request/response 分组的大小会使得交易率下降。相对于实际的系统,这里的交易率的计算没有充分考虑到交易过程中的应用程序处理时延,因此结果会高于实际情况。

还可以设置这些参数:

客户端选项 变量 说明
-r $req,$resp 设置 request 和 reponse 分组的大小;
-s $size 设置本地系统的 socket 发送与接收缓冲大小;
-S $size 设置远端系统的 socket 发送与接收缓冲大小;
-D . 对本地与远端系统的 socket 设置 TCP_NODELAY 选项;

4)TCP_CRR,与 TCP_RR 的方式不同,TCP_CRR 为每次交易建立一个新的 TCP 连接。测试这种情况的网络性能。

这种方式最典型的应用是 HTTP,每次 HTTP 交易是在一条单独的 TCP 连接中进行的,这个过程需要不停地建立新的 TCP 连接,并在交易结束后结束 TCP 连接,交易率会受到较大影响。

用 TCP_CRR 的方式(-t TCP_CRR)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),设置 request 分组大小为 64Bytes,response 分组大小 1024Bytes

 
 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t TCP_CRR -H 192.168.0.138 -l 60 -- -r 64,1024
  3. MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET
  4. Local /Remote
  5. Socket Size Request Resp. Elapsed Trans.
  6. Send Recv Size Size Time Rate
  7. bytes Bytes bytes bytes secs. per sec
  8. 16384 87380 64 1024 60.00 2728.00
  9. 16384 87380

这里的输出结果有两行,第一行数据显示的是本地系统的信息,第二行数据显示的远端系统的信息。Trans. Rate per sec 是平均交易率。

5)UDP_RR,使用 UDP 分组进行 request 和 response 交易过程的性能测试。

用 UDP_RR 的方式(-t UDP_RR)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),设置 request 分组大小为 64Bytes,response 分组大小1024Bytes

 
 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t UDP_RR -H 192.168.0.138 -l 60 -- -r 64,1024
  3. MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET : first burst 0
  4. Local /Remote
  5. Socket Size Request Resp. Elapsed Trans.
  6. Send Recv Size Size Time Rate
  7. bytes Bytes bytes bytes secs. per sec
  8. 229376 229376 64 1024 60.00 10635.03
  9. 229376 229376

这里的输出结果有两行,第一行数据显示的是本地系统的信息,第二行数据显示的远端系统的信息。Trans. Rate per sec 是平均交易率。

UDP_RR 方式使用 UDP 分组进行 request/response 的交易过程。由于没哟 TCP 连接所带来的负担,所以交易率相对 TCP_RR 方式一般会有相应的提升。

但是如果出现了相反的结果,即交易率反而降低了,也不用太惊讶,因为这说明在网络中,路由器或其他网络设备对 UDP 采用了与 TCP 不同的缓冲区空间和处理技术。

其他注意事项

测试的时候,常常由于防火墙的原因造成网络不能连接,这时候可以设置或关闭防火墙后再测试。关闭和启动防火墙命令:

 
 
  1. service iptables stop/start;

后记

常用的网络性能测试工具除了 iperfnetperf,还有pathloadpathrateDBStcptrace等工具。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
3天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
1天前
|
网络协议 Linux Shell
【linux网络(一)】初识网络, 理解四层网络模型
【linux网络(一)】初识网络, 理解四层网络模型
|
1天前
|
安全 Ubuntu Linux
Linux 网络操作命令Telnet
Linux 网络操作命令Telnet
4 0
Linux 网络操作命令Telnet
|
1天前
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
13 1
|
1天前
|
Ubuntu Linux
Linux(22) Linux设置网络优先级顺序
Linux(22) Linux设置网络优先级顺序
2 0
|
1天前
|
存储 监控 安全
云端防御战线:云计算环境下的网络安全策略与实践
【4月更文挑战第23天】在数字化转型的浪潮中,云计算已成为推动企业敏捷性、可扩展性和成本效率的关键因素。然而,随着数据和服务迁移至云端,传统的网络边界逐渐模糊,给网络安全带来了前所未有的挑战。本文探讨了在多租户云环境中维护信息安全的先进策略和技术,分析了云服务模型(IaaS, PaaS, SaaS)特有的安全风险,并提出了一系列针对性的安全措施和最佳实践。通过深入讨论身份与访问管理、数据加密、入侵检测系统以及合规性监控等关键技术,本文旨在为读者提供一套全面的云计算安全防护框架。
3 0
|
2天前
|
Ubuntu 网络协议 Linux
Linux(20) Ubuntu 20.04 网络接口自动切换路由配置
Linux(20) Ubuntu 20.04 网络接口自动切换路由配置
23 0
|
2天前
|
机器学习/深度学习 人工智能 安全
云端防御战线:云计算环境中的网络安全策略
【4月更文挑战第22天】 在数字化时代,云计算已成为企业运营的关键基础设施。然而,随着其广泛应用,云服务也成为了网络攻击者的主要目标。本文深入探讨了云计算环境下的网络安全挑战,分析了云服务提供者和使用者面临的安全威胁,并提出了综合性的安全策略。这些策略不仅包括传统的加密和身份验证技术,还涉及更先进的入侵检测系统、行为分析和机器学习算法。文章旨在为读者提供一个关于如何在享受云计算带来的便利同时确保数据和操作安全的综合指南。
|
2天前
|
监控 安全 网络安全
云端防御战线:云计算环境下的网络安全与信息保护策略
【4月更文挑战第22天】随着企业和个人用户对云服务的依赖日益加深,云计算环境的安全性成为信息技术领域关注的焦点。本文深入探讨了云计算平台面临的安全威胁、信息安全管理的挑战以及前沿防御技术。通过分析数据加密、身份验证、入侵检测等关键技术在云服务中的应用,提出了一个多层次、综合性的网络安全策略框架。此框架旨在为云服务提供商和使用者提供一套实用的安全保障措施,确保云资源的安全高效运营。
|
5天前
|
存储 安全 网络安全
构筑安全之盾:云计算环境下的网络安全与信息保护策略
【4月更文挑战第19天】随着云计算技术的飞速发展,企业和个人越来越依赖于云服务来存储、处理和交换数据。然而,这种便利性背后隐藏着潜在的安全风险。本文深入探讨了在云计算背景下,如何通过综合性的安全措施和策略来强化网络安全防护,确保数据的完整性、可用性和机密性。我们将分析当前面临的主要安全挑战,并基于最新的技术进展提出相应的解决方案,以期达到有效防御外部威胁和内部漏洞的目的。
16 4