【博文推薦】安全運維之:網(wǎng)絡性能評估工具Iperf詳解
| 本文出自南非螞蟻的BLOG,如需與本文作者討論互動,請直接點擊這里跳轉(zhuǎn)。 |
一、網(wǎng)絡性能評估工具Iperf
網(wǎng)絡性能評估主要是監(jiān)測網(wǎng)絡帶寬的使用率,將網(wǎng)絡帶寬利用***化是保證網(wǎng)絡性能的基礎(chǔ),但是由于網(wǎng)絡設計不合理、網(wǎng)絡存在安全漏洞等原因,都會導致網(wǎng)絡帶寬利用率不高。要找到網(wǎng)絡帶寬利用率不高的原因,就需要對網(wǎng)絡傳輸進行監(jiān)控,此時就需要用到一些網(wǎng)絡性能評估工具,而Iperf就是這樣一款網(wǎng)絡帶寬測試工具,本節(jié)將詳細介紹一下Iperf的使用。
1、Iperf能做什么
Iperf是一款基于TCP/IP和UDP/IP的網(wǎng)絡性能測試工具,它可以用來測量網(wǎng)絡帶寬和網(wǎng)絡質(zhì)量,還可以提供網(wǎng)絡延遲抖動、數(shù)據(jù)包丟失率、***傳輸單元等統(tǒng)計信息。網(wǎng)絡管理員可以根據(jù)這些信息了解并判斷網(wǎng)絡性能問題,從而定位網(wǎng)絡瓶頸,解決網(wǎng)絡故障。
下面介紹Iperf的主要功能。
(1)TCP方面
q 測試網(wǎng)絡帶寬。
q 支持多線程,在客戶端與服務端支持多重連接。
q 報告MSS/MTU值的大小。
q 支持TCP窗口值自定義并可通過套接字緩沖。
(2)UDP方面
q 可以設置指定帶寬的UDP數(shù)據(jù)流
q 可以測試網(wǎng)絡抖動值、丟包數(shù)
q 支持多播測試
q 支持多線程,在客戶端與服務端支持多重連接。
二、Iperf的安裝與使用
iperf可以運行在任何IP網(wǎng)絡上,包括本地以太網(wǎng)、接入因特網(wǎng)、Wi-Fi網(wǎng)絡等。在工作模式上,iperf運行于服務器、客戶端模式下,其服務器端主要用于監(jiān)聽到達的測試請求,而客戶端主要用于發(fā)起連接會話,因此要使用iperf,需要兩臺服務器,一臺運行在服務器模式下,另一臺運行在客戶端模式下。
1.安裝iperf
iperf支持Win32、Linux、FreeBSD、MacOS X、OpenBSD和Solaris等多種操作系統(tǒng)平臺。讀者可以從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參數(shù)介紹
在完成iperf安裝后,執(zhí)行“iperf3 –h”即可顯示iperf的詳細用法。iperf的命令行選項共分為三類,分別是客戶端與服務器端公用選項、服務器端專用選項和客戶端專用選項,下面對常用的選項進行介紹。
服務器端專用選項的含義如表1所示。
表1 服務器端專用選項的含義
|
命令行參數(shù) |
含義描述 |
|
-s |
將iperf以server模式啟動,例如:iperf3 –s,iperf3默認啟動的監(jiān)聽端口為5201,可以通過“-p”選項修改默認監(jiān)聽端口 |
|
-D |
將iperf作為后臺守護進程運行,例如:iperf3 -s -D |
客戶端專用選項的含義如表2.5所示。
表2 客戶端專用選項的含義
|
命令行參數(shù) |
含義描述 |
|
-c |
將iperf以client模式啟動 例如:iperf3 -c 192.168.12.168,其中192.168.12.168是server端的IP地址 |
|
-u |
指定使用UDP協(xié)議 |
|
-b [K|M|G] |
指定UDP模式使用的帶寬,單位bits/sec。此選項與“-u”選項相關(guān)。默認值是1 Mbit/sec |
|
-t |
指定傳輸數(shù)據(jù)包的總時間。iperf將在指定的時間內(nèi),重復發(fā)送指定長度的數(shù)據(jù)包。默認是10秒鐘 |
|
-n [K|M|G] |
指定傳輸數(shù)據(jù)包的字節(jié)數(shù),例如:iperf3 -c 192.168.12.168 –n 100M |
|
-l |
指定讀寫緩沖區(qū)的長度。TCP方式默認大小為8KB,UDP方式默認大小為1470字節(jié) |
|
-P |
指定客戶端與服務端之間使用的線程數(shù)。默認是1個線程。需要客戶端與服務器端同時使用此參數(shù) |
|
-R |
切換數(shù)據(jù)發(fā)送接收模式,例如默認客戶端發(fā)送,服務器端接收,設置此參數(shù)后,數(shù)據(jù)流向變?yōu)榭蛻舳私邮眨掌鞫税l(fā)送 |
|
-w |
指定套接字緩沖區(qū)大小,在TCP方式下,此設置為TCP窗口的大小。在UDP方式下,此設置為接受UDP數(shù)據(jù)包的緩沖區(qū)大小,用來限制可以接收數(shù)據(jù)包的***值 |
|
-B |
用來綁定一個主機地址或接口,這個參數(shù)僅用于具有多個網(wǎng)絡接口的主機。在UDP模式下,此參數(shù)用于綁定和加入一個多播組 |
|
-M |
設置TCP***信息段的值 |
|
-N |
設置TCP無延時 |
客戶端與服務器端公用選項的含義如表3所示。
表3 客戶端與服務器端公用選項的含義
|
命令行參數(shù) |
含義描述 |
|
-f [k|m|g|K|M|G] |
指定帶寬輸出單位,“[k|m|g|K|M|G]”分別表示以Kbits, Mbits, Gbits, KBytes, MBytes,GBytes顯示輸出結(jié)果,默認以Mbits為單位,例如:iperf3 -c 192.168.12.168 -f M |
|
-p |
指定服務器端使用的端口或客戶端所連接的端口,例如: iperf3 -s -p 9527; iperf3 -c 192.168.12.168 -p 9527 |
|
-i |
指定每次報告之間的時間間隔,單位為秒。如果設置為非零值,就會按照此時間間隔輸出測試報告。默認值為1。 例如:iperf3 -c 192.168.12.168 -i 2 |
|
-F |
指定文件作為數(shù)據(jù)流進行帶寬測試。 例如:iperf3 -c 192.168.12.168 -F web-ixdba.tar.gz |
2.3.3 Iperf應用實例
要使用iperf,首先要啟用一個服務端,這里假定服務端的IP地址為192.168.12.168,在此服務器上運行“iperf3 -s”即可開啟iperf的服務器模式。在默認情況下,iperf3將在服務端打開一個5201監(jiān)聽端口,此時就可以將另一臺服務器作為客戶端執(zhí)行iperf功能測試了。
1.測試TCP吞吐量
為了確定網(wǎng)卡的***吞吐量,可以在任意客戶端運行iperf命令,iperf將嘗試從客戶端盡可能快地向服務端發(fā)送數(shù)據(jù)請求,并且會輸出發(fā)送的數(shù)據(jù)量和網(wǎng)卡平均帶寬值。圖1是一個最簡單的帶寬測試命令。
圖1通過iperf測試網(wǎng)絡帶寬利用率
從圖1可以看出,iperf默認的運行時間是10秒鐘,每隔一秒鐘輸出一次傳輸狀態(tài),同時還可以看到每秒鐘傳輸?shù)臄?shù)據(jù)量在112MB左右,剛好與“Bandwidth”列的值對應起來,網(wǎng)卡的帶寬速率維持在941Mbits/sec左右,而測試的服務器是千兆網(wǎng)卡,這個測試值也基本合理。在輸出的***,iperf還給出了總的數(shù)據(jù)發(fā)送、接收量,并給出了帶寬速率平均值,通過這些值,基本可以判斷網(wǎng)絡帶寬是否正常,網(wǎng)絡傳輸狀態(tài)是否穩(wěn)定。
iperf提供很多參數(shù),可以多角度、全方位地測試網(wǎng)絡帶寬利用率,例如,要改變iperf運行的時間和輸出頻率,可以通過“-t”和“-i”參數(shù)來實現(xiàn),如圖2所示。
圖2 添加“-t”和“-i”參數(shù)后的iperf輸出
從圖2 可以看出,輸出狀態(tài)的間隔變?yōu)槊?秒鐘一次,總共執(zhí)行測試時間為20秒,測試的帶寬速率仍然保持在941Mbits/sec左右,唯一變化的是失敗重傳次數(shù)增加了。
為了模擬大量的數(shù)據(jù)傳輸,也可以指定要發(fā)送的數(shù)據(jù)量,這可以通過“-n”參數(shù)來實現(xiàn)。在指定“-n”參數(shù)后,“-t”參數(shù)失效,iperf在傳輸完畢指定大小的數(shù)據(jù)包后,自動結(jié)束,如圖3所示。
圖3 iperf客戶端通過“-n”參數(shù)指定要傳輸?shù)臄?shù)據(jù)量
圖3的例子是指定發(fā)送一個5GB左右的數(shù)據(jù)包,并且每隔10秒鐘輸出一次傳輸狀態(tài),從這個輸出可以看出,當失敗重傳次數(shù)較多時,傳輸速率急速下降。
有時候,為了模擬更真實的TCP應用,iperf客戶端允許從一個特定的文件發(fā)送數(shù)據(jù),這可以通過“-F”參數(shù)實現(xiàn),如圖4所示。
圖4 iperf客戶端通過“-F”參數(shù)指定文件來發(fā)送數(shù)據(jù)
在圖4的例子中,通過“-F”參數(shù)指定了一個webdata.tar.gz文件作為iperf要傳輸?shù)臄?shù)據(jù),在使用此參數(shù)時,需要同時指定一個“-t”參數(shù)來設置要測試傳輸?shù)臅r間,這個時間盡量設置長一些,因為在默認傳輸時間10秒內(nèi),這個文件可能還沒有傳完。
在使用iperf進行網(wǎng)絡帶寬測試時,如果沒有指定發(fā)送方式,iperf客戶端只會使用一個單一的線程,而iperf是支持多線程的,可以使用iperf提供的“-P”參數(shù)來設置多線程的數(shù)目,通過使用多線程,可以在一定程度上增加網(wǎng)絡的吞吐量。
下面通過兩個例子進行簡單對比,圖5是iperf使用單線程傳輸1.86GBytes數(shù)據(jù)所消耗的時間和帶寬使用情況。為了速率單位統(tǒng)一,這里使用“-f”參數(shù)將輸出結(jié)果都通過MBytes來顯示。
圖5 iperf在單線程模式下的傳輸時間和傳輸速率
從圖5中可以看出,傳輸1.86GBytes的數(shù)據(jù)消耗了17秒的時間,平均帶寬速率為112MBytes/sec(注意單位).下面再看看使用多線程后,iperf傳輸同樣大小數(shù)據(jù)量所消耗的時間和平均帶寬速率,如圖6所示。
圖6 iperf使用多線程后的數(shù)據(jù)傳輸狀態(tài)
這里通過“-P”參數(shù)開啟了2個多線程,從傳輸時間上看,傳輸1.86GBytes的數(shù)據(jù),消耗時間為10.79秒,比之前單線程的傳輸時間少了近7秒鐘,在平均帶寬速率上,從之前單線程的112MBytes/sec提高到177MBytes/sec,從這個結(jié)果可以看出,多線程對網(wǎng)絡傳輸性能的提高不小。
2 . 測試UDP丟包和延遲
iperf也可以用于UDP數(shù)據(jù)包吞吐量、丟包率和延遲指標,但是由于UDP協(xié)議是一個非面向連接的輕量級傳輸協(xié)議,并且不提供可靠的數(shù)據(jù)傳輸服務,因此對UDP應用的關(guān)注點不是傳輸數(shù)據(jù)有多快,而是它的丟包率和延時指標。通過iperf的“-u”參數(shù)即可測試UDP應用的傳輸性能,圖7測試的是在iperf客戶端傳輸100MB的UDP數(shù)據(jù)包的輸出結(jié)果.:
圖7 iperf傳輸100MB的UDP數(shù)據(jù)包的輸出結(jié)果
在圖7中,重點關(guān)注虛線下的一段內(nèi)容,在這段輸出中,“Jitter”列表示抖動時間,或者稱為傳輸延遲,“Lost/Total”列表示丟失的數(shù)據(jù)報和總的數(shù)據(jù)報數(shù)量,后面的0.33%是平均丟包的比率,“Datagrams”列顯示的是總共傳輸數(shù)據(jù)報的數(shù)量。
這個輸出結(jié)果過于簡單,要了解更詳細的UDP丟包和延時信息,可以在iperf服務端查看,因為在客戶端執(zhí)行傳輸測試的同時,服務端也會同時顯示傳輸狀態(tài),如圖8所示。
圖8 iperf服務端顯示的UDP傳輸狀態(tài)
在這個輸出中,詳細記錄了在傳輸過程中,每個階段的傳輸延時和丟包率,在UDP應用中隨著傳輸數(shù)據(jù)的增大,丟包率和延時也隨之增加。對于延時和丟包可以通過改變應用程序來緩解或修復,例如視頻流應用,可以通過緩存數(shù)據(jù)的方式而可以容忍更大的延時。




































