- 前言
- 为什么要写这本书
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第一部分 安全运维篇
- 第 1 章 Linux 服务器安全运维
- 第 2 章 Linux 网络安全运维
- 第 3 章 数据安全工具 DRBD、extundelete
- 第二部分 运维故障排查篇
- 第 4 章 Linux 系统运维故障排查思路
- 第 5 章 Linux 故障排查案例实战
- 第三部分 自动化运维篇
- 第 6 章 轻量级运维利器 pssh、pdsh 和 mussh
- 第 7 章 分布式监控系统 Ganglia
- 第 8 章 基于 nagios 的分布式监控报警平台 Centreon
- 第 9 章 通过 Ganglia 与 Centreon 构建智能化监控报警平台
- 第四部分 集群架构篇
- 第 10 章 高性能 Web 服务器 Nginx
- 第 11 章 高性能集群软件 Keepalived
- 第 12 章 千万级高并发负载均衡软件 HAProxy
- 第 13 章 构建高性能的 MySQL 集群系统
- 第 14 章 高性能负载均衡集群软件 HAProxy
2.3 网络性能评估工具 iperf
网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率低。要找到网络带宽利用率低的原因,可以对网络传输进行监控,此时就需要用到一些网络性能评估工具,而 iperf 就是这样一个网络带宽测试工具,本节将详细介绍 iperf 的使用方式。
2.3.1 iperf 能做什么
iperf 是一个基于 TCP/IP 和 UDP/IP 的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。
下面介绍 iperf 的主要功能。
(1)TCP 方面
- 测试网络带宽。
- 支持多线程,在客户端与服务器端支持多重连接。
- 报告 MSS/MTU 值的大小。
- 支持 TCP 窗口值自定义并可通过套接字缓冲。
(2)UDP 方面
- 可以设置指定带宽的 UDP 数据流。
- 可以测试网络抖动值、丢包数。
- 支持多播测试。
- 支持多线程,在客户端与服务器端支持多重连接。
2.3.2 iperf 的安装与使用
iperf 可以运行在任何 IP 网络上,包括本地以太网、接入因特网、Wi-Fi 网络等。在工作模式上,iperf 运行于服务器端、客户端模式下,其服务器端主要用于监听到达的测试请求,而客户端主要用于发起连接会话,因此要使用 iperf,需要两台服务器,一台运行在服务器模式下,另一台运行在客户端模式下。
1.安装 iperf
iperf 支持 Win32、Linux、FreeBSD、Mac OS X、OpenBSD 和 Solaris 等多种操作系统平台。读者可以从 iperf 官方网站:http://iperf.fr/下载各种版本,目前最新的版本是 iperf3.0,这里下载的软件包为 iperf-3.0.tar.gz,安装过程如下:
[root@ networkserver ~]# tar zxvf iperf-3.0.tar.gz [root@ networkserver ~]# cd iperf [root@ networkserver iperf]# make [root@ networkserver iperf]# make install
这样,iperf 就安装完成了。
2.iperf 参数介绍
在完成 iperf 安装后,执行“iperf3-h”即可显示 iperf 的详细用法。iperf 的命令行选项共分为三类,分别是客户端与服务器端公用选项、服务器端专用选项和客户端专用选项,下面对常用的选项进行介绍。
服务器端专用选项的含义如表 2-4 所示。
表 2-4 服务器端专用选项的含义

客户端专用选项的含义如表 2-5 所示。
表 2-5 客户端专用选项的含义

客户端与服务器端公用选项的含义如表 2-6 所示。
表 2-6 客户端与服务器端公用选项的含义

2.3.3 iperf 应用实例
要使用 iperf,首先启动一个服务器端,这里假定服务器端的 IP 地址为 192.168.12.168,在此服务器上运行“iperf3-s”即可开启 iperf 的服务器端模式。在默认情况下,iperf3 将在服务器端打开一个 5201 监听端口,此时就可以将另一台服务器作为客户端执行 iperf 功能测试。
1.测试 TCP 吞吐量
为了确定网卡的最大吞吐量,可以在任意客户端运行 iperf 命令,iperf 将尝试从客户端尽可能快地向服务器端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。图 2-14 展示了通过一个最简单的带宽测试命令的输出结果。

图 2-14 通过 iperf 测试网络带宽利用率
从图 2-14 可以看出,iperf 默认的运行时间是 10s,每隔 1s 输出一次传输状态,同时还可以看到每秒传输的数据量在 112MB 左右,刚好与“Bandwidth”列的值对应起来,网卡的带宽速率维持在 941Mbits/sec 左右,而测试的服务器是千兆网卡,这个测试值也基本合理。在输出的最后,iperf 还给出了总的数据发送、接收量,以及带宽速率平均值,通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。
iperf 提供很多参数,可以多角度、全方位地测试网络带宽利用率,例如,要改变 iperf 运行的时间和输出频率,可以通过“-t”和“-i”参数来实现,如图 2-15 所示。

图 2-15 添加“-t”和“-i”参数后的 iperf 输出
从图 2-15 可以看出,输出状态的间隔变为每 5s 一次,总共执行测试时间为 20s,测试的带宽速率仍然保持在 941Mbits/sec 左右,唯一变化的是失败重传次数增加了。
为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,iperf 在传输完毕指定大小的数据包后,自动结束,如图 2-16 所示。

图 2-16 iperf 客户端通过“-n”参数指定要传输的数据量
图 2-16 的例子是指定发送一个 5GB 左右的数据包,并且每隔 10s 输出一次传输状态,从这个输出可以看出,当失败重传次数较多时,传输速率急速下降。
有时候,为了模拟更真实的 TCP 应用,iperf 客户端允许从一个特定的文件发送数据,这可以通过“-F”参数实现,如图 2-17 所示。

图 2-17 iperf 客户端通过“-F”参数指定文件来发送数据
在图 2-17 的例子中,通过“-F”参数指定了一个 webdata.tar.gz 文件作为 iperf 要传输的数据。在使用此参数时,需要同时指定一个“-t”参数来设置要测试传输的时间,这个时间尽量设置长一些,因为在默认传输时间 10s 内,这个文件可能还没有传完。
在使用 iperf 进行网络带宽测试时,如果没有指定发送方式,iperf 客户端只会使用单一的线程,而 iperf 是支持多线程的,可以使用 iperf 提供的“-P”参数来设置多线程的数目,通过使用多线程,可以在一定程度上增加网络的吞吐量。
下面通过两个例子进行简单对比,图 2-18 是 iperf 使用单线程传输 1.86GB 数据所消耗的时间和带宽使用情况。为了速率单位统一,这里使用“-f”参数将输出结果都通过 MBytes/sec 来显示。

图 2-18 iperf 在单线程模式下的传输时间和传输速率
从图 2-18 中可以看出,传输 1.86GB 的数据消耗了 17s 的时间,平均带宽速率为 112MBytes/sec(注意单位)。下面再看看使用多线程后,iperf 传输同样大小数据量所消耗的时间和平均带宽速率,如图 2-19 所示。

图 2-19 iperf 使用多线程后的数据传输状态
这里通过“-P”参数开启了 2 个多线程,从传输时间上看,传输 1.86GB 的数据,消耗时间为 10.79s,比之前单线程的传输时间少了近 7s,在平均带宽速率上,从之前单线程的 112MBytes/sec 提高到 177MBytes/sec,从这个结果可以看出,多线程对网络传输性能的提高不小。
2.测试 UDP 丢包和延迟
iperf 也可以用于 UDP 数据包吞吐量、丢包率和延迟指标,但是由于 UDP 协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对 UDP 应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过 iperf 的“-u”参数即可测试 UDP 应用的传输性能,图 2-20 测试的是在 iperf 客户端传输 100MB 的 UDP 数据包的输出结果。

图 2-20 iperf 传输 100MB 的 UDP 数据包的输出结果
在图 2-20 中,重点关注虚线下的一段内容,在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据包和总的数据包数量,后面的 0.33%是平均丢包的比率,“Datagrams”列显示的是总共传输数据包的数量。
这个输出结果过于简单,要了解更详细的 UDP 丢包和延时信息,可以在 iperf 服务端查看,因为在客户端执行传输测试的同时,服务器端也会同时显示传输状态,如图 2-21 所示。

图 2-21 iperf 服务器端显示的 UDP 传输状态
在这个输出中,详细记录了在传输过程中,每个阶段的传输延时和丢包率,在 UDP 应用中随着传输数据的增大,丢包率和延时也随之增加。对于延时和丢包可以通过改变应用程序来缓解或修复,例如视频流应用,通过缓存数据的方式可以容忍更大的延时。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论