http://www.pubyun.com/blog/deveops/%E7%BD%91%E7%BB%9C%E8%B4%A8%E9%87%8F%E6%8C%87%E6%A0%87%E5%8F%8A%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7iperf/
服务器上架以,首要的是进行操作系统安装,然后进行联通性测试和网络质量测试。我们曾经有过教训,一个服务器上的业务一直不正常,技术人员排查了好久,在应用和系统上一直没有找到问题,最后发现是一根质量低劣的成品网络线,造成网络质量极差从而引起系统无法正常工作。
网络质量的指标,主要有以下几个:
- 带宽(throughput),网络的吞吐率,端到端之间可以传输的最大速率。比如服务器之间的千兆网络带宽是1000Mbps,或者用户adsl上网速率是 2Mbps。
- 延时(latency),数据包从本地传输到对端之间需要的时间,一般是来回的时间。如果延时过大,就会觉得网络慢,特别是一些交互性强的应用。比如延时超过300ms,通过ssh就会明显感到服务器响应比较慢,跟不上键盘输入的速度。延时一方面和两地之间的传输距离有关,比如中美之间通过海底光缆传输半个地球,来回距离加起来最起码4万公里,光速是30万公里每秒,所以理论延时最起码是130ms,再加上光缆需要转接和绕路,以及其他损耗,所以中美之间网络延时最好的时候也在170ms左右。延时另外一个原因是网络带宽的占用率,如果占用率高,则延时也高,比如天朝的特色,电信和网通之间,互相掐架,互联带宽很小,网络瓶颈,造成互相之间延时很高。很多时候,同一个城市的网通到电信,比到美国去绕一圈还要慢。延时的其他原因,是cpu处理跟不上等。
- 丢包(loss),由于线路带宽占用过高,数据包从一端到另外一端传输的途中,会产生丢失。丢包率是网络的一个重要指标,一旦产生丢包,说明网络带宽不足,系统会自动重传,导致继续劣化,所以丢包率超过10%以后,网络质量会迅速劣化。
- 抖动(jitter),如果延时不稳定,忽快忽慢,网络就存在抖动。抖动这个指标,在VOIP,视频会议等场合,是一个非常重要的指标,如果产生抖动,往往声音和图像也会抖动,无法听清楚或者看清楚。
各种应用,对上述指标的敏感性不一,比如http等应用,往往只对带宽和延时敏感,而游戏类应用,对延时、丢包、带宽敏感,及时语音和视频对上述几个指标都比较敏感。
普通用户测试网络质量的工具,通常的有:
1、ping
谁最常用的一个测试网络质量的一个工具,在各种操作系统、网络设备中一般都自带该工具。ping可以测试网络的延时、丢包率,优点是使用方便,不用安装。
ping的缺陷也比较明显:
- 测试的时候,仅仅发送很小的负载icmp包,无法测试真实负载下的网络质量,比如单位里的网络平时是正常的,但是开一个迅雷下载,就很糟糕了。
- 测试的指标单一,对于带宽、抖动无法测试
2、下载工具,可以测试带宽
这里介绍一个优秀的网络质量测试工具iperf,这个工具在我们的 asterisk 网络电话项目中,立下了汗马功劳。iperf 可以测试真实载荷下的网络质量,可以测试端到端的网络质量,可以测试一定吞吐率下的丢包、抖动。
iperf 在 linux 下和windows下都有二进制包。安装方法:
- centos 下,需要使用EPEL 的软件包
yum install iperf on centos6
=======================
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm
rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
yum install iperf
- 一般的网络传输,使用 tcp 测试(普通网络应用),测试传输带宽:
- 语音服务器应该使用 udp 方式 (-u 选项),主要用于voip,视频会议,一些游戏:
服务器上运行:
iperf -s -u
客户端上测试在8Mbps带宽情况下的网络质量:
iperf -u -c 172.17.0.5 -b 8M -i 1 -w 1M -t 10
客户端起20个进程,每个进程 100k带宽,测试网络质量
iperf -u -c 172.17.0.5 -b 100k -i 1 -w 1M -t 30 -P20
测试结果包括带宽、抖动、丢包:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.003 ms 0/ 893 (0%)
http://www.sdnlab.com/2961.html
2 工作原理
使用Iperf测试时必须将一台主机设置为客户端,一台主机设置为服务器。
Iperf测试TCP
Iperf测试TCP带宽的原理比较简单,在客户端和服务端建立三次握手连接后,客户端带宽的大小等于发送的总数据除以发送的总时间。对服务端测得的带宽,则是接收的总数据除以所花时间。
TCP模式下简单举例:
Server:iperf -s
Client:iperf -c 10.0.0.1 -i 1
客户端到服务器10.0.0.1上带宽测试,每一秒钟打印一次信息。
Iperf测试UDP
Iperf测试UDP性能时,客户端可以指定UDP数据流的速率。客户端发送数据时,将根据客户端提供的速率计算数据报发送之间的时延。
客户端还可以指定发送数据报的大小。每个发送的数据报包含一个ID号,用来唯一标识报文,服务器端根据该ID号来确定数据报丢失和乱序。
当把UDP报文大小设置可以将整个报文放入IP层的包(packet)内时,那么UDP所测得的报文丢失数据即为IP层包的丢失数据,这提供了一个有效的测试包丢失情况的方法。
数据报传输延迟抖动 (Jitter)的测试由服务器端完成,客户发送的报文数据包含有发送时间戳,服务器端根据该时间信息和接收到报文的时间戳来计算传输延迟抖动。传输延迟抖动反映传输过程中是否平滑。由于它是一个相对值,所以并不需要客户端和服务器端时间同步。
UDP模式下简单举例:
Server:iperf -s -u
Client:iperf -c 10.0.0.1 -u -b 100M
在UDP模式下,客户端以100Mbps为数据发送速率,测试客户端到服务器10.0.0.1上的带宽。
综上,用以下方法测试网络连接的质量:
- 延时(反应时间或者RTT):用ping命令量度
- Jitter(延时变化):用Iperf UDP测试来量度
- 数据报丢失:用Iperf UDP测试来量度
- 带宽:通过TCP测试来量度
4 测试实例
测试环境
1) 已搭建好一套SDN网络环境,使用Mininet模拟交换机和主机连接到一款OpenFlow控制器
2) 使用Mininet自带的Iperf工具
应用实例
实例一:最简参数实例
Iperf客户端连接Iperf服务器的TCP默认端口5001,否则我们可以用-p参数修改Iperf服务器的端口,客户端与服务器必须加上同样的端口。结果显示的带宽是从用户到服务器之间的带宽。
本文未完,更多详情请搜索http://www.sdnlab.com/2961