使用iperf測試網(wǎng)絡(luò)性能
iperf 是一個 TCP/IP 和 UDP/IP 的性能測量工具,能夠提供網(wǎng)絡(luò)吞吐率信息,以及震動、丟包率、最大段和最大傳輸單元大小等統(tǒng)計信息;從而能夠幫助我們測試網(wǎng)絡(luò)性能,定位網(wǎng)絡(luò)瓶頸。iperf是開源的,源代碼可以從http://sourceforge.net/projects/iperf/下載。
1. iperf能夠做什么
提起iperf,想必大家都知道它是用了測試網(wǎng)絡(luò)性能的。具體說來,Iperf是美國伊利諾斯大學(xué)(University of Illinois)開發(fā)的一種開源的網(wǎng)絡(luò)性能測試工具??梢杂脕頊y試網(wǎng)絡(luò)節(jié)點間(也包括回環(huán))TCP或UDP連接的性能,包括帶寬、抖動以及丟包率,其中抖動和丟包率適應(yīng)于UDP測試,而帶寬測試適應(yīng)于TCP和UDP。
這里需要特別提出的是,iperf不能夠用來測試時延,想一想這是為什么。
2. 網(wǎng)絡(luò)性能參數(shù)
以上提到了網(wǎng)絡(luò)的主要性能參數(shù)包括帶寬,時延,抖動和丟包率,這些用一個名詞代替,就是QOS(服務(wù)質(zhì)量)。
對于時延和抖動,見如下圖
圖中D1,D2分別表示包A和包B的時延。
抖動=|D2-D1|
對于時延,iperf無能為力。但是iperf能夠計算抖動,想想這又是為什么。
我們知道,在iperf中,我們測試時需要發(fā)送大量的包,因此計算出來的抖動值就是連續(xù)發(fā)送時延差值的平均值。
3. 安裝iperf
在Unix系統(tǒng)下,安裝iperf最方便的方法是直接下載rpm包,使用rpm指定安裝即可。
當然也可以直接去sourceforge上下載源代碼,使用如下命令安裝即可。
#./configure
#make
#make install
前提是該機器上已經(jīng)有C++編譯器和make等程序。安裝完成之后,可以進行一個簡單的回環(huán)測試iperf是否安裝成功。
$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 35589 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec $ iperf -c 127.0.0.1 ------------------------------------------------------------ Client connecting to 127.0.0.1, TCP port 5001 TCP window size: 49.5 KByte (default) ------------------------------------------------------------ [ 3] local 127.0.0.1 port 35589 connected with 127.0.0.1 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec |
iperf測試案例介紹
4. iperf主要參數(shù)
iperf中的可選參數(shù)比較多,具體可以參見其用戶手冊。
http://webfolder.wirelessleiden.nl/iperf/
一般來說,我們在做性能測試的時候需要指定包長,不同的包長會得到不同的吞吐量,通過-l指定,而使用-b指定帶寬。
5. 測試吞吐量,抖動和丟包率
如何需要同時測試以上三個參數(shù),那么只能通過UDP獲得。使用-u參數(shù)進行UDP測試(iperf默認為TCP)。
在測試的最后server端會給出一個報告。
[ 3] local 192.168.1.1 port 2152 connected with 192.168.101.2 port 56768 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 3] 0.0- 1.0 sec 1.40 MBytes 11.7 Mbits/sec 0.069 ms 0/14671 (0%) [ 3] 1.0- 2.0 sec 1.40 MBytes 11.8 Mbits/sec 0.050 ms 0/14703 (0%) [ 3] 2.0- 3.0 sec 1.40 MBytes 11.8 Mbits/sec 0.052 ms 0/14708 (0%) [ 3] 3.0- 4.0 sec 1.40 MBytes 11.8 Mbits/sec 0.057 ms 0/14704 (0%) [ 3] 4.0- 5.0 sec 1.40 MBytes 11.8 Mbits/sec 0.072 ms 0/14706 (0%) [ 3] 5.0- 6.0 sec 1.40 MBytes 11.8 Mbits/sec 0.075 ms 0/14705 (0%) [ 3] 6.0- 7.0 sec 1.40 MBytes 11.8 Mbits/sec 0.060 ms 0/14707 (0%) [ 3] 7.0- 8.0 sec 1.40 MBytes 11.8 Mbits/sec 0.073 ms 0/14703 (0%) [ 3] 8.0- 9.0 sec 1.40 MBytes 11.8 Mbits/sec 0.073 ms 0/14706 (0%) [ 3] 0.0-10.0 sec 14.0 MBytes 11.8 Mbits/sec 0.064 ms 0/147020 (0%) |
要獲得帶寬數(shù)據(jù),需要不斷在client端增加帶寬值,直到server端出現(xiàn)輕微的丟包為止,此時server端顯示的帶寬就是被測系統(tǒng)的吞吐量。
6. 測試時延
那么有朋友會問,iperf不能用來測試時延,而時延又是比較重要的QOS參數(shù),有什么辦法嗎?
其實最簡單的辦法就是使用Ping程序。我們經(jīng)常用它來測試特定主機能否通過IP到達,
程序會按時間和反應(yīng)成功的次數(shù),估計丟包率和分組來回時間(即網(wǎng)絡(luò)時延)。
當然,如果我們能成功構(gòu)造一個回環(huán)測試路徑,那么測試時延就輕而易舉了,我們可以使用iperf發(fā)送數(shù)據(jù),同時結(jié)合tcpdump抓包工具,經(jīng)過wireshark分析.cap文件就可以得出包來回時間,也就是往返時延。
7. 使用TCP測試帶寬應(yīng)注意的問題
有時候,我們需要使用TCP來測試網(wǎng)絡(luò)帶寬。這里有一個參數(shù)需要特別注意,那就是TCP窗口大小,可以使用-w參數(shù)指定。
網(wǎng)絡(luò)通道的容量capacity = bandwidth * round-trip time
而理論TCP窗口的大小就是網(wǎng)絡(luò)通道的容量。
比如,網(wǎng)絡(luò)帶寬為40Mbit/s,回環(huán)路徑消耗時間是2ms,那么TCP的窗口大小不小于40Mbit/s×2ms = 80kbit = 10Kbytes
此時我們可以查詢iperf默認的TCP窗口大小來決定是否需要設(shè)置此參數(shù),在此例中,窗口大小應(yīng)設(shè)計大于10Kbytes,當然,這僅僅是理論值,在實際測試中可能需要作出調(diào)整。
參數(shù)說明
-s 以server模式啟動,eg:iperf -s
-c 以client模式啟動,host是server端地址,eg:iperf -c 222.35.11.23
通用參數(shù)
-f [k|m|K|M] 分別表示以Kbits, Mbits, KBytes, MBytes顯示報告,默認以Mbits為單位,eg:iperf -c 222.35.11.23 -f K
-i sec 以秒為單位顯示報告間隔,eg:iperf -c 222.35.11.23 -i 2
iperf是client端向server端發(fā)送數(shù)據(jù)
server端顯示的是接收速率,最好加i參數(shù),進行速率跟蹤
client 顯示的是發(fā)送速率
server 顯示接收速率
-l 緩沖區(qū)大小,默認是8KB,eg:iperf -c 222.35.11.23 -l 16
可以使用不同的包長,進行測試
-m 顯示tcp最大mtu值
-o 將報告和錯誤信息輸出到文件eg:iperf -c 222.35.11.23 -o c:iperflog.txt
-p 指定服務(wù)器端使用的端口或客戶端所連接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp協(xié)議
測試htb的時候最好用udp,udp通信開銷小,測試的帶寬更準確
-w 指定TCP窗口大小,默認是8KB
如果窗口太小,有可能丟包
-B 綁定一個主機地址或接口(當主機有多個地址或接口時使用該參數(shù))
-C 兼容舊版本(當server端和client端版本不一樣時使用)
-M 設(shè)定TCP數(shù)據(jù)包的最大mtu值
-N 設(shè)定TCP不延時
-V 傳輸ipv6數(shù)據(jù)包
server專用參數(shù)
-D 以服務(wù)方式運行ipserf,eg:iperf -s -D
-R 停止iperf服務(wù),針對-D,eg:iperf -s -R
client端專用參數(shù)
-d 同時進行雙向傳輸測試
-n 指定傳輸?shù)淖止?jié)數(shù),eg:iperf -c 222.35.11.23 -n 100000
-r 單獨進行雙向傳輸測試
-b 指定發(fā)送帶寬,默認是1Mbit/s
在測試qos的時候,這是最有用的參數(shù)。
-t 測試時間,默認10秒,eg:iperf -c 222.35.11.23 -t 5
默認是10s
-F 指定需要傳輸?shù)奈募?/div>
-T 指定ttl值
測試實例:
使用:
此軟件需要安裝到兩端需要互測的機器上,然后一段作為服務(wù)端監(jiān)聽,一端作為客戶端連接。具體命令可以iperf -h 查看下。
服務(wù)端:
iperf -s -u
-s 標記此端為服務(wù)端
-u標記自己為UDP監(jiān)聽
-p 指定自己監(jiān)聽端口
客戶端:
iperf -c 1.1.1.1 -i 1 -u -t 60 -F /root/a.zip -P 5
-c標記自己為客戶端
-i 設(shè)定輸出值間隔
-u使用傳輸協(xié)議為UDP
-t 設(shè)定測試時間為60秒
-F 指定傳輸文件(該項可有可無)
-P 指定進程數(shù),如果設(shè)置為5,那么也就相當與對端建立五個連接
注意事項:
1.發(fā)包測試需要分為UDP測試與TCP測試,其中服務(wù)端需要用-u命令去區(qū)分監(jiān)聽協(xié)議。
2.TCP協(xié)議測試不能計算出時延與丟包率,而且還不能指定發(fā)送帶寬。
案例:
[root@localhost ~]# iperf -c 192.168.1.100 -u -i 1 -t 10 -b 2M #指定2M帶寬向?qū)Χ税l(fā)送數(shù)據(jù) ------------------------------------------------------------ Client connecting to 192.168.1.100, UDP port 5001 Sending 1470 byte datagrams UDP buffer size: 108 KByte (default) ------------------------------------------------------------ [ 3] local 192.200.40.112 port 32784 connected with 218.60.1.20 port 5001 #與對端連接上的信息 [ ID] Interval Transfer Bandwidth #輸出行的解釋 [ 3] 0.0- 1.0 sec 12.0 GBytes 103 Gbits/sec [ 3] 1.0- 2.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 2.0- 3.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 3.0- 4.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 4.0- 5.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 5.0- 6.0 sec 245 KBytes 2.01 Mbits/sec [ 3] 6.0- 7.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 7.0- 8.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 8.0- 9.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 9.0-10.0 sec 244 KBytes 2.00 Mbits/sec [ 3] 0.0-10.0 sec 12.0 GBytes 10.3 Gbits/sec [ 3] Sent 1702 datagrams [ 3] Server Report: #輸出報告 [ 3] 0.0-10.6 sec 263 KBytes 204 Kbits/sec 36.313 ms 1518/ 1701 (89%) #間距 ,傳輸總字節(jié),速率,時延,丟包率。 [ 3] 0.0-10.6 sec 1 datagrams received out-of-order #亂序 |
服務(wù)端:
[root@localhost ~]# iperf -s -u #設(shè)定此端為服務(wù)端 ------------------------------------------------------------ #本段設(shè)置信息 Server listening on UDP port 5001 Receiving 1470 byte datagrams UDP buffer size: 108 KByte (default) ------------------------------------------------------------ [ 3] local 218.60.1.20 port 5001 connected with 218.241.145.36 port 32784 #如果對端連接上了本端才會出現(xiàn)該信息 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 3] 0.0-10.6 sec 263 KBytes 204 Kbits/sec 36.314 ms 1518/ 1701 (89%) [ 3] 0.0-10.6 sec 1 datagrams received out-of-order |
iPerf同樣也可以用于測量UDP數(shù)據(jù)包吞吐量、丟包和延遲指標。與TCP測試不同的是,UDP測試不采取盡可能快地發(fā)送流量的方式。與之相對的是,iPerf嘗試發(fā)送1 Mbps的流量,這個流量是打包在1470字節(jié)的UDP數(shù)據(jù)包中(成為以太網(wǎng)的一幀)。我們可以通過指定一個目標帶寬參數(shù)來增加數(shù)據(jù)量,單位可以是Kbps 或Mbps(-b #K 或 --b #M)。舉例如下:
測量UDP丟包和延遲
然而,上面的例子只說明了iPerf客戶端能夠以多快的速度傳輸數(shù)據(jù)。為了得到更多關(guān)于UDP發(fā)送的數(shù)據(jù),我們必須查看服務(wù)器上的結(jié)果:
測量UDP丟包和延遲
這樣,我們就可以看到吞吐量(間隔1秒測量的),以及丟包數(shù)(丟失的數(shù)據(jù)屯接收到的數(shù)據(jù)對比)和延遲(如jitter——在連續(xù)傳輸中的平滑平均值差)。延遲和丟失可以通過應(yīng)用的改變而被兼容。比如,視頻流媒體通過緩沖輸入而能夠容忍更多的延遲,而語音通訊則隨著延遲增長性能下降明顯。
UDP測試可以通過改變報文緩沖長度進行優(yōu)化,長度單位為Kbytes 或 Mbytes(-l #K or #M)。與以太網(wǎng)幀的1500比特的MTU(最大轉(zhuǎn)換單位)不同的是,802.11數(shù)據(jù)幀可以達到2304比特(在加密之前)。
但是,如果你正在測試的路徑中包括Ethernet和802.11,那么要控制你的測試數(shù)據(jù)包長度,使它在一個Ethernet幀以內(nèi),以避免分片。
另一個有趣的iPerf UDP測試選項是服務(wù)類型(Type of Service, ToS),它的大小范圍從0x10 (最小延遲) 到0x2 (最少費用)。在使用802.11e來控制服務(wù)質(zhì)量的WLAN中,ToS是映射在Wi-Fi多媒體(WMM)存取范疇的。
對比兩種方式
在802.11a/b/g網(wǎng)絡(luò)中,無線電的傳輸性能變化在在兩個方向上都很相似。比如,當距離導(dǎo)致數(shù)據(jù)傳輸率下降或干擾造成重要數(shù)據(jù)包丟失時,發(fā)送和接收的應(yīng)用吞吐量都受到影響。
在802.11n網(wǎng)絡(luò)中,MIMO天線和多維空間流使問題又有所不同。從筆記本發(fā)送到AP上的數(shù)據(jù)幀可能(有意地)使用一個完全與從AP發(fā)送到筆記本上幀時不同的空間路徑。這樣的結(jié)果是,現(xiàn)在對兩個方向的測試都很重要的。幸運的是,iPerf本身就已經(jīng)擁有這個功能,這是由兩個選項所控制的:
--d選項是用于告訴iPerf服務(wù)器馬上連接回iPerf客戶端的由--L 所指定端口,以支持同時測試兩個方向的傳輸。
--r選項雖然有些類似,但是它是告訴iPerf服務(wù)器等到客戶端測試完成后再在相反的方向中重復(fù)之前的測試。
最后,如果你需要支持多點傳送應(yīng)用,那么可以使用-B選項指定多點傳送組IP地址來啟動多個iPerf服務(wù)器。然后再打開你的iPerf客戶端,連接之前啟動的多點傳送組iPerf服務(wù)器。
使用測試工具iPerf監(jiān)控?zé)o線網(wǎng)絡(luò)性能:圖形化測試結(jié)果
如本文介紹的,iPerf程序可以在命令行下運行,它或者也在一個名為JPerf的Java實現(xiàn)前端工具上運行。JPerf不僅能簡化復(fù)雜命令行參數(shù)的構(gòu)造,而且它還保存測試結(jié)果——同時實時圖形化顯示結(jié)果。
圖1 使用JPerf運行iPerf
事實上,iPerf測試工具被嵌入到一些其它的網(wǎng)絡(luò)流量分析工具中——包括底層LAN分析工具,如AirMagnet。比如,在下面的屏幕截圖中顯示了一個Wi-Fi筆記本上運行的AirMagnet作為iPerf客戶端與安裝在有線網(wǎng)絡(luò)上的常規(guī)iPerf服務(wù)器進行交互的情況。
圖2 使用AirMagnet運行iPerf
總結(jié)
正如我們所看到的,iPerf簡化了對基于TCP數(shù)據(jù)流應(yīng)用和UDP數(shù)據(jù)包應(yīng)用的端對端性能測定。然而,iPerf仍然無法模擬所有類型的應(yīng)用——比如,對于交互式上網(wǎng)的模擬就不是很好。同時,用于iPerf Wi-Fi測試的WLAN適配器也會影響你的測試——為了獲得更好的測試結(jié)果,我們可以配置一個類似于“實際”用戶的有代表性的適配器。
盡管如此,iPerf仍然是一個非常方便的工具,它可以幫助你生成和檢測WLAN應(yīng)用流量。同時,因為iPerf可以方便以開源軟件方式獲取,因此使用它來在其它位置重復(fù)創(chuàng)建測試環(huán)境是一個很好的方法——如分公司、供應(yīng)商技術(shù)支持等等。想要了解更多關(guān)于iPerf的信息,可以閱讀NLANR上的更老的文件或者瀏覽SourceForge上新的項目頁面。
posted on 2014-01-27 10:49 順其自然EVO 閱讀(3523) 評論(0) 編輯 收藏 所屬分類: 測試學(xué)習(xí)專欄
只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關(guān)文章:
|
||